linux通过gid实现多用户资源隔离,核心是将权限绑定到gid并配合文件属组和组权限位(g-rwx)生效;系统按“属主→属组→其他”顺序匹配权限,同组用户可协同访问,非组用户被隔离。

Linux 通过 GID 实现多用户资源隔离,核心不是“给每个用户单独设一个组”,而是用组作为权限容器,把权限绑定到 GID 上,再让多个用户归属同一 GID,从而共享或限制对特定资源的访问。GID 本身不自动隔离,它必须配合文件属组(group ownership)和权限位(尤其是组执行位 g+x、组写位 g+w)共同起作用。
GID 是资源访问的“门禁卡编号”
系统在检查一个用户能否读/写/执行某个文件时,会按顺序判断:
- 是否为文件所有者(UID 匹配)→ 是则看 owner 权限(u-rwx)
- 否则,是否属于该文件所属的组(GID 匹配)→ 是则看 group 权限(g-rwx)
- 否则,走 other 权限(o-rwx)
这意味着,只要把多个用户加入同一个 GID,再把目标目录或文件的属组设为该 GID,并打开对应组权限,这些用户就能协同操作;反之,若某用户不在该组中,哪怕他是普通账户,也无法访问——这就是基于 GID 的隔离基础。
- 文件的属组由
chgrp <groupname> file</groupname>或chown :<groupname> file</groupname>设置 - 用户加入组用
usermod -aG <groupname> username</groupname>(-aG表示追加,避免覆盖已有组) - 新建文件默认属组取自用户的主组(/etc/passwd 第4字段),但可通过设置目录的 setgid 位(
chmod g+s dir)强制继承父目录属组
用组划分协作边界,避免越权访问
典型场景如开发团队共用代码目录:
# 创建项目组 sudo groupadd project-dev # 把 alice 和 bob 加入该组 sudo usermod -aG project-dev alice sudo usermod -aG project-dev bob # 设定共享目录属组和权限 sudo mkdir /srv/project sudo chgrp project-dev /srv/project sudo chmod 2775 /srv/project # 2=setgid, 7=owner(rwx), 7=group(rwx), 5=other(r-x)
效果:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- alice 和 bob 在
/srv/project下新建文件,自动继承属组project-dev(因 setgid 位生效) - 两人可互相修改对方创建的文件(组有写权限)
- 其他用户(如 tester)即使知道路径,也无法写入(other 无 w 权限)
注意:单纯 chmod 775 不够——缺 setgid 位会导致新文件属组变成创建者主组(如 alice 的 alice 组),破坏统一归属。
避免 GID 冲突与权限绕过
-
不要复用系统 GID:GID 1–999 属于系统服务(如
daemon:1,sys:3),手动分配应从 1000 起,推荐用groupadd自动生成(它会查/etc/group并选最小空闲 GID) -
主组 vs 附加组要分清:每个用户有且仅有一个主组(登录时默认组,影响新建文件默认属组);附加组(secondary groups)决定其能访问哪些“组权限资源”。
id username可查看全部有效 GID -
警惕 umask 影响:用户默认掩码(如
umask 002)决定新建文件权限。若 umask 是022,则touch a.txt生成-rw-r--r--,即使属组正确,组也无法写——需同步调整 umask 或显式chmod g+w
结合 ACL 做精细化补充(非必需但实用)
当标准三元权限(user/group/other)不够用时,可用 ACL 打破“单组限制”:
# 允许用户 carol 对 project 目录有读写执行权,即使她不属于 project-dev 组 sudo setfacl -m u:carol:rwx /srv/project # 同时设默认 ACL,使新文件也继承该权限 sudo setfacl -d -m u:carol:rwx /srv/project
ACL 不替代 GID 隔离,而是叠加控制。生产环境建议优先靠 GID+setgid 构建主干隔离,ACL 用于例外授权。
不复杂但容易忽略










