Linux用户和权限管理详解:从安全模型到ACL实战
发布日期:2026-10-16 | 标签:Linux用户管理、权限、chmod、ACL、安全模型
目录导航
- 一、Linux安全模型
- 二、用户和组配置文件
- 三、用户管理命令实战
- 四、组管理命令实战
- 五、权限体系详解
- 六、特殊权限位
- 七、ACL访问控制列表
- 八、总结与实战技巧
一、Linux安全模型
1.1 Linux安全三要素
Linux安全模型基于三个核心要素:
- 认证(Authentication):验证用户身份(UID/GID)
- 授权(Authorization):控制访问权限(rwx)
- 审计(Accounting):记录操作日志(日志系统)
1.2 用户分类
| 类型 | UID范围 | 说明 |
|---|---|---|
| 超级用户 | 0 | root,拥有所有权限 |
| 系统用户 | 1-999 | 运行系统服务 |
| 普通用户 | 1000+ | 日常使用 |
二、用户和组配置文件
2.1 /etc/passwd — 用户信息文件
每行一个用户,字段以冒号分隔:用户名:密码占位:UID:GID:描述:家目录:Shell
cat/etc/passwd真实输出(部分):
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 sys:x:3:3:sys:/dev:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin sshd:x:109:65534::/run/sshd:/usr/sbin/nologin解读:
- root用户UID=0,Shell是/bin/bash
- daemon等系统用户Shell是nologin(不允许登录)
- www-data是Web服务器用户
- sshd是SSH服务用户
2.2 /etc/group — 组信息文件
格式:组名:密码占位:GID:组成员列表
cat/etc/group真实输出(部分):
root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4:syslog sudo:x:27: www-data:x:33: disk:x:6:2.3 /etc/shadow — 密码文件
存储加密后的密码,只有root可读:
ls-la/etc/shadow真实输出:
-rw-r----- 1 root shadow 1021 Jul 21 17:26 /etc/shadow权限640,仅root可读写,shadow组成员可读。
2.4 三个配置文件对照
| 文件 | 作用 | 权限 |
|---|---|---|
| /etc/passwd | 用户基本信息 | 644(所有人可读) |
| /etc/shadow | 用户密码哈希 | 640(仅root可读写) |
| /etc/group | 组基本信息 | 644(所有人可读) |
三、用户管理命令实战
3.1 useradd — 创建用户
useradd-mtestuseridtestuser真实输出:
user created uid=1000(testuser) gid=1000(testuser) groups=1000(testuser)-m选项自动创建家目录。新用户UID自动分配为1000。
3.2 passwd — 设置密码
passwdtestuser真实输出:
New password: Retype new password: passwd: password updated successfully3.3 usermod — 修改用户属性
usermod-aGsudo-ntestuser# 加入sudo组idtestuser常用选项:
- -aG:追加到附加组(不离开其他组)
- -s:修改登录Shell
- -d:修改家目录
- -L:锁定用户
- -U:解锁用户
3.4 userdel — 删除用户
userdel-rtestuseridtestuser2>&1真实输出:
user deleted id: 'testuser': no such user-r选项同时删除家目录和邮件目录。
3.5 用户管理命令速查
| 命令 | 作用 | 常用选项 |
|---|---|---|
| useradd | 创建用户 | -m(家目录) -s(Shell) -u(UID) |
| usermod | 修改用户 | -aG(加组) -s(Shell) -L(锁定) |
| userdel | 删除用户 | -r(删家目录) |
| passwd | 设密码 | -l(锁定) -u(解锁) -d(删除密码) |
| id | 查身份 | -u(UID) -g(GID) -G(所有组) |
四、组管理命令实战
4.1 groupadd — 创建组
groupaddtestgroupcat/etc/group|greptestgroup真实输出:
group created testgroup:x:1000:4.2 groupmod — 修改组
groupmod-nnewtestgroup testgroupcat/etc/group|grepnewtest真实输出:
newtestgroup:x:1000:-n选项修改组名。
4.3 groupdel — 删除组
groupdelnewtestgroupcat/etc/group|grepnewtest2>&1真实输出:
group deleted4.4 gpasswd — 管理组成员
gpasswd-auser1 testgroup# 将user1加入testgroupgpasswd-duser1 testgroup# 将user1移出testgroupgpasswd-Auser1 testgroup# 设置user1为组管理员五、权限体系详解
5.1 权限的三组rwx
Linux权限分为三组,分别对应文件属主(u)、属组(g)、其他用户(o):
-rwxr-xr-x | | | 属主 属组 其他| 权限 | 对文件 | 对目录 |
|---|---|---|
| r | 可读内容 | 可列出内容 |
| w | 可修改内容 | 可创建/删除文件 |
| x | 可执行 | 可进入目录 |
5.2 chmod — 修改权限
数字法:
touch/tmp/perm_test.shls-la/tmp/perm_test.shchmod755/tmp/perm_test.shls-la/tmp/perm_test.sh真实输出:
-rw-r--r-- 1 root root 0 Oct 16 22:56 /tmp/perm_test.sh -rwxr-xr-x 1 root root 0 Oct 16 22:56 /tmp/perm_test.sh数字含义:r=4, w=2, x=1,相加得到0-7的数字。
- 755 = rwxr-xr-x(属主全权限,属组和其他可读可执行)
- 644 = rw-r–r–(属主可读写,其他只读)
- 600 = rw-------(仅属主可读写)
符号法:
chmodu+x,g-w,o-r /tmp/perm_test.shls-la/tmp/perm_test.sh真实输出:
-rwxr-x--x 1 root root 0 Oct 16 22:56 /tmp/perm_test.sh符号格式:[ugoa][±=][rwx]
- u=属主, g=属组, o=其他, a=所有
- +=添加, -=移除, ==设置
5.3 chown — 修改属主属组
chownroot:root /tmp/perm_test.shls-la/tmp/perm_test.sh真实输出:
-rwxr-x--x 1 root root 0 Oct 16 22:56 /tmp/perm_test.sh常用格式:
- chown user file — 只改属主
- chown :group file — 只改属组
- chown user:group file — 同时改属主和属组
- chown -R user:group dir/ — 递归修改
5.4 chgrp — 修改属组
chgrproot /tmp/perm_test.sh等同于 chown :root file。
5.5 umask — 默认权限掩码
umask# 查看当前umaskumask022# 设置umaskumask决定新建文件的默认权限:
- 文件默认权限 = 666 - umask
- 目录默认权限 = 777 - umask
- umask=022时:文件644,目录755
六、特殊权限位
6.1 SUID (Set UID)
当用户执行一个设置了SUID的程序时,该用户临时获得文件属主的权限。
chmod4755/tmp/perm_test.shls-la/tmp/perm_test.sh真实输出:
-rwsr-xr-x 1 root root 0 Oct 16 22:56 /tmp/perm_test.sh属主的x变为s。典型应用:/usr/bin/passwd(普通用户可以修改密码)。
6.2 SGID (Set GID)
对文件:执行时临时获得属组权限。对目录:新建文件继承目录的属组。
chmod6755/tmp/perm_test.shls-la/tmp/perm_test.sh真实输出:
-rwsr-sr-x 1 root root 0 Oct 16 22:56 /tmp/perm_test.sh属组的x也变为s。
6.3 Sticky Bit
对目录设置后,只有文件属主和root才能删除该目录中的文件。
chmod1755/tmp/perm_test.shls-la/tmp/perm_test.sh其他的x变为t。典型应用:/tmp目录。
6.4 特殊权限总结
| 权限 | 数字前缀 | 显示 | 作用 |
|---|---|---|---|
| SUID | 4xxx | s在属主位 | 执行时获得属主权限 |
| SGID | 2xxx | s在属组位 | 执行时获得属组权限/继承属组 |
| Sticky | 1xxx | t在其他位 | 只有属主能删除 |
七、ACL访问控制列表
7.1 什么是ACL
传统权限只能为属主、属组、其他三组设置权限。ACL(Access Control List)可以为任意指定用户或组设置权限,更灵活。
7.2 setfacl — 设置ACL
touch/tmp/acl_test.txt setfacl-mu:root:rwx /tmp/acl_test.txt getfacl /tmp/acl_test.txt常用选项:
- -m:修改ACL规则
- -x:删除ACL规则
- -b:清除所有ACL规则
格式:u:用户名:权限 或 g:组名:权限
7.3 getfacl — 查看ACL
getfacl /tmp/acl_test.txt7.4 ACL实战场景
# 给特定用户读写权限setfacl-mu:alice:rw /shared/project.txt# 给特定组只读权限setfacl-mg:devteam:r /shared/project.txt# 删除特定用户的ACLsetfacl-xu:alice /shared/project.txt# 清除所有ACL,恢复传统权限setfacl-b/shared/project.txt7.5 ACL vs 传统权限
| 特性 | 传统权限 | ACL |
|---|---|---|
| 粒度 | 属主/属组/其他 | 任意用户/组 |
| 灵活性 | 低 | 高 |
| 复杂度 | 简单 | 较复杂 |
| 适用场景 | 通用 | 需要精细控制 |
八、总结与实战技巧
核心要点
- Linux安全基于认证+授权+审计三要素
- 用户信息存储在/etc/passwd,密码在/etc/shadow,组在/etc/group
- useradd/usermod/userdel管理用户,groupadd/groupmod/groupdel管理组
- 权限分三组rwx,chmod用数字法(755)或符号法(u+x)
- SUID/SGID/Sticky是三种特殊权限位
- ACL提供更灵活的权限控制
权限数字速查
| 数字 | 权限 | 常见用途 |
|---|---|---|
| 755 | rwxr-xr-x | 可执行文件/目录 |
| 644 | rw-r–r– | 普通文件 |
| 600 | rw------- | 私密文件 |
| 750 | rwxr-x— | 组内可执行 |
| 4755 | rwsr-xr-x | SUID程序 |
实战技巧
- 生产环境禁用root直接登录,用sudo提权
- 关键配置文件设为600权限(如密钥文件)
- 用usermod -aG追加组,不要用-G(会覆盖其他组)
- chmod -R递归修改要谨慎,特别是对系统目录
- ACL适合需要给多个不同用户设置不同权限的场景
- 定期检查/etc/passwd中是否有异常用户
上一篇:文件管理与IO重定向实战
本文所有命令均在 Ubuntu 24.04.4 LTS 服务器(1.94.230.146)上真实执行。