setfacl 可为特定用户或组设置细粒度权限,但需文件系统挂载时启用 acl 选项且操作者有写权限;支持 -m 添加、-x 删除、-b 清空扩展 ACL 等操作,并受 mask 掩码限制。

直接用 setfacl 可以为特定用户或组添加、修改、删除细粒度权限,但必须满足前提:文件系统已启用 acl 挂载选项,且操作者对目标路径有写权限(普通用户只能设自己拥有的文件)。
确认文件系统支持 ACL
ACL 不是默认开启的功能,需底层文件系统(如 ext4、xfs)挂载时带 acl 选项:
- 检查是否已启用:
tune2fs -l /dev/sda1 | grep "Default mount options"(将/dev/sda1替换为实际设备),输出中需含acl - 临时启用:
sudo mount -o remount,acl /mount/point - 永久生效:编辑
/etc/fstab,在对应挂载项的 options 字段追加acl,例如:/dev/sda1 /data ext4 defaults,acl 0 2
为指定用户设置权限
使用 -m u:用户名:权限 添加单个用户的 ACL 条目:
- 给用户
alice对/shared/report.txt设置读写权限:setfacl -m u:alice:rw- /shared/report.txt - 若要递归应用到整个目录及其子项(如让
bob可读可执行):setfacl -R -m u:bob:r-x /shared/project - 权限字符仅用
r、w、x组合,不加连字符(如rx),也不写成r-x
为用户组设置权限
语法类似,把 u: 换成 g::
- 给组
developers赋予目录读写执行权限:setfacl -m g:developers:rwx /shared/project - 若希望新创建的文件自动继承该组权限,必须加
-d设默认 ACL(仅对目录有效):setfacl -d -m g:developers:rwx /shared/project - 已有子项不会自动获得默认规则,需额外递归设置当前权限:
setfacl -R -m g:developers:rwx /shared/project
注意 mask 掩码限制
ACL 中的 mask 是一道“权限闸门”,它限制所有非所有者、非所属组条目的最大有效权限。即使你设置了 u:charlie:rwx,若 mask::r--,charlie 实际只有读权限:
- 查看当前 mask:
getfacl /path,找mask::行 - 刷新 mask 到所需范围(如允许读写执行):
setfacl --mask -m mask::rwx /path - 更简洁方式:在设权限时直接加
--mask参数,例如:setfacl -m u:charlie:rwx --mask /path
常用管理操作
日常维护离不开这几个关键动作:
- 查看 ACL 设置:
getfacl /path(输出末尾带+表示存在扩展 ACL) - 删除某用户条目:
setfacl -x u:username /path - 清空所有扩展 ACL(保留基础 owner/group/other 权限):
setfacl -b /path - 仅清除默认 ACL(不碰当前权限):
setfacl -k /path


















