关键在于默认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)设定规则,并确保新文件自动继承。
避免混用个人用户直接授权,先按职能拆分两个组:
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
默认ACL决定“谁能在新建内容上做什么”。对整个/project目录设置两套默认规则:
setfacl -d -m g:devgrp:rwx /project
setfacl -d -m g:uigrp:rwX /project/assets /project/public/css /project/public/images
setfacl -m g:uigrp:--- /project/config /project/scripts
即使设了默认ACL,用户本地umask仍会过滤权限。例如umask=022时,rwx会被砍成r-x,导致UI组无法写入图片。所以必须统一:
umask 002(写入/etc/profile.d/acl-work.sh)touch logo.png && mkdir icons,再运行getfacl logo.png,应看到g:uigrp:rw-条目ACL里的X(大写)很关键——它只给目录和已有执行位的文件加x,避免HTML被误设为可执行:
rwx(研发需执行脚本)rwX(UI上传图片不需要x,但目录本身必须有x才能进入)setfacl -m g:uigrp:---彻底锁死