首页/系统/Linux 运维命令速查/chmod 修改文件权限

chmod 修改文件权限

chmod 以符号(u/g/o/a ± r/w/x)或八进制数字设置权限;特殊位 SUID/SGID/Sticky(4/2/1)也在其中,但滥用是把双刃剑。

Linux 运维命令速查系统更新于 2026-10-13

chmod 是什么

chmod 修改文件与目录的权限位,每个文件有属主、属组、其他人三种身份,每种身份各有读、写、执行三位,另外还有 SUID、SGID、sticky 三个特殊位。两种表示方式各有适用场景:八进制(如 644、755)简洁直观,符号法(如 u+x、g-w)适合在现有权限上做增减。目录的语义与文件不同——目录的 x 是进入权限、r 是列目录、w 是改目录项,理解这点才能解释很多「权限看着对却进不去」的现象。

基本信息

适用平台Linux、macOS、BSD(GNU coreutils / BSD chmod);--reference、X 等写法两者都支持
命令语法chmod [选项] 模式 文件...
模式写法八进制三位或四位(644、755、2775、1777);符号法 [ugoa][+-=][rwxXst]
常用选项-R 递归、-c 仅在变化时输出、-v 输出所有处理、--reference=参考文件 复制其权限、--preserve-root 拒绝对 / 递归
权限要求只有文件属主或 root 能修改权限;属主可以给文件设置属组内的权限,但不能把属主改成别人

典型使用场景

  • 发布可执行文件:给脚本与二进制加上执行位,用 755 或 u+x
  • 收紧敏感文件:私钥、配置里的凭据文件设为 600,避免其他用户可读
  • 共享目录协作:用 SGID 让新建文件继承目录属组,团队共享目录常用 2775
  • 公共可写目录:/tmp 这类目录用 sticky 位防止用户互相删除文件
  • 批量校正网站目录:目录 755、文件 644 是 Web 场景的常见基线
  • 对照修复:用 --reference 把一个文件的权限套用到另一个文件,避免手工比对

常用示例

常用示例
chmod 644 index.html          # rw-r--r--
chmod 755 /opt/app/bin/start  # 可执行脚本
chmod 600 ~/.ssh/id_ed25519   # 私钥只允许属主读取
chmod u+x,g-w file            # 符号法精调(多项用逗号分隔)
chmod -R g+rX /srv/shared     # X:只给目录和已可执行文件加 x,批量共享目录的正确姿势
chmod 2775 /srv/team          # SGID 目录:新建文件继承目录属组
chmod 1777 /tmp               # Sticky:防止任意删除他人文件
chmod --reference=/etc/app/base.conf /etc/app/new.conf
stat -c '%a %U:%G %n' /srv/team

数字与特殊位

数字含义典型用法
644属主读写、其他只读普通文件与网页文件
600仅属主可读写私钥、含凭据的配置
755属主读写执行、其他读执行程序目录与可执行脚本
700仅属主可读写执行用户家目录与私有目录
4/2/1 前缀SUID / SGID / sticky4755 慎用;2775 共享目录;1777 公共可写
775属主与属组全权限、其他人读执行团队共享且不需 SGID 时的备选
符号法里的 X 是批量操作的正确答案:chmod -R a+rX 只给目录(以及原本就可执行的文件)加执行位,不会把普通文本文件变成可执行文件。直接用 -R a+x 会给所有文件加上执行位,既是安全风险也容易引发误操作。
新建文件的权限受 umask 影响:常见 umask 022 下,文件默认 644、目录默认 755;umask 027 则对应 640 与 750。应用运行账号的 umask 会影响它创建的日志与上传文件权限,排查「文件权限为何是 640」时先看该账号的 umask。
SUID 让程序以属主身份运行,是提权类漏洞的常见载体;除 passwd、sudo 这类系统自带程序外,不要给自制脚本或程序加 SUID(脚本上的 SUID 在多数系统上本就会被忽略)。需要精细授权时优先用 sudo 规则或 ACL,而不是 SUID。批量改完权限后要用 stat -c '%a %U:%G %n' 文件 或 ls -l 抽查几个代表性条目,确认结果符合预期。
权限位与访问控制列表是两套机制:目录上配置了默认权限条目后,新建文件会继承这些条目,而修改基础权限位会改变掩码,从而连带影响列表中对应条目的实际有效权限。排查「明明看起来该有权却没有」的情况,要用查看列表的命令确认,别只盯着 rwx 符号。

易错点

  • chmod -R 777 是事故代名词:任何用户可读可改可删;共享场景应使用属组、SGID 与最小权限组合
  • 对文件与目录使用同一种权限理解:目录缺 x 时连 ls 都进不去,报 Permission denied 却查不出文件权限的问题
  • 递归加执行位用 -R a+x 会给所有普通文件加上执行位,应改用大写 X 只作用于目录与已可执行文件
  • 符号法里多项要写在一起或用逗号分隔(u+x,g-w),分开写成多个参数会被当成文件名
  • 改权限前不确认生效范围,递归操作在软链接与挂载点边界上可能波及预期外的文件
  • 只看权限位就断言授权正确:没有权限位支持的挂载选项、附加权限列表与安全模块策略都会叠加限制,逐层确认才能解释现象

数据来源与参考

  • man 1 chmod(coreutils)
  • man 7 inode(权限位语义)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌