acl核心是绕过传统u/g/o限制,直接为特定用户或组单独授权,不改属主、不调属组、不开放others;需确认文件系统启用acl选项、安装setfacl/getfacl工具,用-m设置权限、-d设默认acl、-r递归应用,并注意mask对实际权限的限制作用。

Linux 中用 ACL 实现精细化权限管理,核心是绕过传统 u/g/o 三段限制,直接给特定用户或组单独授权,不改属主、不调属组、不开放 others。
确认基础支持是否就绪
ACL 不是默认全开的。先检查两件事:
- 文件系统是否启用 acl 挂载选项:运行 mount | grep "$(df . | tail -1 | awk '{print $1}')" | grep acl,有输出才表示已启用;若无,需在 /etc/fstab 对应分区行添加 acl(如 defaults,acl),再执行 mount -o remount /mount/point
- 工具是否可用:运行 which setfacl getfacl,缺失则安装——Ubuntu/Debian 用 sudo apt install acl,CentOS/RHEL 系列用 sudo dnf install acl 或 yum install acl
查看与设置基本 ACL 权限
用 getfacl 查看当前权限,输出中带 user:username:rwx 或 group:groupname:r-x 表示已有 ACL 条目;ls -l 显示权限串末尾有 + 也是标志。
常用设置操作:
- 给用户 alice 读写权限:setfacl -m u:alice:rw file.txt
- 给组 devs 读执行权限(目录下子项可进入):setfacl -m g:devs:r-x dir/
- 递归设置整个目录树:setfacl -R -m u:bob:rwX /srv/project(注意大写 X:仅当原文件有 x 或是目录时才加执行位,更安全)
- 移除某用户权限:setfacl -x u:alice file.txt;清空所有扩展 ACL:setfacl -b file.txt
让新文件自动继承权限:设置默认 ACL
只对目录有效,默认 ACL 决定其下新建文件/子目录的初始权限。
- 设置默认规则:setfacl -d -m u:dev1:rwX,g:backend:rwX /srv/project
- 已有文件不会受默认 ACL 影响,仍需单独赋权(如上条中的 -R)
- 默认 ACL 本身也会被子目录继承——即子目录创建后,它自己也具备默认 ACL,能继续向下传递
留意 mask 和最小权限原则
ACL 中的 mask 是实际生效权限的“天花板”。例如某用户被设为 rwx,但 mask 是 r--,那该用户最终只有读权限。
每次增删 ACL 后建议检查:getfacl /srv/project,观察 mask:: 行。若发现权限被意外限制,可手动收紧或放宽:setfacl -m m::r-- /srv/project。
生产环境务必坚持最小权限:不加 o+w,不用 u::rwx 覆盖属主原始权限,避免破坏传统权限逻辑和脚本兼容性。











