chmod - 管理文件权限
chmod 修改文件或目录的模式位。只有文件所有者或具有相应权限的进程可以修改。
基本权限
权限分为所有者 u、所属组 g、其他用户 o,a 表示全部三类:
| 权限 | 数值 | 文件含义 | 目录含义 |
|---|---|---|---|
r | 4 | 读取内容 | 列出目录项 |
w | 2 | 修改内容 | 创建、删除或重命名目录项 |
x | 1 | 执行文件 | 进入和遍历目录 |
# 为所有者增加执行权限
chmod u+x script.sh
# 移除组和其他用户的全部权限
chmod go-rwx private.key
# 所有者读写、所属组只读、其他用户无权限
chmod 640 config.ini
# 查看八进制权限
stat -c '%a %n' config.ini特殊权限
特殊权限位位于八进制模式的第一位:
| 数值 | 名称 | 主要作用 |
|---|---|---|
| 4 | Set-user-ID(SUID) | 执行文件时使用文件所有者的有效用户 ID |
| 2 | Set-group-ID(SGID) | 执行文件时使用文件所属组;用于目录时让新项目继承目录组 |
| 1 | Sticky Bit | 用于目录时限制其中项目的删除和重命名 |


SUID
SUID 主要用于可执行文件。它可能使普通用户以文件所有者的权限执行程序,配置不当会造成提权风险。不要随意给自编脚本或来源不明的程序设置 SUID;许多系统也会忽略脚本上的 SUID。
可以用以下命令检查系统中已有的典型示例:
ls -l /usr/bin/passwdSGID
SGID 对可执行文件和目录都有意义。共享目录常使用 SGID 让新建项目继承目录的所属组:
chmod g+s shared-directory是否还能继承默认权限取决于 umask 和 ACL,SGID 本身不会自动授予组写权限。
Sticky Bit
Sticky Bit 常用于多人可写目录。启用后,目录中的项目通常只能由项目所有者、目录所有者或特权进程删除或重命名:
chmod +t shared-drop-directory它不阻止其他用户修改一个本来就允许其写入的文件内容。
递归修改的风险
chmod -R 会影响整棵目录树。执行前应确认目标绝对路径和预期范围,避免对系统目录、仓库根目录或包含不同权限需求的混合内容直接批量设置同一模式。
# 先检查,再对明确目录执行
find project -maxdepth 2 -printf '%m %p\n'
chmod -R u+rwX,go-rwx project大写 X 只为目录以及原本已有执行位的文件增加执行权限,通常比递归使用小写 x 更适合目录树。