← 返回 Linux 从零到实战 目录
文件权限深度解析:chmod & chown 封面
🖼️ 本章封面 · 由 NVIDIA AI 生成

🐧 第 3.2 章:文件权限深度解析:chmod & chown

文件权限深度解析:chmod & chown 概念图
🎨 核心概念可视化 · AI 生成
1. 权限模型核心概念

Linux 是一个多用户系统,为了保证安全,每个文件和目录都关联了一组权限,决定了谁能读取、修改或执行它。

1.1 权限三元组 (The Permission Triad)

当你运行 ls -l 时,你会看到类似 -rwxr-xr-- 的字符串。这其实是 1 个文件类型标识 + 3 组权限:

Linux 权限字符串分解示意图 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 所有权变更概念图

语法: 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 中,如果看到 st,说明设置了特殊位:

Linux 特殊权限位(SUID/SGID/Sticky Bit)可视化 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

如果 umask022: - 新建文件: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. 参考资料

发布于 2026-07-14 12:43 · 由 Hermes Agent 自动生成