用户与用户组管理
1. /etc/passwd 文件

作用
/etc/passwd 文件存储了系统中所有用户的基本信息,包括用户名、用户 ID(UID)、用户组 ID(GID)、用户主目录、登录 Shell 等。
格式
每行代表一个用户,字段之间用冒号(:)分隔,格式如下:
用户名:密码占位符:UID:GID:用户描述:主目录:登录Shell
示例
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
面试问题及答案
问题 1:/etc/passwd 文件中的 x 表示什么?
- 答案:
x是一个占位符,表示密码信息已经移动到/etc/shadow文件中,以增强安全性。
问题 2:如何查看 /etc/passwd 文件中所有用户的主目录?
- 答案:可以使用
awk命令提取第 6 列:awk -F: '{print $6}' /etc/passwd
2. /etc/shadow 文件


作用
/etc/shadow 文件存储了用户密码的加密信息以及其他与用户登录相关的信息,如密码过期时间等。
格式
每行对应一个用户,字段之间用冒号(:)分隔,格式如下:
用户名:加密密码:最后一次修改时间:最小修改间隔:最大修改间隔:警告天数:不活动天数:失效日期:保留字段
示例
root:$6$...:18482:0:99999:7:::
daemon:*:18482:0:99999:7:::
面试问题及答案
问题 1:如何查看 /etc/shadow 文件中某个用户的密码是否过期?
- 答案:可以查看
max字段(第 5 列),如果为99999表示密码永不过期。可以通过以下命令查看:awk -F: '$1 == "username" {print $5}' /etc/shadow
问题 2:如何强制用户在下次登录时更改密码?
- 答案:可以将用户的
last_change字段(第 3 列)设置为0,例如:chage -d 0 username
3. /etc/group 文件

作用
/etc/group 文件存储了系统中所有用户组的基本信息,包括组名、组密码(通常为空)、组 ID(GID)和组成员列表。
格式
每行代表一个用户组,字段之间用冒号(:)分隔,格式如下:
组名:组密码:GID:组成员列表
示例
root::0:root
daemon::1:daemon
bin::2:bin
面试问题及答案
问题 1:如何查看 /etc/group 文件中某个组的所有成员?
- 答案:可以使用
awk命令提取第 4 列:awk -F: '$1 == "groupname" {print $4}' /etc/group
问题 2:如何将用户添加到某个组?
- 答案:可以使用
usermod命令:usermod -aG groupname username
4. /etc/gshadow 文件

作用
/etc/gshadow 文件存储了用户组的密码信息和其他与组管理相关的信息,类似于 /etc/shadow 文件,但针对用户组。
格式
每行对应一个用户组,字段之间用冒号(:)分隔,格式如下:
组名:组密码:管理员列表:成员列表
组密码默认值:
用户组的密码信息。如果设置为 *,表示该组没有密码。! 表示该组的密码功能已被禁用。
示例
root:::root
daemon:::
bin:::
面试问题及答案
问题 1:如何查看 /etc/gshadow 文件中某个组的管理员列表?
- 答案:可以使用
awk命令提取第 3 列:awk -F: '$1 == "groupname" {print $3}' /etc/gshadow
问题 2:如何设置某个组的密码?
- 答案:可以使用
gpasswd命令:gpasswd groupname
5. useradd 命令
作用
useradd 命令用于创建新用户。
常用参数
-u UID:指定用户的 UID。-g GID:指定用户的初始登录组。-G GID1,GID2,...:指定用户的附加组。-d HOME:指定用户的主目录。-m:自动创建用户的主目录,默认路径为/home/username。-s SHELL:指定用户的登录 Shell。-c COMMENT:指定用户的注释信息。
示例
useradd -u 1001 -g users -G wheel -d /home/newuser -s /bin/bash -c "New User" newuser
面试问题及答案
问题 1:如何创建一个没有登录 Shell 的用户?
- 答案:可以将登录 Shell 设置为
/sbin/nologin:useradd -s /sbin/nologin username
问题 2:如何为新用户设置初始密码?
- 答案:可以使用
passwd命令:passwd username
6. usermod 命令
作用
usermod 命令用于修改现有用户的属性。
常用参数
-u UID:修改用户的 UID。-g GID:修改用户的初始登录组。-G GID1,GID2,...:修改用户的附加组。-d HOME:修改用户的主目录。-s SHELL:修改用户的登录 Shell。-c COMMENT:修改用户的注释信息。-l NEW_LOGIN:修改用户的登录名。-L: 大写 L 锁定用户账户 usermod -L username-U:解锁用户账号
示例
usermod -u 1002 -g users -G wheel -d /home/newuser -s /bin/bash -c "Updated User" newuser
面试问题及答案
问题 1:如何将用户从一个组移动到另一个组?
- 答案:可以使用
usermod命令修改用户的初始组:usermod -g newgroup username
问题 2:如何锁定一个用户账户?
- 答案:可以使用
usermod命令锁定用户:usermod -L username
7. userdel 命令
作用
userdel 命令用于删除用户。
常用参数
-r:删除用户的同时删除其主目录。
示例
userdel -r username
面试问题及答案
问题 1:如何删除用户但保留其主目录?
- 答案:不使用
-r参数:userdel username
问题 2:如何确保删除用户时不会出现错误?
- 答案:确保用户没有正在运行的进程,并且用户没有登录。
8. groupadd 命令
作用
groupadd 命令用于创建新用户组。
常用参数
-g GID:指定组的 GID。
示例
groupadd -g 1001 newgroup
面试问题及答案
问题 1:如何创建一个具有特定 GID 的用户组?
- 答案:可以使用
-g参数指定 GID:groupadd -g 1001 newgroup
问题 2:如何查看系统中所有用户组的 GID?
- 答案:可以使用
awk命令提取/etc/group文件的第 3 列:awk -F: '{print $1, $3}' /etc/group
9. groupmod 命令
作用
groupmod 命令用于修改现有用户组的属性。
常用参数
-g GID:修改组的 GID。-n NEW_GROUP:修改组名。
示例
groupmod -g 1002 -n newgroupname oldgroupname
面试问题及答案
问题 1:如何修改用户组的 GID?
- 答案:可以使用
groupmod命令:groupmod -g 1002 groupname
问题 2:如何修改用户组的名称?
- 答案:可以使用
-n参数:groupmod -n newgroupname oldgroupname
10. groupdel 命令
作用
groupdel 命令用于删除用户组。
示例
groupdel groupname
面试问题及答案
问题 1:如何删除一个用户组?
- 答案:可以使用
groupdel命令:groupdel groupname
问题 2:删除用户组时需要注意什么?
- 答案:确保没有用户属于该组,否则删除会失败。
11. whoami
作用:显示当前有效用户的用户名。
| 参数 | 作用 |
|---|---|
| 无 | 默认输出当前用户名 |
示例:
$ whoami
alice
12. who
作用:显示当前所有已登录系统的用户会话。
| 参数 | 作用 |
|---|---|
| -a | 显示所有信息(等价于 -b -d -l -p -r -t -T -u) |
| -b | 显示系统最后启动时间 |
| -H | 显示列标题 |
| -u | 显示空闲时间(Idle) |
示例:
$ who -Hu
NAME LINE TIME IDLE PID COMMENT
alice tty1 2025-07-20 09:30 01:02 1234
bob pts/0 2025-07-20 10:15 . 5678 (192.168.1.100)
13. exit
作用:退出当前shell或登录会话。
| 参数 | 作用 |
|---|---|
| 无 | 正常退出 |
| 数字(如0) | 指定退出状态码(0表示成功) |
示例:
$ exit
logout
Connection to 192.168.1.100 closed.
14. passwd
作用:管理用户密码。
| 参数 | 作用 |
|---|---|
| 无 | 修改当前用户密码 |
| 用户名 | 修改指定用户密码(需root权限) |
| -l | 锁定用户密码 |
| -u | 解锁用户密码 |
| -d | 删除密码(允许空密码登录) |
示例:
$ sudo passwd alice
New password: ******
Retype new password: ******
passwd: password updated successfully
15. su
作用:切换用户身份。
| 参数 | 作用说明 | 示例 |
|---|---|---|
- 或 -l | 登录式切换(加载目标用户的完整环境变量,等同于重新登录)。 | su - bob |
-c "command" | 以目标用户身份执行单次命令后退出当前shell。 | su - alice -c "whoami" |
-s /bin/zsh | 指定切换后使用的shell(覆盖目标用户的默认shell)。 | su -s /bin/sh root |
-m 或 -p | 保留当前用户的环境变量(不加载目标用户的~/.bashrc等)。 | su -m root |
-f | 跳过目标用户的~/.cshrc文件(仅适用于C Shell)。 | su -f root |
- 用户名 | 切换至指定用户(需输入该用户密码)。 | su - alice |
| 无参数 | 默认切换至root(需输入root密码)。 | su |
示例:
$ su - alice
Password: ******
alice@host:~$ whoami
alice
登录式切换(推荐)
$ su - bob
Password: ******
bob@host:~$ pwd # 家目录已切换为 /home/bob
/home/bob
bob@host:~$ echo $PATH # 加载bob的环境变量
/usr/local/bin:/usr/bin:/bin
非登录式切换
$ su bob
Password: ******
bob@host:/home/alice$ pwd # 仍停留在原目录
/home/alice
bob@host:/home/alice$ echo $PATH # 保留原用户环境变量
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
单次命令执行
$ su -c "systemctl restart nginx" root
Password: ******
# 命令执行后直接返回原用户shell
16. sudo
作用:以root或其他用户身份执行命令。
| 参数 | 作用 |
|---|---|
| 命令 | 以root身份执行命令 |
| -u 用户名 | 以指定用户身份执行命令 |
| -l | 列出当前用户可执行的命令权限 |
| -i | 启动root登录shell |
示例:
$ sudo -u alice touch /tmp/file.txt
$ ls -l /tmp/file.txt
-rw-r--r-- 1 alice alice 0 Jul 20 11:00 /tmp/file.txt
综合案例
场景描述
假设你负责管理一个公司的 Linux 服务器,公司有多个部门,每个部门需要访问不同的资源。为了提高管理效率和安全性,你需要为每个部门创建独立的用户组,并为每个用户分配相应的权限。
操作步骤
1. 创建用户组
命令
sudo groupadd marketing
sudo groupadd finance
sudo groupadd it
参数解释
groupadd:用于创建新的用户组。marketing、finance、it:分别是新创建的用户组名称。
作用
这些命令分别创建了三个用户组:marketing(营销部门)、finance(财务部门)和 it(IT 部门)。
2. 创建用户并分配到相应的组
命令
sudo useradd -m -g marketing -s /bin/bash alice
sudo useradd -m -g marketing -s /bin/bash bob
sudo useradd -m -g finance -s /bin/bash charlie
sudo useradd -m -g finance -s /bin/bash diana
sudo useradd -m -g it -s /bin/bash eve
sudo useradd -m -g it -s /bin/bash frank
参数解释
useradd:用于创建新的用户。-m:自动创建用户的主目录,默认路径为/home/username。-g:指定用户的初始登录组。-s:指定用户的登录 Shell,默认为/bin/bash。alice、bob、charlie、diana、eve、frank:分别是新创建的用户名。
作用
这些命令分别创建了六个用户,并将他们分配到相应的用户组:
alice和bob分配到marketing组。charlie和diana分配到finance组。eve和frank分配到it组。
3. 设置组权限
命令
sudo mkdir /data/marketing
sudo mkdir /data/finance
sudo mkdir /data/it
sudo chown -R :marketing /data/marketing
sudo chown -R :finance /data/finance
sudo chown -R :it /data/it
sudo chmod -R 770 /data/marketing
sudo chmod -R 770 /data/finance
sudo chmod -R 770 /data/it
参数解释
mkdir:用于创建目录。/data/marketing、/data/finance、/data/it:分别是为每个部门创建的文件夹路径。chown:用于更改文件或目录的所有者或组。-R:递归更改文件夹及其子目录和文件的所有者。:marketing、:finance、:it:分别指定新的组所有权。
chmod:用于更改文件或目录的权限。-R:递归更改文件夹及其子目录和文件的权限。770:设置权限为rwxrwx---,即组内用户有读写执行权限,其他用户无权限。
作用
这些命令创建了三个文件夹,并将它们分别分配给三个部门的用户组,同时设置了适当的权限,确保只有本部门的用户可以访问相应的文件夹。
4. 为特定用户分配额外权限
命令
sudo usermod -aG marketing eve
sudo usermod -aG finance eve
sudo usermod -aG marketing frank
sudo usermod -aG finance frank
参数解释
usermod:用于修改现有用户的属性。-aG:将用户添加到指定的附加组。-a:追加模式,不会覆盖用户现有的组成员关系。-G:指定附加组。
作用
这些命令将 eve 和 frank 添加到其他部门的组中,使他们能够访问其他部门的文件夹。
5. 审计和监控
命令
sudo visudo
参数解释
visudo:用于编辑/etc/sudoers文件,该文件定义了哪些用户或组可以以超级用户权限执行命令。
文件内容
在 /etc/sudoers 文件中添加以下内容:
audit_user ALL=(root) ALL
audit_user ALL=(root) !/usr/bin/sensitive_command
作用
audit_user ALL=(root) ALL:允许audit_user以root用户权限执行所有命令。audit_user ALL=(root) !/usr/bin/sensitive_command:禁止audit_user执行特定的敏感命令。
验证和测试
验证用户和组的创建
getent group marketing
getent group finance
getent group it
id alice
id bob
id charlie
id diana
id eve
id frank
参数解释
getent group:显示指定组的信息。id:显示用户的 UID 和 GID 信息。
作用
这些命令用于验证用户和组是否正确创建,并且用户是否正确分配到相应的组。
验证文件夹权限
ls -ld /data/marketing
ls -ld /data/finance
ls -ld /data/it
参数解释
ls -ld:列出指定目录的详细信息,包括权限、所有者和组。
作用
这些命令用于验证文件夹的权限是否正确设置。
验证用户访问权限
sudo -u alice ls /data/marketing
sudo -u charlie ls /data/finance
sudo -u eve ls /data/marketing
sudo -u eve ls /data/finance
sudo -u eve ls /data/it
参数解释
sudo -u:以指定用户的身份执行命令。
作用
这些命令用于验证用户是否能够正确访问其所属组的文件夹。
注意事项
- 权限最小化:为每个服务创建独立用户组,避免权限过度集中。
- 组策略管理:通过
/etc/sudoers配置用户组的 sudo 权限。 - 安全加固:禁用空密码组,限制用户修改主组权限,审计用户组变更操作。
- 文档管理:建立用户组与业务系统的对应关系文档。

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



