ACL 提供比 ugo 更灵活的文件权限控制,支持为特定用户或组单独授权;需确认文件系统挂载时启用 acl 选项,用 setfacl 设置、getfacl 查看、setfacl -b 清除扩展 ACL。

Linux 默认的 ugo(用户/组/其他)权限模型在多用户协作场景中往往不够灵活。ACL(Access Control List,访问控制列表)能为文件和目录添加更精细的权限规则,支持为特定用户或组单独授权,无需调整文件属主或主组。
启用并验证 ACL 支持
大多数现代 Linux 发行版默认启用 ACL,但需确认文件系统挂载时启用了 acl 选项:
- 运行 mount | grep "$(df . | tail -1 | awk '{print $1}')" ,检查输出是否含 acl(如
rw,relatime,acl) - 若未启用,需修改 /etc/fstab,在对应分区的挂载选项中加入 acl,然后执行 sudo mount -o remount /path
- 可通过 getfacl filename 查看某文件当前 ACL 状态;若只显示基础 ugo 权限,说明暂无扩展 ACL 条目
为指定用户设置独立读写权限
使用 setfacl 命令可快速赋予某用户对文件或目录的额外权限:
- setfacl -m u:alice:rwx project.txt:允许用户 alice 对 project.txt 具有读、写、执行权限(即使她不是文件属主或属组成员)
- setfacl -m u:bob:rx report/:授予用户 bob 对目录 report 的读和执行(进入)权限,便于浏览内容
- 对目录添加 -d(default)选项,可让新创建的子文件/子目录自动继承该 ACL:setfacl -m d:u:charlie:rw report/
管理组级细粒度权限与掩码机制
ACL 不仅支持用户,也支持任意组(包括非主组),但需注意 mask 的限制作用:
- setfacl -m g:devteam:rw config.conf:让 devteam 组成员获得 config.conf 的读写权,无论该组是否为文件属组
- ACL 中的 mask 是实际生效权限的“天花板”,它取所有命名用户、命名组及 group 类别权限的并集;若手动降低 mask(如 setfacl -m m::r--),即使某条目设为 rwx,最终也只体现为 r--
- 通常建议用 setfacl --recompute-mask 或直接省略 mask 设置,由系统自动计算合理值
清理与批量操作技巧
ACL 条目过多易引发维护混乱,及时清理和批量处理很关键:
- 移除单个用户权限:setfacl -x u:alice file
- 清除所有扩展 ACL(保留基础 ugo 权限):setfacl -b file
- 递归设置目录及其内容:setfacl -R -m u:dave:rx /shared/docs
- 从文件批量导入 ACL 规则:getfacl backup_dir/ > acl_backup.txt,后续可用 setfacl --set-file=acl_backup.txt target_dir/ 恢复

















