Linux 用户与组管理详解:权限控制的核心机制
Linux 是多用户多任务操作系统,用户与组的管理是系统安全和权限控制的基础。本文将系统讲解用户与组的配置文件、核心管理命令及权限控制逻辑,帮助你掌握 Linux 下的身份管理体系。
用户管理:从配置文件到核心命令
Linux 通过 /etc/passwd 和 /etc/shadow 存储用户信息,通过一系列命令实现用户的创建、修改和删除。
用户信息文件解析
(1)/etc/passwd:用户基本信息
该文件记录所有用户的公开信息,每行对应一个用户,以冒号分隔为 7 个字段:
1 2 3 4 5 6 7 8 9
| root:x:0:0:root:/root:/bin/bash
|
(2)/etc/shadow:用户密码信息
存储用户密码的加密信息(仅 root 可读写),每行对应一个用户,以冒号分隔为 9 个字段:
1 2 3 4 5 6 7 8 9 10 11
| root:$6$xxxxxxxx$xxxxxx:19500:0:99999:7:::
|
用户管理核心命令
(1)创建用户:useradd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| useradd [选项] 用户名
useradd user1
useradd -d /home/newuser -s /bin/bash newuser
useradd -r -M sysuser
|
(2)修改用户:usermod
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| usermod [选项] 用户名
usermod -d /home/newhome user1
usermod -L user1
usermod -G wheel,users user1 usermod -aG docker user1
|
(3)删除用户:userdel
1 2 3 4 5 6 7 8
| userdel [-r] 用户名
userdel user1
userdel -r user1
|
(4)设置密码:passwd
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| passwd [用户名]
passwd user1
passwd
|
(5)切换用户:su 与 sudo
(6)查看用户信息
1 2 3 4
| whoami id user1 who w
|
组管理:用户的集合与权限分配
组是用户的集合,用于批量管理权限。Linux 通过 /etc/group 和 /etc/gshadow 存储组信息。
组信息文件解析
(1)/etc/group:组基本信息
每行对应一个组,以冒号分隔为 4 个字段:
1 2 3 4 5 6
| wheel:x:10:user1,user2
|
(2)/etc/gshadow:组密码信息
存储组密码及管理员信息(仅 root 可读写):
1 2 3 4 5 6
| wheel:$6$xxxx:user1:user2,user3
|
组管理核心命令
(1)创建组:groupadd
1 2 3 4 5 6 7 8
| groupadd [选项] 组名
groupadd dev
groupadd -g 1005 testgrp
|
(2)修改组:groupmod
1 2 3 4 5 6 7 8
| groupmod [选项] 组名
groupmod -n newdev dev
groupmod -g 1006 newdev
|
(3)删除组:groupdel
(4)管理组成员:gpasswd
1 2 3 4 5 6 7 8 9 10 11
| gpasswd [选项] 组名
gpasswd -a user1 dev
gpasswd -d user1 dev
gpasswd -A user2 dev
|
(5)切换有效组:newgrp
临时切换用户的有效组(用于创建文件时指定所属组):
用户与组的关系
每个用户有且仅有一个初始组(创建用户时默认创建同名组,可通过 -g 指定),可以有多个附加组(通过 -G 或 gpasswd 添加)。
- 初始组:用户创建文件时,文件的默认所属组为初始组。
- 附加组:用户通过附加组获得额外权限(如
sudo 权限通常通过 wheel 组赋予)。
实战案例:用户与组管理流程
创建开发团队用户与组:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| groupadd dev
useradd -g dev -m dev1 useradd -g dev -m dev2
passwd dev1 passwd dev2
groupadd test gpasswd -a dev1 test
|
配置 sudo 权限:
1 2 3
| visudo
dev1 ALL=(ALL) ALL
|
查看用户所属组: