Linux ACL通过setfacl/getfacl命令实现对用户或组的精细化权限控制,需文件系统挂载时启用acl选项,支持普通ACL、默认ACL(-d)、递归设置(-R)及mask权限掩码调整。

Linux的ACL(Access Control List)能突破传统UGO权限模型的限制,实现对单个用户或组的精细化权限控制。它不是替代rwx,而是补充——当标准权限不够用时,ACL就是最直接有效的解决方案。
启用并验证ACL支持
大多数现代Linux发行版默认已启用ACL,但需确认文件系统挂载时带有acl选项:
- 运行 mount | grep "$(df . | tail -1 | awk '{print $1}')" ,查看输出中是否含 acl
- 若无,临时启用可执行:sudo mount -o remount,acl /mount/point(如
/或/home) - 永久生效需编辑
/etc/fstab,在对应分区的挂载选项字段追加,acl(注意逗号不空格)
为特定用户添加读写执行权限
使用setfacl命令直接赋予某用户对目标文件或目录的独立权限:
-
给用户 alice 对 /data/report.txt 的读写权:
setfacl -m u:alice:rw /data/report.txt -
让用户 bob 对 /var/www/html/ 具备遍历+读+执行(即进入和查看):
setfacl -m u:bob:rx /var/www/html/ -
递归设置(含子目录与文件):加 -R 参数,例如:
setfacl -Rm u:devteam:rwx /opt/app/src/
注意:对目录设x才允许cd进入;若要创建的新文件自动继承ACL,需配合default ACL(见下节)。
设置默认ACL实现子项自动继承
仅设置普通ACL不能让新创建的文件/子目录自动获得相同权限。必须用default ACL:
- 对目录设置默认ACL:
setfacl -d -m u:alice:rw /shared/docs/
此后在/shared/docs/内新建的文件默认拥有alice的rw权限;新建子目录则同时继承普通ACL + default ACL - 可同时设置用户、组、mask及others的默认规则,例如:
setfacl -d -m g:editors:rw,u:admin:rwx,o::rx /shared/docs/ - default ACL仅对目录有效,设置在文件上会被忽略
查看、修改与清除ACL规则
权限是否生效?规则是否冲突?靠getfacl一目了然:
-
查看详细ACL:
getfacl /path/to/file_or_dir
输出中user:username:perms、group:groupname:perms、mask::xxx(实际生效的最大权限掩码)都清晰列出 -
删除某用户的ACL条目:
setfacl -x u:alice /path -
清空所有扩展ACL(保留基础UGO权限):
setfacl -b /path -
复制ACL到另一路径:
getfacl file1 | setfacl --set-file=- file2
特别提醒:ACL生效受mask约束。即使你给了u:alice:rwx,若mask是r-x,alice实际最多只有rx——可通过setfacl -m m::rwx显式提升mask。


















