acl可突破传统ugo三段限制,为多角色(开发者、测试员等)在共享目录中提供独立权限,不改属主、不依赖777;需启用文件系统acl选项,用setfacl -m设置权限、-d设置默认acl、配合umask与mask确保生效。

Linux 中用 ACL 实现多角色协同开发环境,核心是绕过传统 user/group/other 的三段限制,让不同角色(如开发者、测试员、运维、外包)在共享目录里各取所需、互不干扰,同时不改文件属主、不滥用 777。
确认并启用文件系统 ACL 支持
ACL 不是默认“开箱即用”,它依赖文件系统挂载时带 acl 选项:
- 运行
mount | grep "$(df . | tail -1 | awk '{print $1}')" | grep acl,若输出含acl(如rw,relatime,acl),说明已启用 - 若无输出,临时启用:
sudo mount -o remount,acl /path/to/share - 永久生效:编辑
/etc/fstab,在对应分区的 options 字段追加acl(例如defaults,acl),再执行sudo mount -o remount /path/to/share
为不同角色设置独立访问权限
协同开发中,角色不是用户组的简单叠加,而是按需授权。比如:
- 开发者
alice需读写源码和构建产物 - 测试员
tester只能读代码、运行测试脚本、查看日志 - CI 服务账户
gitlab-runner需要执行构建、写缓存,但不能删主分支 - 外包人员
vendor仅限访问/src/modules/api目录,且只读
命令示例:
setfacl -m u:alice:rwX,u:tester:r-x,g:ci-team:rwX /projectsetfacl -m u:gitlab-runner:rwX /project/.cachesetfacl -m u:vendor:r-x /project/src/modules/api
配置默认 ACL,确保新文件自动继承角色权限
协作目录下新建的文件/子目录必须“天生”带权限,否则每次都要手动补 ACL,极易遗漏:
- 对项目根目录设置默认规则:
setfacl -d -m u:alice:rwX,u:tester:r-x,g:ci-team:rwX /project - 注意:
-d只影响新建项,不影响已有内容;默认 ACL 仅对目录有效 - 权限建议用
rwX(大写 X):对目录加x,对普通文件不加,更安全
配合 umask 和 mask,防止权限被意外截断
设了默认 ACL ≠ 新文件真有权限——中间还有两道关卡:
-
umask:新建文件权限 = 默认值 & ~umask。协作环境建议统一设为
002(文件 664,目录 775),可在/etc/profile或用户~/.bashrc中添加umask 002 -
mask:它是所有命名用户/组权限的“天花板”。即使你给
alice设了rwx,若mask::r--,她实际只有读权。执行setfacl -m m::rwx /project可手动拉高上限;也可用setfacl --recompute-mask /project自动重算 - 验证是否生效:
ls -l /project看权限末尾是否有+;getfacl /project查看mask::行和default:条目











