《文件权限看不懂先别 chmod 777:用 ls -l、umask、ACL 三步管好权限》

举报
yd_246130537 发表于 2026/11/01 09:49:38 2026/11/01
【摘要】 新手在 Linux 上遇到“Permission denied”时,第一反应往往是 chmod 777,问题是解决了,隐患也埋下了:任何用户都能改这个文件,Web 服务被攻破后攻击者顺手就能改脚本、偷配置。本文用三步讲清权限到底怎么算,以及不用 777 也能把事办成。第一步:读懂 ls -l 的十个字符。执行 ls -l /etc/nginx/nginx.conf,开头会看到类似 -rw-r...

新手在 Linux 上遇到“Permission denied”时,第一反应往往是 chmod 777,问题是解决了,隐患也埋下了:任何用户都能改这个文件,Web 服务被攻破后攻击者顺手就能改脚本、偷配置。本文用三步讲清权限到底怎么算,以及不用 777 也能把事办成。
第一步:读懂 ls -l 的十个字符。执行 ls -l /etc/nginx/nginx.conf,开头会看到类似 -rw-r--r-- 的十个字符。第一位是类型,- 是普通文件,d 是目录,l 是软链接;后面九位每三位一组,依次是属主、属组、其他人的权限,r 读、w 写、x 执行,- 表示没有。数字写法是把 rwx 换算成 4、2、1 再相加:rwx 是 7,rw- 是 6,r-- 是 4。所以 644 就是属主可读写、组和其他人只读,755 是属主可读写执行、其余人可读执行。记住一个原则:文件一般不需要执行位,目录必须有执行位——没有 x,你连 cd 进目录、列出里面文件名的资格都没有,这就是很多人把目录设成 644 后“文件明明可读却打不开”的原因。定位问题先看三样:ls -l 看权限位,ls -ld 目录看上级目录权限,id 用户名看当前用户属于哪个组。权限是按“属主→属组→其他人”顺序匹配的,一旦匹配到一组就不再往下看,所以把用户加进属组却还用其他人身份判断,是常见的误判。
第二步:umask 决定新建文件的默认权限。新建文件默认是 666 减去 umask,新建目录默认是 777 减去 umask。系统默认 umask 通常是 022,于是文件默认 644、目录默认 755,这正是“新建文件别人能读、不能改”的来源。如果你发现新上传的配置文件组内同事改不了,先查 umask,再决定是在当前 shell 里临时 umask 002,还是在部署脚本里显式 chmod,而不是事后到处补 777。需要提醒的是,umask 只能做减法,不能给文件加上默认没有的执行位;脚本需要执行权限时,仍要显式 chmod +x。把 umask 写进个人 shell 配置前,先确认它不会影响系统服务或共享目录,否则一台机器上所有新文件都会悄悄变宽松。
第三步:多人协作别硬凑组,用 ACL 精细授权。两个人要改同一个目录、又不想把目录属组改来改去时,ACL 是比 777 体面的办法。setfacl -m u:zhangsan:rw- 目录只给张三读写权,getfacl 目录可以随时查看这些额外规则,setfacl -d -m u:zhangsan:rw- 目录还能让新建文件自动继承这条规则。权限收回时用 setfacl -x u:zhangsan 目录删掉单条即可,不用动其他人的权限。收尾自查清单:先 ls -l 确认权限位和属主属组,再 namei -l 文件路径从根目录一路看下来——任何一级父目录缺 x 都会挡住访问;最后用目标用户身份实测一次 sudo -u 用户名 cat 文件,能读才算真通。记住顺序:看清权限、算对 umask、协作上 ACL,777 永远是最后也不该选的那条路。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。