Linux中setfacl实现绕过u/g/o限制的叠加式精细授权,需确认文件系统启用acl选项,支持为特定用户/组设rwx权限、目录默认ACL继承及getfacl/setfacl调试管理。

Linux 中用 setfacl 配置访问控制,核心是绕过传统 u/g/o 三级权限限制,为特定用户或组单独授权。它不改动文件属主和属组,也不影响其他人权限,属于“叠加式”精细控制。
确认系统支持并启用 ACL
ACL 不是默认开启的魔法功能,需两步验证:
- 检查文件系统是否挂载了 acl 选项:运行
mount | grep "$(df . | awk 'NR==2 {print $1}')",输出中应含acl - 若未启用,临时生效可执行
sudo mount -o remount,acl /mount/point;永久生效需编辑/etc/fstab,在对应分区的 options 字段追加acl(如defaults,acl) - 普通用户只能为自己拥有的文件设置 ACL;root 或有
CAP_DAC_OVERRIDE能力的用户无此限制
为指定用户添加读写执行权限
这是最常用场景,语法简洁明确:
- 给用户
alice对文件report.txt添加读写权限:setfacl -m u:alice:rw- report.txt - 给用户
bob对目录/shared/docs及其所有子项设只读+进入权限:setfacl -Rm u:bob:r-x /shared/docs - 同时授权多个用户:用逗号分隔,如
setfacl -m u:alice:rx,u:charlie:w file.log - 权限字符用小写
rwx,缺位用-(如rw-表示无执行权)
设置默认 ACL 实现自动继承
仅对目录有效,作用是让后续新建的文件/子目录自动带上预设权限,避免每次手动设置:
- 让新创建的文件默认对用户
devuser可读:setfacl -m d:u:devuser:r /project - 让新子目录也自动获得进入权限(即带
x):setfacl -m d:u:devuser:r-x /project - 注意:默认 ACL 不影响已有内容,只管“将来”;且必须先存在该目录的普通 ACL 条目,
mask才会自动更新
查看、清理与调试 ACL
配置后务必验证,常见操作如下:
- 查看完整 ACL 设置:
getfacl filename,输出中出现user:username:rw-即表示成功 - 删除某用户条目:
setfacl -x u:username file - 清空所有扩展 ACL(保留基础 owner/group/other 权限):
setfacl -b file - 移除默认 ACL(仅目录):
setfacl -k directory - 递归操作时加
-R,但注意对大量文件可能较慢;目录上没x权限,用户将无法进入或遍历


















