Linux 权限管理全解析(2025–2026 实用版)
Linux 的权限系统是其安全模型的核心,基于 用户、组、其他 三类主体,以及 读、写、执行 三种权限,再加上一些特殊权限位(SUID、SGID、Sticky Bit)和扩展属性(ACL)。
理解清楚这套体系,能帮你彻底解决“为什么这个文件我打不开”“为什么别人能执行我的脚本”“chmod 777 为什么不安全”等常见困惑。
1. 权限的三类主体 + 三种基本权限
每个文件/目录都有 三组权限,分别对应:
| 主体 | 英文 | 代表符号 | 说明 |
|---|---|---|---|
| 拥有者 | owner | u | 创建文件的人(或 chown 后的用户) |
| 所属组 | group | g | 文件所属的用户组(通常是创建时的主组) |
| 其他用户 | others | o | 既不是拥有者也不是所属组的任何人 |
每组都有三种基本权限:
| 权限 | 符号 | 对文件的作用 | 对目录的作用 | 数字表示 |
|---|---|---|---|---|
| 读 | r | 可以查看内容 | 可以列出目录内容(ls) | 4 |
| 写 | w | 可以修改内容 | 可以创建/删除/重命名目录内的文件 | 2 |
| 执行 | x | 可以运行程序/脚本 | 可以进入目录(cd)、访问目录内文件 | 1 |
一句话总结:
文件看 rwx,目录看“能否进入 + 能否操作里面内容”。
2. 权限查看:ls -l 输出详解
-rwxr-xr-- 1 alice developers 4096 Feb 9 21:30 script.sh
从左到右逐位拆解:
- 第 1 位:文件类型
-普通文件d目录l符号链接b块设备c字符设备p命名管道ssocket
- 第 2–10 位:权限(3+3+3)
rwx r-x r--- 拥有者(alice):读写执行
- 组(developers):读 + 执行
- 其他用户:只读
- 硬链接数(1)
- 拥有者(alice)
- 所属组(developers)
- 文件大小(字节)
- 修改时间
- 文件名
3. 权限修改:chmod(最常用两种方式)
方式1:数字法(最快,推荐记忆)
三位八进制数,从左到右分别代表 u、g、o
| 权限组合 | 数字 | 含义 |
|---|---|---|
| rwx | 7 | 读写执行 |
| r-x | 5 | 读执行 |
| rw- | 6 | 读写 |
| r– | 4 | 只读 |
| –x | 1 | 只执行 |
| — | 0 | 无任何权限 |
经典组合:
755→-rwxr-xr-x(脚本、程序常用)644→-rw-r--r--(普通文件常用)700→-rwx------(个人私密脚本)666→-rw-rw-rw-(极少用,危险)777→-rwxrwxrwx(生产环境几乎不要用)
示例:
chmod 755 script.sh
chmod 644 config.conf
chmod -R 755 /var/www/html # 递归修改整个目录
方式2:符号法(更直观,适合增删权限)
chmod u+x script.sh # 给拥有者加执行权限
chmod g-w config.conf # 给组去掉写权限
chmod o-rwx private_dir # 其他用户完全禁止
chmod a+x script.sh # 所有人加执行(a = all)
chmod ug+rwx,o-rwx dir # 拥有者和组完全权限,其他只读
4. 特殊权限(SUID、SGID、Sticky Bit)
这些是权限系统中非常重要的“隐藏技能”,常用于提权、安全机制。
| 特殊权限 | 符号表示 | 数字表示 | 对文件的作用 | 对目录的作用 | 典型场景 |
|---|---|---|---|---|---|
| SUID | s(代替 x) | 4xxx | 以文件拥有者身份执行 | — | /usr/bin/passwd(普通用户改密码) |
| SGID | s(代替 x) | 2xxx | 以文件所属组身份执行 | 新文件继承目录的所属组 | 组协作开发目录 |
| Sticky | t(代替 x) | 1xxx | — | 只有文件拥有者或 root 能删除文件 | /tmp(大家都能写,但不能删别人文件) |
示例:
chmod u+s /bin/ping # 4xxx → -rwsr-xr-x
chmod g+s /data/team # 2xxx → drwxr-s---
chmod +t /tmp # 1xxx → drwxrwxrwt
chmod 4755 program # SUID + 755
chmod 2755 shared_script # SGID + 755
5. 拥有者与组管理
chown alice script.sh # 改拥有者
chown alice:developers script.sh # 同时改拥有者和组
chown -R alice:developers /project # 递归
chgrp developers file # 只改组
6. ACL(访问控制列表)—— 更细粒度权限(现代 Linux 必备)
传统 u/g/o 权限只有三组人,ACL 可以给任意用户/组单独授权。
# 启用 ACL(大部分现代系统默认启用)
# 查看是否支持:mount | grep acl
# 给用户 bob 读写权限
setfacl -m u:bob:rw /data/project/file.txt
# 给组 devteam 执行权限
setfacl -m g:devteam:x /scripts/run.sh
# 给目录默认继承 ACL(新文件自动应用)
setfacl -m d:u:bob:rw /data/project
# 查看 ACL
getfacl /data/project/file.txt
# 删除某条 ACL
setfacl -x u:bob /data/project/file.txt
# 清空所有非必要 ACL
setfacl -b file.txt
7. 常见权限问题与解决口诀
| 现象 | 常见原因 | 快速解决 |
|---|---|---|
| Permission denied | 缺少 x(目录/可执行文件) | chmod +x 或 chmod o+x |
| 能 ls 但 cd 不了 | 目录缺少 x | chmod +x 目录 |
| 能进入目录但不能创建文件 | 目录缺少 w | chmod +w 目录 |
| 别人删不了我的文件 | 目录有 Sticky bit(t) | 常见于 /tmp |
| 普通用户能改系统密码 | passwd 有 SUID | 正常现象(-rwsr-xr-x) |
| 新文件所属组不是预期 | 父目录没设 SGID | chmod g+s 目录 |
| 想给某人单独权限但不想改 umask | 需要 ACL | setfacl -m u:someone:rwx 路径 |
8. 安全建议(生产环境)
- 永远不要 chmod 777(除非调试)
- 重要文件/目录:600 / 644 / 700 / 755
- 可执行脚本:755(拥有者可写,其他只读执行)
- 私钥、密码文件:600,拥有者 root 或当前用户
- 使用 ACL 而不是把文件给 everyone
- 定期审计:
find / -perm -4000 -o -perm -2000(找 SUID/SGID 文件)
总结:权限口诀
- 文件:r=看,w=改,x=运行
- 目录:r=ls,w=创建/删除/改名,x=cd + 访问里面
- 数字:r=4 w=2 x=1 → 755 = u:rwx g:rx o:rx
- 特殊位:4=SUID 2=SGID 1=Sticky
- 细粒度 → 用 ACL
你现在遇到的是哪类权限问题?
(比如某个文件打不开、想设置组协作目录、SUID 不生效、ACL 不会用等)
告诉我具体场景,我可以给你最精确的命令和解释。