ACL是Linux突破传统UGO三元组权限限制的核心机制,支持为任意用户或组单独授权、不改属主属组、可设默认ACL自动继承,并通过mask控制实际生效权限上限。

ACL 是 Linux 中突破传统三元组(user/group/others)权限限制的核心机制,不改动文件原有属主和属组,就能为任意用户或组单独授权,真正实现“按需赋权”。
确认文件系统已启用 ACL 支持
多数现代发行版(如 CentOS 8+/Ubuntu 20.04+)默认启用 ext4/xfs 的 ACL,但仍建议验证:
- 用 df -h . 查到当前目录所在挂载点,再执行 dumpe2fs -h /dev/sdXn | grep "Default mount options",输出含 acl 即表示已支持
- 若未启用,可临时挂载:mount -o remount,acl /mount/point
- 永久生效需编辑 /etc/fstab,在对应挂载项的选项中加入 acl(例如 defaults,acl),再运行 mount -o remount /mount/point
给特定用户或组设置独立权限
适用于已有目录快速授权,无需调整用户归属或改组:
- 给用户 alice 对 /data/project 读写:setfacl -m u:alice:rw /data/project
- 给组 devs 读+执行(可进入、可列内容):setfacl -m g:devs:r-x /data/project
- 移除某用户权限:setfacl -x u:alice /data/project
- 清空所有扩展 ACL(保留基础权限):setfacl -b /data/project
执行后,ls -l 显示权限串末尾出现 +(如 drwxr-xr-x+),说明 ACL 已生效。
配置默认 ACL 实现自动继承
这是目录级精细化管理的关键——让新创建的文件和子目录自动获得预设权限,避免重复手动设置:
- 为目录设置默认 ACL(仅对目录有效):setfacl -d -m g:devs:rwX /data/project(注意大写 X:对目录加 x,对普通文件不加,更安全)
- 此后在该目录下新建的文件,自动获得 g:devs:rw-;新建子目录则获得 g:devs:rwx,并继续向下继承默认 ACL
- 可同时设置多个默认规则:setfacl -d -m u:deploy:r-x,g:qa:r-- /data/project
查看与排查实际生效权限
ACL 权限是否起效,不能只看命令是否成功,要结合生效逻辑判断:
- 用 getfacl /data/project 查看完整配置,重点关注:user::(属主)、user:alice:(命名用户)、group::(属组)、group:devs:(命名组)、mask::(所有命名实体权限上限)
- mask 决定实际生效上限。例如 mask 是 r--,即使设置了 u:alice:rw-,alice 实际也只有读权限
- 必要时可调整 mask:setfacl -m m::rw- /data/project











