导语:刚接触 Linux 时,很多人第一次被“权限”卡住,往往不是命令不会敲,而是不理解 rwx、755、owner、group 到底在描述什么。🔐 Linux 文件权限的核心并不复杂:它用一套规则决定“谁可以读、谁可以改、谁可以执行”,这也是多人系统和服务器安全的基础。
一、先看懂 ls -l 的权限字符串
在终端执行 ls -l,常见输出可能类似:-rwxr-xr-- 1 alice dev 1024 Aug 17 start.sh。最左边的 -rwxr-xr-- 就是权限信息,其中第一个字符表示文件类型,- 通常代表普通文件,d 代表目录,l 代表符号链接;后面 9 个字符每 3 个一组,分别对应所有者、所属组、其他用户的权限。GNU Coreutils 文档说明,文件模式位可以用符号形式或八进制数字表示 GNU Coreutils 文件权限说明。
把 -rwxr-xr-- 拆开看更直观:rwx 属于文件所有者,表示可读、可写、可执行;r-x 属于所属组,表示可读、不可写、可执行;r-- 属于其他用户,表示只能读取。这里的 r 是 read,w 是 write,x 是 execute。chmod 手册也明确说明,r、w、x 分别用于选择读、写、执行或目录搜索权限 chmod 手册。
二、文件和目录的 rwx 含义不完全一样
很多新手容易误以为 rwx 在文件和目录上含义完全一致,其实目录权限要单独理解。对普通文件来说,r 表示可以查看内容,w 表示可以修改内容,x 表示可以把它当作程序或脚本执行。对目录来说,r 表示可以列出目录项,w 表示可以在目录中创建、删除或重命名条目,x 则表示可以进入目录或访问目录下路径;chmod 系统调用文档也把目录上的 x 描述为 search,即搜索或遍历权限 来源链接 系统调用说明。
这也是为什么有些目录明明有读权限,却还是 cd 不进去;或者脚本明明内容正确,却提示 Permission denied。排查时不要只盯着文件本身,还要检查它所在的每一级目录是否具备必要的 x 权限。🧭
三、三类对象:所有者、所属组、其他用户
Linux 权限不是只问“能不能访问”,而是先问“你是谁”。一个文件通常有所有者和所属组,权限分别授予 owner、group、others 三类对象。chmod 的符号模式中,u 表示文件所有者,g 表示文件所属组内的其他用户,o 表示不属于前两类的其他用户,a 表示全部用户 chmod 手册。
举例来说,一个项目目录由用户 alice 创建,所属组是 dev。如果 bob 也在 dev 组中,他访问该目录时通常会匹配 group 权限;如果 tom 既不是所有者也不在 dev 组中,就会匹配 others 权限。理解这个匹配顺序后,再看权限字符串就不会混乱。
四、数字权限:为什么 755、644、600 很常见
数字权限本质是把 r、w、x 转成数值相加:r=4,w=2,x=1。一个三位数字分别对应所有者、所属组、其他用户。例如 755 表示所有者 7,即 4+2+1,可读可写可执行;所属组 5,即 4+1,可读可执行;其他用户 5,也是可读可执行。chmod 手册说明,数字模式使用 0 到 7 的八进制数字,并由 4、2、1 的位值相加得到 chmod 数字模式说明。
- 644:普通文本文件常用,所有者可读写,组和其他用户只读。
- 755:目录或可执行脚本常用,所有者可写,其他人可读和进入。
- 600:私密配置、密钥文件常用,只有所有者可读写。
- 700:私人目录常用,只有所有者可读、写、进入。
⚠️ 不建议把 chmod 777 当成万能解法。777 代表所有人都可以读、写、执行,短期可能解决报错,长期却可能暴露配置、脚本或上传目录,尤其在服务器环境里风险很高。
五、符号权限:更适合精细修改
数字模式适合一次性设置完整权限,符号模式更适合“只改一小部分”。例如 chmod u+x start.sh 表示给所有者增加执行权限;chmod g-w config.yml 表示移除所属组的写权限;chmod o= file.txt 表示清空其他用户的权限。chmod 手册说明,+ 会增加权限,- 会移除权限,= 会设置指定权限并移除未提到的权限 chmod 符号模式说明。
如果你不想误伤现有权限,优先考虑符号模式。比如脚本不能运行时,用 chmod +x script.sh 通常比直接 chmod 777 script.sh 更合理;共享目录需要团队可写时,可以考虑调整 group 权限,而不是开放给所有用户。
六、所有权:chmod 和 chown 不是一回事
chmod 改的是权限位,chown 改的是文件的所有者和所属组。chown 手册说明,如果只提供所有者,则只改变文件所有者;如果使用 owner:group 形式,则可以同时改变所有者和所属组 chown 手册。
常见操作如 chown alice:dev app.log,表示把 app.log 的所有者改为 alice,所属组改为 dev。服务器部署时,如果文件属于 root,但应用进程以 app 用户运行,单独 chmod 可能不是最佳方案;更合理的做法通常是把所有权交给正确的服务用户,再设置最小够用的权限。
七、特殊权限:知道即可,慎重使用
除了普通 rwx,Linux 还有 setuid、setgid、sticky bit 等特殊位。chmod 手册说明,数字模式的第一位可以选择 setuid、setgid 和 sticky bit;其中 sticky bit 用在目录上时,可以限制非特权用户删除或重命名不属于自己的文件,常见于 /tmp 这类共享可写目录 chmod 特殊权限说明。
对初学者来说,不必一开始就深入所有特殊位,但要记住一点:看到权限字符串里出现 s、S、t、T 时,不要随手改掉。尤其是系统目录和系统命令,错误修改可能导致程序异常或安全边界被破坏。
八、实用排查思路
- 先用 ls -l 查看文件本身的所有者、所属组和权限。
- 如果是目录访问失败,检查路径上每一级目录是否有 x 权限。
- 如果脚本不能执行,确认文件是否有 x 权限,并检查脚本解释器路径是否正确。
- 如果必须 sudo 才能访问,优先检查所有权是否错误,而不是立刻 chmod 777。
- 多人协作目录优先用组权限解决,例如统一所属组,再给组增加必要的读写执行权限。
一个好习惯:权限设置遵循“最小够用原则”。能给所有者就不给组,能给组就不给 others,能只读就不要写,能不执行就不要执行。✅
总结
Linux 文件权限看似是一串字符,背后其实是“用户身份 + 操作能力 + 资源归属”的组合规则。入门时先掌握 rwx、u/g/o、chmod、chown 和常见数字权限,就能解决大多数日常问题;进一步理解目录上的 x、特殊权限和最小够用原则,才能真正从“会复制命令”走向“知道为什么这样设置”。🌱