ls -l查看权限,-rw-r--r--格式分三组(所有者、组、其他),r/w/x对应4/2/1;777是全员读写执行的高危权限,755=所有者全权、组及其他可读可执行,数字模式会覆盖而非叠加,递归修改需用find区分目录与文件。

chmod 不是用来“试错”或“暴力赋权”的工具,而是精确控制访问边界的手段。直接 chmod 777 多数时候是权限失控的开始,不是解决办法。
怎么看当前文件权限?
执行 ls -l filename,最左边一串类似 -rw-r--r-- 的字符就是权限标识。开头 - 表示普通文件(d 表示目录),后面每三个一组:第一组是所有者(u),第二组是所属组(g),第三组是其他人(o)。r、w、x 分别对应读、写、执行;- 表示无该权限。
数字模式(如 755)怎么算、什么时候用?
三位八进制数,每位分别代表 u、g、o 的权限总和:r=4、w=2、x=1,相加即得单组值。比如 755 = 4+2+1 / 4+0+1 / 4+0+1 → 所有者全开,组和其他人可读可执行。
- 适合快速重置整套权限,比如部署脚本中统一设为
644(文件)或755(可执行/目录) - 注意:数字模式会**覆盖原有权限**,不是叠加。设成
600就只留所有者读写,组和其他人权限全清 - 目录不能只设
r或w:没x就无法cd进入,也无法ls列出内容
符号模式(如 u+x, g-w)更安全的修改方式
用 u/g/o/a 指定对象,+/-/= 指定操作,r/w/x 指定权限。例如:
-
chmod u+x script.sh:仅给所有者加执行权限,不影响组和其他人 -
chmod go-w config.ini:去掉组和其他人的写权限,保留读和执行(如有) -
chmod a=r file.txt:所有人只能读(=是精确赋值,会清除其他权限) - 常用组合:
X(大写 X)比x更谨慎——只对目录或已含x的文件生效,避免误给普通文件执行权限
递归修改(-R)为什么容易出事?
chmod -R 755 mydir 会把目录和里面所有文件、子目录都设成 755。但文件通常不该有 x 权限,这既不安全,也可能被某些程序拒绝加载(如 SSH 密钥要求严格权限)。
- 真正需要的是「目录设
755,普通文件设644」,得用find分开处理: find mydir -type d -exec chmod 755 {} \;find mydir -type f -exec chmod 644 {} \;- 如果目录里混着可执行文件(如
.sh),还得额外加条件过滤,否则全变死权限
最常被忽略的一点:权限修改后,ls -l 看到的只是静态快照;是否生效,还取决于当前用户身份、所属组、以及是否在权限变更后重新登录或刷新 session。尤其改了 /etc/sudoers 或 SSH 目录权限后,不验证就退出,可能直接锁死自己。


















