
🐧 第 3.2 章:文件权限深度解析:chmod & chown
🎨 核心概念可视化 · AI 生成1. 权限模型核心概念
Linux 是一个多用户系统,为了保证安全,每个文件和目录都关联了一组权限,决定了谁能读取、修改或执行它。
1.1 权限三元组 (The Permission Triad)
当你运行 ls -l 时,你会看到类似 -rwxr-xr-- 的字符串。这其实是 1 个文件类型标识 + 3 组权限:
Linux 权限字符串分解示意图
| 位置 | 标识 | 含义 | 权限范围 |
|---|---|---|---|
| 第 1 位 | - / d |
文件类型 | -: 普通文件, d: 目录, l: 软链接 |
| 第 2-4 位 | rwx |
所有者 (Owner/User) | 创建文件的用户拥有的权限 |
| 第 5-7 位 | r-x |
所属组 (Group) | 文件所属组内成员拥有的权限 |
| 第 8-10 位 | r-- |
其他人 (Others) | 除上述两者外的所有用户 |
1.2 权限位的具体含义
权限位由 r (read), w (write), x (execute) 组成。注意:文件和目录的权限含义不同!
文件与目录权限含义对比表
| 权限 | 对文件 (File) 的影响 | 对目录 (Directory) 的影响 |
|---|---|---|
| r (读) | 可以读取文件内容 (cat, less) |
可以列出目录下的文件名 (ls) |
| w (写) | 可以修改文件内容 | 可以创建、删除、重命名目录下的文件 (需配合 x) |
| x (执行) | 可以将文件作为程序或脚本运行 | 可以进入该目录 (cd),以及访问其内部文件 |
🚨 避坑指南: 如果一个目录没有 x 权限,即使你有该目录下某个文件的 r 权限,你也无法访问该文件。
2. 修改权限:chmod (Change Mode)
chmod 用于改变文件的访问权限。它有两种表达方式:数字表示法和符号表示法。
2.1 数字表示法 (Octal Mode)
每个权限位对应一个数值:
- r = 4
- w = 2
- x = 1
- - = 0
数字表示法权重计算逻辑
将三者相加即可得到一组权限的数值。例如:rwx = 4+2+1 = 7; r-x = 4+0+1 = 5; r-- = 4+0+0 = 4.
常用组合:
- 755 (rwxr-xr-x): 所有者全权,组和其他人可读可执行(常见于目录和可执行脚本)。
- 644 (rw-r--r--): 所有者可读写,组和其他人只读(常见于配置文件、普通文本)。
- 600 (rw-------): 仅所有者可读写(常见于 SSH 私钥)。
命令示例:
chmod 755 myscript.sh # 将脚本设为可执行
chmod 644 config.txt # 将配置文件设为只读
chmod -R 755 mydir/ # 递归修改目录下所有文件/文件夹的权限
2.2 符号表示法 (Symbolic Mode)
使用字母来指定对象和操作:
- 对象: u (user), g (group), o (others), a (all)
- 操作: + (增加), - (删除), = (精确设置)
- 权限: r, w, x
命令示例:
chmod u+x script.sh # 给所有者增加执行权限
chmod g-w file.txt # 移除组的写权限
chmod o=r file.txt # 将其他人的权限精确设为只读
chmod a+r file.txt # 让所有人都能读
3. 修改所有权:chown (Change Owner)
chown 用于改变文件或目录的所有者和所属组。通常需要 sudo 权限。
chown 所有权变更概念图
语法: chown [所有者]:[所属组] 文件
命令示例:
sudo chown alice file.txt # 将所有者改为 alice
sudo chown :developers file.txt # 将所属组改为 developers
sudo chown alice:developers file.txt # 同时修改所有者和所属组
sudo chown -R alice:alice mydir/ # 递归修改整个目录的所有权
4. 进阶权限:特殊位与 umask
4.1 特殊权限位 (Special Bits)
在 ls -l 中,如果看到 s 或 t,说明设置了特殊位:
Linux 特殊权限位(SUID/SGID/Sticky Bit)可视化
| 特殊位 | 标识 | 含义 | 常见场景 |
|---|---|---|---|
| SUID | u+s |
执行该文件时,进程获得文件所有者的权限 | /usr/bin/passwd (允许普通用户改密码) |
| SGID | g+s |
1. 执行时获得组权限;2. 目录下创建的文件继承该目录的组 | 共享协作目录 |
| Sticky Bit | o+t |
只有文件所有者或 root 才能删除该目录下的文件 | /tmp 目录 (防止用户互相删除文件) |
设置命令:
chmod u+s password_tool # 设置 SUID
chmod g+s shared_dir # 设置 SGID
chmod o+t public_tmp # 设置 Sticky Bit
4.2 默认权限掩码:umask
umask 决定了新建文件和目录时的默认权限。
默认权限 = (初始权限) - (umask 值)。
- 文件的初始权限通常是 666。
- 目录的初始权限通常是 777。
如果 umask 为 022:
- 新建文件:666 - 022 = 644 (rw-r--r--)
- 新建文件:666 - 022 = 644 (rw-r--r--)
- 新建目录:777 - 022 = 755 (rwxr-xr-x)
查看和修改:
umask # 查看当前掩码
umask 077 # 修改掩码,使新建文件仅所有者可见 (666-077=600)
5. 参考资料
- ArchWiki: File permissions and attributes
- man7.org: chmod(1p)
- man7.org: chown(1)