linux权限模型基于身份归属与权限位控制,核心是“谁(用户/组)、对什么(文件/目录)、能做什么(读/写/执行)”;通过ls -l查看权限位,chmod修改权限,chown/chgrp调整归属,SGID与粘滞位保障协作安全。

Linux 的权限模型不是靠“信任”运作的,而是靠明确的身份归属和精确的权限位控制。核心就三点:谁(用户/组)、对什么(文件/目录)、能做什么(读/写/执行)。理解清楚这三者的关系,设置就不再凭感觉。
用户、组与身份三重角色
每个文件在 Linux 中都绑定三个身份角色:
- 属主(user, u):创建文件的用户,或被
chown指定的用户 - 属组(group, g):文件所属的用户组,用户可属于多个组,但文件只挂一个属组
- 其他人(other, o):既不是属主、也不在属组里的所有用户
注意:root 用户不受任何权限限制,哪怕文件权限是 ------,root 仍可读写执行。普通用户则严格受这三重身份约束。
权限位怎么看、怎么改
用 ls -l 查看文件时,前10位字符就是权限信息。例如 -rwxr-xr--:
- 第1位:
-表示普通文件(d是目录,l是软链接) - 2–4位:
rwx是属主权限(读+写+执行) - 5–7位:
r-x是属组权限(读+执行,无写) - 8–10位:
r--是其他人权限(仅读)
修改权限常用两种方式:
- 符号法:如
chmod u+x script.sh(给属主加执行)、chmod go-w file.txt(去掉组和其他人的写权) - 数字法:每位用 4(r)、2(w)、1(x)相加,如
chmod 644 file.txt→ 属主 rw-(6),属组 r–(4),其他人 r–(4)
改归属:chown 和 chgrp
权限再对,归属错了也没用。修改文件“是谁的”“属于哪个组”,用:
-
chown alice:dev team.log—— 同时改属主为 alice、属组为 dev -
chown :admin config.conf—— 只改属组为 admin(冒号前空) -
chown -R bob:staff /home/bob/docs—— 加-R递归修改整个目录及内部所有内容
注意:chown 只有 root 或属主本人能执行;普通用户不能把文件转给别人,但可以改自己文件的属组(前提是自己属于那个组)。
让多人协作更安全:SGID 与粘滞位
普通权限解决“能不能访问”,特殊权限解决“协作中怎么不乱套”:
- SGID(组继承):对目录设
chmod g+s /shared,此后该目录下新建文件自动继承父目录属组,避免成员各自建文件后组权限失效 - 粘滞位(Sticky Bit):对共享目录设
chmod +t /tmp/upload或chmod 1770 /upload,确保即使目录可写,用户也只能删自己创建的文件 - 组合常用:共享上传目录一般设
3770(2+1=SGID+粘滞位,770=属主/组全权,其他人无权)
基本上就这些。不复杂但容易忽略的是:权限生效依赖于“路径上每一级目录都有足够 x 权限”,否则连进都进不去,更别说读文件了。