Linux账户管理与root权限使用全解析
一、账户识别
在Linux系统中,识别用户账户有多种方式。
1.
使用GUI工具
- 不同的Linux发行版有不同的账户管理GUI工具。以Fedora系统为例,可通过点击主窗口的“Activities”,然后在搜索框中输入“users”,快速找到“Settings”控制面板中的“Users account tool”。
- 该工具仅显示用户账户,不显示系统账户。它能让用户更改一些功能,如用户密码,但作为账户管理工具的实用性有限。普通用户能较轻松地使用它来更改自己的密码,管理员则可通过它快速验证哪些账户处于活动状态。
2.
查看
/etc/passwd
文件
- 使用
cat
或
less
命令查看
/etc/passwd
文件的内容,可显示计算机的所有账户,包括系统账户和用户账户。例如:
cat /etc/passwd
- 若要查找特定账户的信息,可使用`grep`命令。如查找用户名包含“rich”的账户信息:
grep rich /etc/passwd
-
使用
getent passwd命令-
该命令从某些管理数据库(包括
/etc/passwd文件)中检索条目。多数情况下,其结果与cat /etc/passwd相同,但有时会有差异。因为/etc/passwd文件仅定义本地用户账户,而Linux可配置为使用网络账户数据库来定义部分或全部账户。若使用此类配置,getent passwd会返回本地账户和网络服务器上定义的账户。 -
也可通过在
getent passwd命令后添加用户名来提取单个记录,如:
-
该命令从某些管理数据库(包括
getent passwd rich
二、网络账户数据库
许多网络使用网络账户数据库,常见的系统有:
-
Network Information System (NIS)
-
NIS+(NIS的更新版本)
-
Lightweight Directory Access Protocol (LDAP)
-
Kerberos realms
-
Active Directory (AD) domains
这些系统将账户数据库管理集中到一台中央计算机(通常配有一个或多个备份系统)。其优势在于用户和管理员无需在多台计算机上独立维护账户,单个账户数据库可处理数十(甚至成百上千)台不同计算机的账户,大大简化了日常管理任务,也方便了用户。
不过,使用这类系统意味着大多数用户账户不会出现在
/etc/passwd
和
/etc/shadow
文件中,组信息可能也不会出现在
/etc/group
文件中,但这些文件仍会保存本地系统账户和组的信息。
Linux可参与这些系统,部分发行版在操作系统安装时提供启用此类支持的选项。通常,需要知道托管网络账户数据库的服务器名称或IP地址,以及该系统使用的协议,可能还需要密码或其他特定于协议的信息,并且服务器可能需要配置为接受来自正在配置的Linux系统的访问。
三、理解组
组是在
/etc/group
文件中定义的账户集合。该文件与
/etc/passwd
类似,包含以冒号分隔的行(记录),每行定义一个组。例如:
users:x:100:games,sally
/etc/group
文件的字段如下:
| 字段 | 说明 |
| ---- | ---- |
| 组名 | 如上述示例中的“users”,用于大多数访问或操作组数据的命令。 |
| 密码 | 组可以像用户一样有密码。值为“x”表示密码在其他地方定义(可能已禁用),空密码字段表示组没有密码。 |
| GID | Linux内部使用GID值,类似于UID值。为方便用户和管理员,会进行组名与GID值的转换。 |
| 用户列表 | 在
/etc/group
记录末尾以逗号分隔的列表中指定属于该组的用户。 |
用户可通过以下两种方式被识别为组的成员:
1.
在用户的
/etc/passwd
条目中指定组的GID
:由于
/etc/passwd
中只有一个GID值的位置,因此只能以此方式定义一个组,这是用户的主(或默认)组。
2.
在
/etc/group
文件的用户列表中指定用户名
:单个用户可在
/etc/group
中多次出现,单个组也可通过这种方式关联多个用户。若用户通过这种方式与组关联,但未在其
/etc/passwd
条目中体现,则该组关联为次要关联。
当创建新文件时,这些文件将与当前组关联。登录时,当前组设置为主组。若想创建与所属的另一个组关联的文件,可使用
newgrp
命令,例如:
newgrp project1
此命令将“project1”设置为当前组,后续创建的文件将与该组关联。文件的组所有权在文件安全中很重要。
四、使用账户工具
有几个命令可帮助了解计算机上的用户和组信息。
1.
发现自己的身份
-
whoami
命令
:当维护多个账户且忘记使用哪个账户登录时,
whoami
命令可显示当前用户ID。例如:
whoami
- **`id`命令**:若需要更多信息,可使用`id`命令。它会显示用户和组的相关信息,如:
id
输出示例:
uid=1002(christine) gid=100(users) groups=100(users)[...]
此示例显示了用户ID和用户名、当前组以及所有组的成员身份。`id`命令可通过指定各种选项来限制输出,具体选项如下表所示:
| 长选项 | 短选项 | 效果 |
|---|---|---|
--group
|
-g
| 仅显示有效组ID |
--groups
|
-G
| 显示所属的所有组 |
--user
|
-u
| 仅显示用户数据 |
--name
|
-n
|
与
-g
、
-G
或
-u
结合使用,仅显示名称,不显示UID或GID
|
--real
|
-r
|
与
-g
、
-G
或
-u
结合使用,仅显示UID或GID,不显示名称
|
此外,还可指定用户名来获取该用户的信息,如
id sally
。
| ||
| 2. 了解谁在线 | ||
-
who
命令
:Linux允许多个用户同时访问计算机,可使用
who
命令了解当前谁在使用计算机。例如:
|
who
输出示例:
christine:0 2016–05–04 17:33 (:0)
kevin tty2 2016–05–04 17:36
rich pts/0 2016–05–04 17:33 (192.168.56.101)
christine pts/1 2016–05–04 17:34 (:0)
默认输出包含以下信息:
- **用户名**:`who`输出的第一列显示用户名。
- **终端标识符**:第二列显示与终端关联的代码。如“:0”表示本地GUI登录,“pts/#”或“tty#”表示文本会话,可能是GUI中启动的终端、文本模式控制台登录或通过SSH等协议的远程登录。
- **登录日期和时间**:显示每个登录的日期和时间。
- **远程主机**:输出的最后一列(若存在)显示登录源。控制台登录(包括文本模式和基于GUI的登录)不包含源。如“#”或“#.#”表示在GUI中打开的终端,主机名或IP地址表示从指定计算机的远程访问。
通过传递选项给`who`命令,可获取更多信息。其中较有用的是`count`(或`-q`)选项,它会生成更紧凑的数据摘要:
who -q
输出示例:
christine kevin rich christine
# users=4
还可通过`who am i`命令显示当前用户ID的信息。
- **`w`命令**:与`who`命令类似,但输出更详细。例如:
w
输出示例:
117:52:40 up 24 min, 4 users, load average: 0.02, 0.108, 0.20
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
christin:0 17:33 ?xdm? 1:16 0.16s gdm-sess[...]
kevin tty2 17:36 16:24 0.10s 0.10s -bash
rich pts/0 17:33 19:36 0.11s 0.11s -bash
christin pts/1 17:34 0:00s 0.22s 0.01s w
除了显示与`who`类似的信息外,`w`命令还显示以下信息:
- **会话空闲时间**:指示用户与该会话最后一次交互以来的时间,有助于识别用户可能已放弃的会话。
- **JCPU列**:标识与会话关联的总CPU时间,在计算机因失控进程而变慢时,可作为有用的调试信息。
- **PCPU列**:标识会话中当前运行的进程关联的总CPU时间,有助于追踪失控进程。
- **WHAT列**:显示会话正在运行的程序。
部分配置还会显示“FROM”列,显示远程主机名,可使用`-f`选项切换该选项的开关。其他一些选项可消除或修改`w`的输出,具体可查看该程序的`man`页面。
下面通过mermaid流程图展示账户识别的流程:
graph TD;
A[识别用户账户] --> B[使用GUI工具];
A --> C[查看/etc/passwd文件];
A --> D[使用getent passwd命令];
B --> B1[Fedora系统:点击Activities-输入users];
C --> C1[使用cat或less命令];
C --> C2[使用grep命令查找特定账户];
D --> D1[获取本地和网络账户信息];
D --> D2[添加用户名提取单个记录];
五、以root身份工作
-
理解用户类型
- 普通用户 :大多数人使用计算机进行日常任务,如浏览网页、写信、管理音乐收藏等,这些任务不需要特殊权限。Linux计算机可以有多个用户账户,用户可通过这些账户(也称为非特权账户、非特权用户或标准用户)执行此类用户任务。
-
root用户
:root用户(也称为超级用户、管理员)拥有管理计算机整体功能的非凡权力。其存在是为了执行管理任务,如安装新软件、准备新磁盘供计算机使用以及管理普通用户账户等。这些任务需要访问普通用户无需修改甚至无需读取的系统文件。root可以读写计算机上的每个文件,这实际上赋予了root更改操作系统操作任何细节的权力。但root账户的强大权力可能导致意外损坏,例如误操作
rm命令,普通用户可能只会删除自己的文件,而root用户可能会删除系统文件,导致计算机无法启动。因此,使用root账户时应谨慎。 -
系统用户
:系统用户是非登录账户,用于守护进程、服务或应用程序。系统用户账户通常具有较低的UID编号,没有密码(账户被锁定),默认shell为
/usr/sbin/nologin、/sbin/nologin或/bin/false。
-
获取root权限
当需要执行需要root权限的命令行任务时,可通过以下三种方式获取root权限:- 直接以root身份登录 :可在文本模式shell中直接以root身份登录,或使用SSH等远程登录工具。部分Linux发行版甚至允许root以GUI模式登录,但有些发行版默认不允许root直接登录,因为这很危险。
-
使用
su命令 :su命令可在shell中更改身份。输入su username可将身份更改为指定的用户名,若省略用户名,则默认为root。例如:
su
执行此命令后,需要输入目标账户的密码。获取root权限后,可随意输入root命令,完成后输入`exit`放弃超级用户身份。还可使用`-c`选项以root身份运行单个命令,如:
su -c "command"
若在命令中使用破折号(`-`),如`su -`或`su -luke`,程序将打开一个登录会话,运行目标用户的登录脚本,这对设置重要的环境变量(如`$PATH`)很重要。
- **使用`sudo`命令**:`sudo`命令与`su`类似,但每次只能执行一个命令。例如,查看`/etc/shadow`文件的内容:
sudo cat /etc/shadow
使用此程序时,需根据`sudo`配置输入自己的密码或root密码(使用`su -c`时,必须始终输入root密码)。下一个命令将以普通账户权限执行。部分发行版(如Ubuntu)严重依赖`sudo`,默认不允许root直接登录。
-
获取root权限的合法性
在工作场所使用Linux系统时,确定公司关于获取root权限的政策很重要。直接以root身份登录或使用su命令获取root权限会创建所谓的“可否认环境”,在这种环境中,用户可以否认自己以root身份登录,这可能导致root账户用户进行非法或捣乱活动后合法地否认责任,是一种潜在的危险情况。
许多公司(或应该)坚持使用
sudo
命令来获取root权限,因为
sudo
命令会跟踪和记录用户的活动,创建所谓的“不可否认环境”,在这种环境中,用户的行为无法合法否认。
当以root身份登录或使用
su
命令获取root权限时,shell提示符会发生变化。例如:
[luke@wembleth ~]$ su
Password:
[root@wembleth luke] #
在这个例子中,用户名从“luke”变为“root”,目录从“~”变为“luke”(因为对于root,“~”指的是
/root
,而不是
/home/luke
),提示符的最后一个字符从美元符号(
$
)变为井号(
#
)。本书中的大多数示例通过提示符隐式指定命令是否需要root权限,如:
# cat /etc/shadow
使用井号提示符表示必须以root权限输入此命令。
若在GUI模式下管理Linux系统,可从已使用
su
的shell中启动GUI管理工具,但对于更习惯GUI的用户来说,这种方法不太优雅。大多数发行版提供了另一种选择:可从计算机的桌面菜单中启动管理工具,当需要超级用户权限时,GUI工具会提示输入root(管理员)密码,输入正确密码后,程序将继续运行,效果类似于从shell中使用
sudo
启动程序,即程序以root身份运行,但不会使其他程序也以root身份运行。
若忘记了root密码,可使用喜欢的网络搜索引擎,输入“reset Linux root password”(最好输入发行版的名称代替“Linux”)来查找重置密码的方法。
下面通过表格总结获取root权限的三种方式:
| 获取方式 | 说明 | 示例 |
| ---- | ---- | ---- |
| 直接以root身份登录 | 在文本模式shell或使用远程登录工具登录,部分发行版默认不允许 | SSH登录root账户 |
| 使用su命令 | 更改身份为root或指定用户,需输入目标账户密码 |
su
或
su username
|
| 使用sudo命令 | 每次执行一个需要root权限的命令,根据配置输入密码 |
sudo cat /etc/shadow
|
通过以上内容,我们全面了解了Linux系统中的账户管理、组的概念、账户工具的使用以及以root身份工作的相关知识,希望这些信息能帮助你更好地管理和使用Linux系统。
Linux账户管理与root权限使用全解析
六、账户管理与安全建议
在Linux系统中,账户管理和安全至关重要。以下是一些实用的建议和操作步骤,帮助你更好地管理账户并保障系统安全。
1.
账户密码管理
-
设置强密码
:为所有账户设置强密码,强密码应包含大写字母、小写字母、数字和特殊字符,且长度不少于8位。例如,“P@ssw0rd!23”就是一个相对安全的密码。
-
定期更换密码
:建议定期(如每3 - 6个月)更换账户密码,以降低密码泄露的风险。可使用
passwd
命令更改密码:
passwd
执行该命令后,系统会提示输入当前密码(若有),然后输入新密码并确认。
-
账户锁定与解锁
-
锁定账户
:若某个账户暂时不需要使用或怀疑存在安全风险,可锁定该账户。使用
usermod命令锁定账户,例如锁定用户“sally”的账户:
-
锁定账户
:若某个账户暂时不需要使用或怀疑存在安全风险,可锁定该账户。使用
usermod -L sally
- **解锁账户**:当需要重新启用锁定的账户时,使用`usermod`命令解锁:
usermod -U sally
-
删除不必要的账户
定期检查系统中的账户,删除不再使用的账户,以减少潜在的安全风险。使用userdel命令删除账户,例如删除用户“games”的账户:
userdel games
若要同时删除该用户的主目录,可使用
-r
选项:
userdel -r games
七、组管理的高级应用
除了基本的组概念和操作,组管理还有一些高级应用场景。
1.
创建新组
使用
groupadd
命令创建新组,例如创建名为“developers”的组:
groupadd developers
-
修改组信息
使用groupmod命令修改组的信息,如修改组名或GID。例如,将组“users”的GID修改为200:
groupmod -g 200 users
-
删除组
使用groupdel命令删除不再需要的组,例如删除组“developers”:
groupdel developers
八、root权限的安全使用策略
root权限的强大功能意味着使用时必须格外谨慎,以下是一些安全使用root权限的策略。
1.
最小权限原则
只在必要时使用root权限,避免长时间以root身份登录。例如,若只是查看系统日志,可使用普通用户账户登录,仅在需要修改日志文件权限或内容时,再临时获取root权限。
2.
使用sudo的配置管理
sudo
命令的配置文件
/etc/sudoers
可对用户或用户组的sudo权限进行精细管理。使用
visudo
命令编辑该文件,例如允许用户“christine”以root身份执行
ls
和
cat
命令:
christine ALL=(ALL) /bin/ls, /bin/cat
编辑完成后保存退出。注意,使用
visudo
命令可避免因编辑错误导致
sudo
无法正常使用。
3.
监控root活动
定期查看系统日志(如
/var/log/auth.log
),监控root账户的登录和操作记录,及时发现异常活动。例如,使用
grep
命令查找root登录记录:
grep "root" /var/log/auth.log
九、账户管理与安全的流程总结
下面通过mermaid流程图总结账户管理和安全的主要流程:
graph LR;
A[账户管理与安全] --> B[账户设置];
A --> C[组管理];
A --> D[root权限使用];
B --> B1[设置强密码];
B --> B2[定期更换密码];
B --> B3[锁定/解锁账户];
B --> B4[删除不必要账户];
C --> C1[创建新组];
C --> C2[修改组信息];
C --> C3[删除组];
D --> D1[遵循最小权限原则];
D --> D2[配置sudo权限];
D --> D3[监控root活动];
十、常见问题解答
在Linux账户管理和root权限使用过程中,可能会遇到一些常见问题,以下是解答。
1.
忘记root密码怎么办?
若忘记root密码,可使用前面提到的方法,通过网络搜索引擎输入相关关键词(如“reset Ubuntu root password”)查找具体的重置方法。一般步骤可能包括进入单用户模式或使用安装介质重置密码。
2.
使用sudo时提示“not in the sudoers file”怎么办?
这表示当前用户不在sudoers文件中,没有使用sudo的权限。需要以root身份编辑
/etc/sudoers
文件,添加该用户的sudo权限。例如,添加用户“kevin”到sudoers文件:
kevin ALL=(ALL) ALL
-
如何查看某个用户所属的所有组?
可使用id命令查看用户所属的所有组,例如查看用户“rich”所属的组:
id rich
十一、总结
通过本文的介绍,我们深入了解了Linux系统中账户管理的各个方面,包括账户识别、网络账户数据库、组的概念、账户工具的使用以及root权限的获取和安全使用。以下是关键要点总结:
1.
账户识别
:可通过GUI工具、查看
/etc/passwd
文件和使用
getent passwd
命令识别账户。
2.
网络账户数据库
:Linux可参与多种网络账户数据库系统,简化账户管理,但使用时需注意相关配置。
3.
组管理
:组在
/etc/group
文件中定义,用户可通过不同方式成为组的成员,文件的组所有权对安全很重要。
4.
账户工具
:
whoami
、
id
、
who
和
w
等命令可帮助了解用户和组信息。
5.
root权限
:root用户拥有强大权力,获取root权限有多种方式,但使用时需谨慎,遵循安全策略。
在实际使用Linux系统时,应根据具体需求和安全要求,合理运用这些知识和工具,确保系统的稳定和安全。希望本文能为你在Linux账户管理和安全方面提供有价值的参考。
| 类别 | 关键操作 | 命令示例 |
|---|---|---|
| 账户识别 | 使用GUI工具(Fedora) | 点击Activities - 输入users |
| 账户识别 |
查看
/etc/passwd
文件
|
cat /etc/passwd
|
| 账户识别 |
使用
getent passwd
命令
|
getent passwd rich
|
| 组管理 | 创建新组 |
groupadd developers
|
| 组管理 | 修改组信息 |
groupmod -g 200 users
|
| 组管理 | 删除组 |
groupdel developers
|
| root权限获取 | 直接以root身份登录 | SSH登录root账户 |
| root权限获取 |
使用
su
命令
|
su
或
su username
|
| root权限获取 |
使用
sudo
命令
|
sudo cat /etc/shadow
|
通过以上总结和操作指南,你可以更好地掌握Linux账户管理和root权限使用的技巧,提升系统管理能力和安全性。
超级会员免费看
8451

被折叠的 条评论
为什么被折叠?



