Linux 权限管理确实可以在15分钟内速成核心思维,重点抓住三件事:
- 权限减法模型(umask 掩码思维)
- 文件类型 + rwx 真实含义(尤其是目录的“透视”)
- 粘滞位防护模型(安全协作的最后一环)
我们用最简洁、最实操的方式过一遍,边讲边记命令。
1. umask 权限减法模型(最核心、最常考)
Linux 新建文件和目录时,不是从 000 开始,而是从一个“最大安全权限”扣掉你不想要的部分。
| 对象 | 最大安全权限(八进制) | 字母写法 | 含义 |
|---|---|---|---|
| 新建普通文件 | 666 | rw-rw-rw- | 任何人都不默认给 x(可执行) |
| 新建目录 | 777 | rwxrwxrwx | 目录必须默认可进入(x) |
umask 值 = 你想从上面“扣掉”的权限(八进制)
最终权限 = 最大权限 – umask(按位减,不是算术减)
最常见的三种 umask 场景速记表:
| umask 值 | 新文件权限 | 新目录权限 | 典型使用场景 | 谁推荐的 |
|---|---|---|---|---|
| 022 | 644 | 755 | 服务器最常用(自己可写,其他只读) | 几乎所有发行版默认 |
| 002 | 664 | 775 | 团队协作开发(同组可写) | 开发/共享目录 |
| 027 | 640 | 750 | 严格一点的服务器(其他用户完全无权) | 安全意识强的运维 |
实操速记口诀:
umask # 查看当前掩码(通常 0022,显示时前面带0可忽略)
umask 022 # 改成最安全常用值
touch testfile && ls -l testfile # 看到 -rw-r--r-- (644)
mkdir testdir && ls -ld testdir # 看到 drwxr-xr-x (755)
umask 002 # 改成协作模式
touch a && mkdir b && ls -l a b # 664 和 775
一句话总结 umask:
它控制的是“我不允许别人拥有的权限”,不是“我要给的权限”。
2. 文件类型透视 + 目录 rwx 真实含义(很多人卡在这里)
用 ls -l 第一列看懂一切:
- 普通文件
d 目录
l 符号链接
b 块设备
c 字符设备
p 管道
s socket
权限三组 rwx 真实含义对比(最容易混淆的是目录!)
| 权限 | 对文件(普通文件)的含义 | 对目录的含义(超级重要!) |
|---|---|---|
| r | 可以 cat / less / more 查看内容 | 可以 ls 查看目录里有哪些文件 |
| w | 可以修改文件内容(vi、echo >>) | 可以在目录里创建、删除、重命名文件(最危险的权限) |
| x | 可以执行(./script.sh 或二进制程序) | 可以 cd 进入目录、访问目录内文件(必须配合 r/w) |
一句话记忆法:
- 文件的 w = 我能改内容
- 目录的 w = 我能删/改别人放进来的文件(最危险)
所以生产环境几乎永远不给其他用户(others)目录写权限,除非用下面要讲的粘滞位来防护。
3. 粘滞位(Sticky Bit)—— 安全协作的终极解决方案
场景:
大家都要往 /tmp、/var/tmp 里写文件,但你不想别人能随便删你的文件。
解决方案:给目录上粘滞位(sticky bit),显示为 t 或 T
chmod +t 目录 # 或 chmod 1777 目录
chmod -t 目录 # 去掉
ls -ld /tmp # 通常看到 drwxrwxrwt ← 最后那个 t 就是粘滞位
粘滞位三大铁律(必须记住):
- 只对目录有效(文件上没意义)
- 目录已有 o+w 权限(其他用户可写)
- 开启粘滞位后:文件只有三种人能删除/重命名它
- 文件的拥有者(owner)
- 文件所属组的拥有者(如果有 setgid 也不影响此规则)
- root
经典例子:
sudo mkdir /test-share
sudo chmod 1777 /test-share # drwxrwxrwt
# 用户A
touch /test-share/a.txt
# 用户B
rm /test-share/a.txt # 报错:Operation not permitted
这就是 /tmp 为什么全世界都能写,却不会乱删别人文件的原因。
15分钟速成总结口诀(背下来就基本掌握)
- umask 就是“我不允许别人有的权限” → 常见 022 / 002 / 027
- 目录的 w 权限 ≈ “我能删别人的文件” → 极度危险
- 想安全共享目录? → 给 777 + 粘滞位(1777)→ 出现 t
- 看到 drwxrwxrwt 就知道:这是个大家都能写、但只能删自己文件的目录
快速自测三题(答案在下面):
- umask 027 时,新建文件权限是?新建目录呢?
- 只有 r-x 的目录,你能 ls 吗?能 cd 吗?能新建文件吗?
- /tmp 为什么是 drwxrwxrwt 而不是 drwxrwxrwx?
(答案:1. 640 & 750 2. 能ls、能cd、不能新建 3. 防止误删他人文件)
掌握这三块,Linux 权限 80% 的生产场景就够用了。剩下的 setuid/setgid、ACL、capabilities 属于进阶内容,先把这套“减法 + 透视 + 粘滞防护”模型打扎实。
有具体场景想模拟/调试的,可以直接贴命令或报错,我帮你分析!