关键在于默认acl+合理分组+sgid+umask四者配合:1.建devgrp/uigrp组并加入成员,项目目录属组projectteam且设sgid;2.用默认acl为不同路径设定组权限,如devgrp:rwx、uigrp:rwx于/assets等,禁uigrp访问/config;3.统一设umask 002确保acl生效;4.用大写x区分目录与文件执行权限。

要让研发和UI设计人员在同一个项目目录下协同工作又不越权,关键不是靠“默认组”这个模糊概念,而是用默认ACL(default ACL)+ 合理分组 + SGID + umask四者配合。Linux里没有“默认组权限”这种独立机制,所谓“默认组访问”,实际是通过默认ACL为指定组(如devgrp、uigrp)设定规则,并确保新文件自动继承。
1. 先建好角色组并统一归属
避免混用个人用户直接授权,先按职能拆分两个组:
- 创建组:
sudo groupadd devgrp && sudo groupadd uigrp - 把对应成员加进去:
sudo usermod -aG devgrp alice,bob && sudo usermod -aG uigrp carol,dan - 设项目目录属组为通用协作组(比如
projectteam),并启用SGID:sudo chown :projectteam /project && sudo chmod g+s /project
2. 用默认ACL区分写入范围
默认ACL决定“谁能在新建内容上做什么”。对整个/project目录设置两套默认规则:
- 研发组需要改代码、脚本、配置:
setfacl -d -m g:devgrp:rwx /project - UI组只改静态资源(图片、CSS、Figma导出文件等),禁止碰逻辑层:
setfacl -d -m g:uigrp:rwX /project/assets /project/public/css /project/public/images - 同时收紧敏感路径(如/config、/scripts):
setfacl -m g:uigrp:--- /project/config /project/scripts
3. 控制新建文件的实际权限边界
即使设了默认ACL,用户本地umask仍会过滤权限。例如umask=022时,rwx会被砍成r-x,导致UI组无法写入图片。所以必须统一:
- 所有协作用户shell中设
umask 002(写入/etc/profile.d/acl-work.sh) - 验证效果:切换到carol用户,在/project/assets下执行
touch logo.png && mkdir icons,再运行getfacl logo.png,应看到g:uigrp:rw-条目
4. 目录与文件权限要分开看
ACL里的X(大写)很关键——它只给目录和已有执行位的文件加x,避免HTML被误设为可执行:
- 对代码目录用
rwx(研发需执行脚本) - 对静态资源目录用
rwX(UI上传图片不需要x,但目录本身必须有x才能进入) - 对纯文本配置文件,可额外用
setfacl -m g:uigrp:---彻底锁死











