Linux 文件权限入门:看懂 rwx、数字权限与所有权
部署或运维时最常见的报错之一,就是 Permission denied。程序装好了、路径也对,却死活读不了文件、写不进目录,十有八九是文件权限在拦路。Linux 的权限模型其实不复杂,核心只有三样东西:谁拥有这个文件、对哪几类人分别开放什么操作。
先看 ls -l 的输出:-rwxr-xr-- 1 alix dev 4096 Nov 5 10:00 app.sh。第一个字符表示类型,- 是普通文件,d 是目录。后面九个字符分成三组,每组三个,依次是所有者、所属组、其他人的权限。r 是读(4 分),w 是写(2 分),x 是执行(1 分),没有的权限用 - 占位。上面这个文件就是:所有者可读可写可执行,组内成员和其他人只能读和执行。
改权限用 chmod。数字法最常用:把每组三个权限的分值相加,644 表示所有者读写、其余只读,是普通文件的稳妥默认;755 表示所有者全权、其余可读可执行,常用于目录和可执行脚本;600 表示只有所有者能读写,常用于私钥文件,SSH 甚至会拒绝使用权限过松的私钥。符号法更适合微调:chmod u+x 给所有者加执行,chmod g-w 去掉组的写权限,chmod a+r 给所有人加读权限。
改所有权用 chown:sudo chown alix:dev file 把文件的所有者和组一起改掉;只改所有者写 chown alix file,只改组可用 chgrp。加 -R 可以递归处理整个目录,但生产环境里对根目录附近用 -R chown 要格外小心,改错一整片文件的所有权,恢复起来非常麻烦。
最容易踩的坑在目录上:目录的 x 权限不是「执行」,而是「进入和穿过」。一个文件本身可读,但如果它所在目录对你没有 x 权限,你照样访问不到它,会收到 Permission denied。排查权限问题时,要从目标文件一路往上,把每一层目录的 x 权限都检查一遍。另一个常见设置是 /tmp 的 1777:所有人可读写可进,但开头的 1 是粘滞位,保证每个人只能删自己创建的文件。
最后一条原则:权限能给小就别给大。图省事把文件或目录设成 777,等于对所有本地用户敞开读写执行的大门,多用户机器和服务器上尤其危险。真正需要协作时,优先用所属组来分权:把文件 chown 给对应组、组权限开到够用为止,所有者、组、其他人三层分开,才是这套模型设计的本意。
- 点赞
- 收藏
- 关注作者
评论(0)