
什么是 Unix 文件权限?
Unix 文件权限控制谁可以读取、写入和执行文件及目录。它们是 Unix 和 Linux 安全的基础,决定了哪些用户和组可以访问每个文件。
每个文件和目录都有三组权限,对应三类用户:所有者(用户)、组和其他人(其他人)。

权限位
每个类别有三个权限位:
| 符号 | 值 | 对文件的意义 | 对目录的意义 |
|---|---|---|---|
r |
4 | 读取文件内容 | 列出目录内容 |
w |
2 | 修改文件 | 在目录中创建/删除文件 |
x |
1 | 作为程序执行 | 进入目录(cd) |
- |
0 | 权限拒绝 | 权限拒绝 |
读取权限字符串
ls -l 命令以 10 个字符的字符串显示权限:
-rwxr-xr-- owner group filename
│└──┴──┴──
│ │ │ └── 其他人:r--,只读(4)
│ │ └───── 组:r-x,读取+执行(5)
│ └──────── 所有者:rwx,完全访问(7)
└─────────── 文件类型:-(文件)、d(目录)、l(符号链接)
八进制表示法
权限通常用八进制(基数为 8)数字表示,每个数字代表一个类别(所有者、组、其他人):
权限 二进制 八进制
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
因此 chmod 755 表示:
7 = rwx(所有者:完全访问)
5 = r-x(组:读取和执行)
5 = r-x(其他人:读取和执行)

常见权限模式
| 八进制 | 符号 | 用途 |
|---|---|---|
| 400 | r-------- | 只读,仅所有者(私钥文件) |
| 600 | rw------- | 读写,仅所有者(SSH 私钥、.env 文件) |
| 644 | rw-r--r-- | Web 文件(服务器可读,所有者可写) |
| 664 | rw-rw-r-- | 团队共享文件 |
| 700 | rwx------ | 私有可执行文件或目录 |
| 755 | rwxr-xr-x | 标准可执行文件和公共目录 |
| 775 | rwxrwxr-x | 共享目录(组可写) |
| 777 | rwxrwxrwx | 任何人可做任何事(生产环境避免) |
chmod 命令
# 使用八进制表示法设置权限
chmod 755 script.sh
chmod 644 index.html
chmod 600 ~/.ssh/id_rsa
# 使用符号表示法设置权限
chmod u+x script.sh # 为所有者添加执行权限
chmod g-w shared.txt # 移除组的写入权限
chmod o=r public.txt # 将其他人设置为只读
chmod a+r document.pdf # 为所有人添加读取权限(a = all = ugo)
# 递归(应用于目录及其所有内容)
chmod -R 755 /var/www/html
特殊权限位
除了标准的 rwx 位,Unix 还有三个特殊权限位:

Setuid(所有者执行位上的 s,八进制 4000)
可执行文件以所有者的权限运行,而非调用者的权限:
chmod 4755 /usr/bin/sudo
-rwsr-xr-x (所有者执行位上的 s)
Setgid(组执行位上的 s,八进制 2000)
对于可执行文件:以组的权限运行。 对于目录:新文件继承目录的组:
chmod 2775 /shared/project
drwxrwsr-x
粘滞位(其他人执行位上的 t,八进制 1000)
对于目录:只有文件所有者可以删除自己的文件:
chmod 1777 /tmp
drwxrwxrwt (t = 粘滞位)
这就是为什么每个人都可以写入 /tmp,但不能删除彼此的文件。
使用 umask 的默认权限
umask(用户文件创建掩码)决定新文件的默认权限。它从最大权限中减去:
文件默认最大值: 666(rw-rw-rw-)
目录默认最大值: 777(rwxrwxrwx)
典型 umask: 022
文件结果: 644(666 - 022)
目录结果: 755(777 - 022)
-> 试试 chmod 计算器