acl是解决多用户对同一目录需不同权限的直接方案,它不改变原属主/属组结构,通过setfacl为指定用户或组叠加独立权限,并需验证文件系统支持、挂载启用acl及工具可用。

ACL 是解决“多个用户对同一目录需要不同权限”这一典型问题的直接方案。它不改变原有属主/属组结构,也不依赖全局组调整,而是为指定用户或组单独叠加权限,真正实现按需授权。
确认系统已就绪
ACL 不是开箱即用的功能,需三步验证:
- 检查文件系统类型是否支持:运行 df -T .,确认是 ext4、XFS、Btrfs 等主流支持 ACL 的格式
- 查看挂载选项是否启用:执行 mount | grep "$(df . | tail -1 | awk '{print $1}')" ,输出中必须含 acl 字样
- 确保工具可用:getfacl 和 setfacl 命令存在;如缺失,在 Ubuntu/Debian 上运行 sudo apt install acl,在 RHEL/CentOS 上运行 sudo yum install acl
为特定用户设置独立目录权限
例如,让开发人员 dev1 可读写 /srv/app/logs,但仅允许运维人员 ops2 读取日志,且都不影响原属主权限:
- 给 dev1 完整权限:setfacl -m u:dev1:rwx /srv/app/logs
- 给 ops2 只读权限:setfacl -m u:ops2:r-x /srv/app/logs
- 注意:对目录设 x 才能进入;若只给 r--,则无法 ls 或 cd
让新创建内容自动继承权限(默认 ACL)
普通 ACL 只作用于当前项,新建文件/子目录不会自动获得。要实现“后加用户也能立即生效”,必须设置默认 ACL:
- 对目录启用默认规则:setfacl -d -m u:dev1:rwx /srv/app/logs
- 此后在此目录内新建的文件,dev1 默认拥有 rw-;新建子目录则同时继承 rwx
- 可一次设置多类默认权限:setfacl -d -m u:dev1:rwx,g:qa:rx,o::r /srv/app/logs
- 默认 ACL 仅对目录有效,设置在文件上会被忽略
验证、调整与清理
权限是否生效?有没有冲突?靠 getfacl 一目了然:
- 查看完整权限视图:getfacl /srv/app/logs,输出中会清晰列出 user:dev1:rwx、user:ops2:r-x、mask::rwx 等条目
- 如果某用户权限未生效,很可能是 mask 限制了实际生效上限;可显式提升:setfacl -m m::rwx /srv/app/logs
- 删除单个用户规则:setfacl -x u:ops2 /srv/app/logs
- 清空所有扩展 ACL(保留基础 rwx):setfacl -b /srv/app/logs











