Linux权限核心是“用户-组-其他”三级生效、一主多附组关系、属组匹配决定访问;主组定新建文件默认属组,附加组仅用于访问属组为该组的资源,权限不叠加。

Linux 用户组与权限分配的核心逻辑,其实就三点:用户归属组决定默认权限、文件属组影响组内成员访问、权限位(rwx)按“用户-组-其他”三级生效。掌握这三点,就能快速理清权限问题。
用户和组的关系不是“多对多”,而是“一主多附”
每个用户有且仅有一个主组(primary group),创建用户时自动创建同名主组;同时可加入多个附加组(supplementary groups)。主组影响新建文件的默认属组,附加组决定能否访问其他用户设置为该组可读写的资源。
- 查看当前用户主组和附加组:
id或groups - 新建用户并指定主组:
useradd -g devgroup -G docker,www newuser(-g设主组,-G加附加组) - 修改已有用户附加组:
usermod -aG ftp,backup alice(-aG是追加,漏掉-a会清空原有附加组)
文件权限中的“组”字段,只认属组,不认附加组身份
一个文件属组是 www,权限为 rw-rw----,那么只有属组为 www 的用户(且在 www 组中)才能用组权限访问。即使用户 bob 在 www 组里,但文件属组是 dev,那 bob 就只能走“其他”权限——除非他还是文件所有者。
- 改文件属组:
chgrp www /var/www/html/index.html或chown :www file - 递归修改目录及内容属组:
chgrp -R www /var/www/html - 确保新文件继承目录属组:给目录加
setgid位:chmod g+s /var/www/html(之后在此目录新建文件,自动继承父目录属组)
权限位生效顺序固定:“用户 > 组 > 其他”,不叠加、不跳过
系统判断访问权限时,严格按顺序检查:先看是不是文件所有者(user),是就用 u 权限;不是,再看是否属于文件属组(group),是就用 g 权限;都不是,才用 o 权限。不会因为用户同时属于多个组,就取各组权限最大值。
- 举例:文件
-rw-r-----,属主alice,属组dev。用户bob属于dev和ops两个组 —— 他能读(g=r),但不能写,因为属组只有 r;哪怕ops组对该文件有写权限,也无效,因为文件属组不是ops - 排查权限失败时,优先运行:
ls -l 文件看属主属组 + 权限位,再运行id 用户名看实际所属组,比对是否匹配
基本上就这些。不用死记命令,抓住“谁建的文件 → 属组是谁 → 当前用户是否匹配该属组 → 对应权限位有没有对应操作”这个链路,90% 的权限问题都能当场定位。










