Linux 账户管理与 root 用户使用全解析
1. 识别账户
在 Linux 系统中,识别用户账户有多种方式。
-
使用 GUI 工具
:不同的 Linux 发行版有不同的账户管理 GUI 工具。以 Fedora 系统为例,可通过以下步骤找到用户账户工具:
1. 点击主窗口中的“Activities”。
2. 在搜索框中输入“users”。
该工具仅显示用户账户,不显示系统账户。它能让普通用户轻松更改自己的密码,管理员也可快速验证哪些账户处于活动状态,但作为账户管理工具,其功能有限。
-
查看
/etc/passwd文件 :可以使用cat或less命令查看/etc/passwd文件的内容,这样能显示所有账户,包括系统账户和用户账户。例如:
cat /etc/passwd
若要查找特定账户的信息,可使用
grep
命令。例如,查找用户名为
rich
的账户信息:
grep rich /etc/passwd
-
使用
getent passwd命令 :该命令可从某些管理数据库(包括/etc/passwd文件)中检索条目。大多数情况下,getent passwd的结果与cat /etc/passwd相同,但有时会有差异。因为/etc/passwd文件仅定义本地用户账户,若 Linux 配置为使用网络账户数据库,getent passwd将同时返回本地账户和网络服务器上定义的账户。也可以通过在getent passwd后添加用户名来提取单个记录,如:
getent passwd rich
2. 网络账户数据库
许多网络使用网络账户数据库,常见的系统有网络信息系统(NIS)、NIS+、轻量级目录访问协议(LDAP)、Kerberos 领域和 Active Directory(AD)域。这些系统将账户数据库管理集中到一台计算机(通常有一个或多个备份系统)。
使用网络账户数据库的优势在于,用户和管理员无需在多台计算机上独立维护账户,一个账户数据库可处理数十甚至成百上千台不同计算机的账户,大大简化日常管理任务和用户操作。不过,使用此类系统后,大多数用户账户不会出现在
/etc/passwd
和
/etc/shadow
文件中,组信息也可能不会出现在
/etc/group
文件中,但这些文件仍会保存本地系统账户和组的信息。
Linux 可以参与这些系统,部分发行版在操作系统安装时提供启用支持的选项。通常,需要知道托管网络账户数据库的服务器名称或 IP 地址、系统使用的协议,可能还需要密码或其他特定协议信息,并且服务器需要配置为接受所配置的 Linux 系统的访问。
3. 理解组
组是在
/etc/group
文件中定义的账户集合。该文件与
/etc/passwd
类似,包含以冒号分隔的行(记录),每行定义一个组。例如:
users:x:100:games,sally
/etc/group
文件的字段如下:
| 字段 | 说明 |
| ---- | ---- |
| 组名 | 如上述示例中的
users
,用于大多数访问或操作组数据的命令。 |
| 密码 | 组可以像用户一样有密码,值为
x
表示密码在其他地方定义(可能已禁用),空密码字段表示组没有密码。 |
| GID | Linux 内部使用 GID 值,类似于 UID 值,为方便用户和管理员操作,会进行组名与 GID 的转换。 |
| 用户列表 | 在
/etc/group
记录末尾以逗号分隔的列表中指定属于该组的用户。 |
用户可以通过以下两种方式被识别为组的成员:
-
在
/etc/passwd
条目中指定组的 GID
:由于
/etc/passwd
中只能容纳一个 GID 值,因此只能以此方式定义一个组,这是用户的主(或默认)组。
-
在
/etc/group
文件的用户列表中指定用户名
:单个用户可以在
/etc/group
中多次出现,单个组也可以通过这种方式关联多个用户。如果用户通过这种方式与组关联,但不是通过
/etc/passwd
条目关联,则该组关联为次要关联。
当创建新文件时,这些文件将与当前组关联。登录时,当前组设置为主组。若要创建与所属的另一个组关联的文件,可以使用
newgrp
命令,例如:
newgrp project1
此命令将
project1
设置为当前组,后续创建的文件将与该组关联。文件的组所有权在文件安全中很重要。
4. 使用账户工具
有几个命令可帮助了解计算机上的用户和组信息。
-
发现自己的身份
-
whoami
命令
:当维护多个账户且忘记当前登录的账户时,
whoami
命令可显示当前用户 ID。例如:
whoami
输出结果可能为
christine
,表明当前账户是
christine
。
-
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
。
-
了解谁在线
-
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#
表示文本会话。
-
登录日期和时间
:显示每个用户的登录时间。
-
远程主机
:最后一列(如果存在)显示登录源,控制台登录不包含源,主机名或 IP 地址表示远程访问。
可以通过传递选项给
who
命令来获取更多信息,例如
who -q
可生成更紧凑的数据摘要:
who -q
输出示例:
christine kevin rich christine
# users=4
还可以使用
who am i
仅显示当前用户 ID 的数据。
- **`w` 命令**:`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
w
命令除了显示与
who
类似的信息(终端标识符和登录时间)外,还显示会话的空闲时间、会话关联的总 CPU 时间、当前进程关联的 CPU 时间以及会话正在运行的程序。部分配置还会显示
FROM
列,使用
-f
选项可切换该选项的显示状态。
5. 以 root 用户身份工作
Linux 基于 Unix 设计,是多用户操作系统。原则上,一台 Unix 或 Linux 计算机可以有数千个账户,但需要一个拥有特殊权限的用户来管理计算机的整体功能,即
root
用户,也称为超级用户或管理员。
-
理解用户类型
- 普通用户 :大多数人使用计算机进行日常任务,如浏览网页、写信、管理音乐收藏等,这些任务不需要特殊权限。Linux 计算机可以有多个用户账户,用户可以使用这些非特权账户执行用户任务。
-
root 用户
:
root用户用于执行管理任务,如安装新软件、准备新磁盘、管理普通用户账户等。这些任务需要访问普通用户无需修改甚至无需读取的系统文件。root用户可以读写计算机上的每个文件,能够更改操作系统操作的任何细节。但由于root账户的强大权限,使用时可能会导致意外损坏,例如误删系统文件可能使计算机无法启动,因此使用时需谨慎。
-
获取 root 权限
-
直接以 root 用户身份登录
:可以在文本模式 shell 或使用远程登录工具(如 SSH)直接以
root用户身份登录。部分 Linux 发行版默认不允许root用户直接登录,因为这样存在风险。 -
使用
su命令 :su命令可在 shell 中更改身份。输入su username可将身份更改为指定的用户名,若省略用户名,则默认为root。例如:
-
直接以 root 用户身份登录
:可以在文本模式 shell 或使用远程登录工具(如 SSH)直接以
su
使用该命令需要知道目标账户的密码。获取
root
权限后,可以随意执行
root
命令,完成后输入
exit
可放弃超级用户身份。也可以使用
-c
选项运行单个
root
命令,如:
su -c "command"
若命令中使用
-
,如
su-
或
su-luke
,程序将打开一个登录会话,运行目标用户的登录脚本,这对于设置环境变量很重要。
-
使用
sudo
命令
:
sudo
命令与
su
类似,但一次只能执行一个命令。例如,使用
sudo
查看
/etc/shadow
文件内容:
sudo cat /etc/shadow
使用该命令时,需要根据
sudo
配置输入自己的密码或
root
密码。部分发行版(如 Ubuntu)严重依赖
sudo
,默认不允许直接以
root
用户身份登录。
-
获取 root 权限的合法性
在工作场所使用 Linux 系统时,确定公司关于获取root权限的政策很重要。直接以root用户身份登录或使用su命令获取root权限会创建一个可否认的环境,用户可能会否认自己以root用户身份登录并执行的操作,这可能导致危险情况。许多公司要求需要获取root权限的用户使用sudo命令,因为sudo会跟踪和记录用户活动,创建一个不可否认的环境。 -
GUI 模式下使用 root 权限
如果需要在 GUI 模式下管理 Linux 系统,可通过以下两种方式获取root权限:-
从已使用
su命令的 shell 中启动 GUI 管理工具,但对于更习惯 GUI 的用户来说,这种方法不太优雅。 -
大多数发行版允许从计算机的桌面菜单启动管理工具,当需要超级用户权限时,GUI 工具会提示输入
root密码,输入正确密码后程序将继续运行,效果类似于使用sudo从 shell 中启动程序。
-
从已使用
如果忘记了
root
密码,可以使用搜索引擎搜索“reset [发行版名称] root password”来查找重置密码的方法。
Linux 账户管理与 root 用户使用全解析
6. 账户管理的安全注意事项
在 Linux 系统中,账户管理的安全性至关重要。以下是一些关键的安全注意事项:
-
密码安全
:
-
强密码策略
:无论是普通用户账户还是
root
账户,都应使用强密码。强密码应包含大写字母、小写字母、数字和特殊字符,且长度足够长。例如,
P@ssw0rd!123
比简单的
password
更安全。
-
定期更换密码
:定期更改密码可以降低密码被破解的风险。建议每 3 - 6 个月更换一次重要账户的密码。
-
账户权限管理
:
-
最小权限原则
:为用户分配的权限应仅满足其完成工作所需的最小权限。避免为用户分配过高的权限,防止误操作或恶意操作。例如,普通用户仅需要读写自己的个人文件,不应赋予其对系统文件的访问权限。
-
定期审查账户权限
:定期检查用户账户的权限,确保权限分配仍然合理。对于离职员工或不再需要某些权限的用户,及时撤销相应权限。
7. 账户管理的自动化脚本示例
为了提高账户管理的效率,可以编写自动化脚本。以下是一个简单的创建用户账户的脚本示例:
#!/bin/bash
# 定义用户名和密码
username="newuser"
password="P@ssw0rd!123"
# 创建用户账户
useradd $username
# 设置用户密码
echo "$password" | passwd --stdin $username
echo "用户账户 $username 已成功创建。"
将上述脚本保存为
create_user.sh
,并赋予执行权限:
chmod +x create_user.sh
然后运行脚本:
./create_user.sh
这个脚本将创建一个名为
newuser
的用户账户,并设置密码为
P@ssw0rd!123
。
8. 账户管理的常见问题及解决方法
在账户管理过程中,可能会遇到一些常见问题,以下是一些解决方法:
| 问题 | 解决方法 |
| ---- | ---- |
| 用户忘记密码 | 管理员可以使用
passwd
命令重置用户密码。例如,重置用户
sally
的密码:
bash<br>passwd sally<br>
|
| 无法以
root
用户身份登录 | 检查
/etc/ssh/sshd_config
文件中是否允许
root
登录。如果不允许,可将
PermitRootLogin
设置为
yes
,然后重启 SSH 服务:
bash<br>systemctl restart sshd<br>
|
| 账户被锁定 | 检查
/etc/shadow
文件中账户的锁定状态。如果账户被锁定,可使用
usermod
命令解锁。例如,解锁用户
john
的账户:
bash<br>usermod -U john<br>
|
9. 账户管理的流程图
graph TD
A[开始] --> B[识别账户]
B --> C{选择管理方式}
C -->|GUI 工具| D[使用 GUI 工具管理账户]
C -->|命令行| E[使用命令行管理账户]
D --> F[查看或修改账户信息]
E --> G[查看 /etc/passwd 文件]
E --> H[使用 getent passwd 命令]
G --> I[识别所有账户]
H --> I
I --> J{是否需要管理组}
J -->|是| K[理解组信息]
J -->|否| L[使用账户工具]
K --> M[查看 /etc/group 文件]
M --> N[管理组信息]
N --> L
L --> O{是否需要 root 权限}
O -->|是| P[获取 root 权限]
O -->|否| Q[执行普通操作]
P --> R[以 root 身份执行操作]
R --> S[结束]
Q --> S
10. 总结
Linux 系统的账户管理是系统管理的重要组成部分,涉及到账户的识别、组的管理、权限的分配以及
root
用户的使用等多个方面。通过合理使用各种账户管理工具和方法,可以提高系统的安全性和管理效率。同时,要注意遵循安全原则,如使用强密码、最小权限原则等,以防止系统受到恶意攻击或误操作的影响。在遇到问题时,要能够根据具体情况采取相应的解决方法,确保系统的正常运行。希望本文介绍的内容能够帮助你更好地管理 Linux 系统的账户。
超级会员免费看
876

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



