文件权限技术疑问:所有者为何需改权限写入?sudo创建文件无法修改?
文件所有者权限相关问题的解答
问题1:作为文件的所有者,为啥还要改权限才能写入文件?
这种情况我碰到过好几次,通常逃不出这几个原因:
- 所有者权限位丢了写入权限:可能之前不小心用
chmod u-w 文件名去掉了所有者的写入权限,哪怕你是文件主人,没有w权限也没法改内容。你敲ls -l 文件名看看,所有者对应的权限列是不是r-x或者-wx这种缺了w的情况,是的话补回来就行:chmod u+w 文件名。 - 文件被加了特殊锁(chattr):Linux有个冷门但好用的
chattr命令,能给文件加特殊属性,比如+i就是“不可修改”锁——一旦加上,就算root都没法直接改,更别说普通所有者了。用lsattr 文件名就能看到,如果输出里有i,就用chattr -i 文件名解锁。 - ACL规则搞的鬼:如果系统开了ACL(访问控制列表),可能有人给你的用户单独设置了禁止写入的规则,比如
setfacl -m u:你的用户名:-w 文件名。敲getfacl 文件名就能看到详细的ACL规则,要是有这种限制,用setfacl -x u:你的用户名 文件名删掉就行。
问题2:用sudo vim创建文件后,ls显示我是所有者且权限rwx,但普通用户打开就是只读?
这个问题有点迷惑人,我之前排查过类似的,主要是这几个坑:
- SELinux上下文不对:很多发行版默认开SELinux,它不管文件权限,只认安全上下文。比如你用sudo创建的文件,上下文可能是root专属的(比如
system_u:object_r:admin_home_t:s0),普通用户就算权限是rwx也没法写。你用ls -Z 文件名看看上下文,要是不对,用restorecon -v 文件名恢复默认上下文就行,或者临时关SELinux测试下(setenforce 0)。 - 文件被加了chattr特殊属性:和第一个问题一样,要是文件加了
+i或者+a(只能追加)属性,普通用户打开就会提示只读。先lsattr 文件名检查,有特殊属性就去掉。 - 你可能看错了ls的输出:正常来说
sudo vim test创建的文件所有者应该是root,但你说显示自己是所有者,会不会把组所有者当成了用户所有者?再仔细看ls -l的输出,第三列是用户所有者,第四列是组,别搞混了。要是真的是自己的所有者,那可能是你的sudo配置保留了用户环境(比如Defaults env_keep="HOME"),或者vim配置里强制改了所有者,但这种情况很少见。 - 文件系统是只读挂载的:要是文件所在的分区是只读挂载的(敲
mount看输出里有没有ro标记),那不管权限多高都没法写。这种情况得重新挂载成读写:mount -o remount,rw /挂载点。
内容的提问来源于stack exchange,提问作者digiform
相关产品推荐
相关产品推荐

