靠GID实现资源隔离的核心是将“组”作为项目容器:一、为每个项目创建专属组并添加成员;二、目录设setgid位并统一分配组所有权;三、禁用other权限并清理冗余组;四、配合umask与ACL精细调控权限。

靠GID实现资源隔离,核心是把“组”当成项目容器来用——不是简单分组,而是让每个项目独占一个组、一套目录权限、一种归属逻辑。
一、为每个项目建专属组,不混用通用组
项目组名要直白,比如proj-frontend、proj-api,避免用users或developers这类泛化组。组本身不带权限,但它是后续所有策略的锚点。
- 创建组:
sudo groupadd proj-frontend - 加成员:
sudo usermod -aG proj-frontend alice bob - 用户需重新登录,或运行
newgrp proj-frontend立即生效
二、目录设setgid + 统一组所有权
项目根目录必须归属该项目组,并开启setgid位(权限中的2)。这样新创建的文件和子目录自动继承组身份,不会因用户默认组不同而丢失协作权限。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 初始化目录:
sudo mkdir /srv/proj-frontend - 设属组:
sudo chgrp proj-frontend /srv/proj-frontend - 设权限:
sudo chmod 2775 /srv/proj-frontend(2= setgid,775 = 属主+属组可读写执行,other无权) - 修复已有目录:
find /srv/proj-frontend -type d -exec chmod g+s {} \;
三、彻底禁用world权限,堵住越界入口
other(o)权限是跨项目访问最常见的漏洞来源。只要项目不对外公开,就该默认关掉o位;同时检查用户是否误入无关组。
- 清空文件的other权限:
find /srv/proj-frontend -type f -exec chmod o-rwx {} \; - 检查用户所属组:
groups alice,发现冗余组就清理:sudo deluser alice proj-api - 敏感文件单独加固,如
.env设为640(属主读写,属组只读)
四、配合umask与ACL做精细调节
全局umask 002能让新文件默认保留组写权限;若需给某人只读权限,用ACL加,不破坏主组结构。
- 在项目shell环境里设:
echo "umask 002" >> /srv/proj-frontend/.bashrc - 加只读协作者:
setfacl -m u:charlie:r-X /srv/proj-frontend - 查ACL设置:
getfacl /srv/proj-frontend;清空用setfacl -b

















