Linux修改文件夹权限 chmod
Linux目录的x权限代表进入权限,755为常用组合。递归修改需用find区分目录和文件,避免将文件设为可执行。chmodu+x仅给所有者加执行权限,更安全。数字模式第一位对应SUID、SGID、StickyBit特殊权限,非必要勿用。
先说一个常见问题:为什么 Linux 目录权限几乎都是 755?
原因很简单,目录的 x 权限并非传统意义上的“运行”,而是“进入”。如果没有 x,连 cd 都无法进入目录,ls 更无从谈起。而 r 决定能否列出目录中的文件名,w 则控制能否在目录内增删改文件。因此 755(rwxr-xr-x)的组合恰到好处:所有者拥有全部权限(进入、查看、修改);组和其他用户只能进入和查看,无法修改。这种设置既满足日常使用,又守住安全底线。

为什么 chmod 755 是目录最常用的权限设置
因为对目录而言,x 并非“能运行”,而是“能进入”——缺少它,cd 无法进入,ls 也无法列出内容。r 决定能否列出文件名,w 决定能否在目录中增删改文件。所以 755(rwxr-xr-x)意味着:所有者可读写执行(进入、查看、修改),组和其他人可读可执行(进入、查看),但不能修改——既满足可用性,又守住安全底线。
755适合绝大多数网站根目录、代码仓库、共享项目目录750更严格:组内成员可进可看,其他人完全无权访问,适合内部协作环境700仅所有者可用,常用于私有配置目录(如~/.ssh)- 千万别对目录设
644:缺x等于锁死目录,出现ls: Permission denied
递归修改目录权限时,为何不能直接用 chmod -R 755
因为 -R 不区分文件和目录,会将所有子文件(如 .txt、.conf、.log)也设置为 755,导致配置文件变为可执行——Nginx/Apache 可能直接拒绝加载,或引发安全警告。
- 正确的做法是分两步:先用
find /path/to/dir -type d -exec chmod 755 {} ;(只改目录),再用find /path/to/dir -type f -exec chmod 644 {} ;(只改普通文件) - 如果要给脚本添加执行权限,单独使用:
find /path/to/dir -name "*.sh" -exec chmod +x {} ; - 想省事又安全?用
X(大写 X):它只给目录和已有x权限的文件加执行位,chmod -R a+X dir/
chmod u+x 和 chmod +x 有什么区别
表面看差不多,实际影响范围完全不同:chmod +x 等价于 chmod a+x,会给所有者、组、其他用户都添加 x;而 chmod u+x 只修改所有者一栏。绝大多数情况下,脚本只需所有者可执行即可,无需开放给所有人。
- 部署私有工具时,优先使用
chmod u+x deploy.sh - 团队共享脚本且明确需要组内共用时,才考虑
chmod ug+x script.sh chmod o+x需极度谨慎——相当于允许任意用户运行该文件,极易被滥用- 检查是否生效:不要只信命令输出,用
ls -l script.sh查看第三段是否出现x
chmod 数字模式中,第一位 4/2/1 代表什么
这是很多人容易忽略的部分。第一位对应特殊权限位:4 是 SUID(让普通用户以所有者身份运行)、2 是 SGID(让新建文件继承目录组)、1 是 Sticky Bit(如 /tmp,限制用户只能删除自己的文件)。日常权限设置用三位数(如 755)即可,添加第四位(如 4755)意味着主动启用高风险机制。
- 除非明确需要(如
/usr/bin/passwd必须 SUID),否则永远不要手动设置四位数 - 看到
ls -l输出权限位开头是r以外的字符(如s或t),说明特殊位已启用,需确认是否必要 - 误加 SGID 到普通目录,会导致所有新创建文件自动归属错误组,排查时非常隐蔽
