setfacl 命令用于为特定用户、组等设置精细 acl 权限,基本格式为 setfacl -m u:用户名:权限;支持递归、删除、清空及默认 acl 设置,并需文件系统启用 acl 选项。

在 Linux 中,setfacl 命令用于设置文件或目录的访问控制列表(ACL),可以为**特定用户、组或其他人**赋予比传统 u/g/o 权限更精细的读写执行权限。要为指定用户设置 ACL,核心是使用 -u 选项配合用户名和权限字符。
基本语法:为单个用户添加 ACL 权限
命令格式如下:
setfacl -m u:用户名:权限 文件或目录
其中:
- -m 表示“modify”,即修改 ACL 条目;
- u:用户名:权限 指定目标用户及其权限(权限用 r、w、x 组合,如 rw- 或 rwx);
- 若文件系统不支持 ACL(如未挂载 acl 选项),操作会失败。
常见操作示例
- 给用户
alice对/data/report.txt添加读写权限:setfacl -m u:alice:rw- /data/report.txt - 为用户
bob设置只读权限,并递归应用到整个目录及其子项:setfacl -R -m u:bob:r-x /shared/project - 移除用户
charlie的 ACL 条目:setfacl -x u:charlie /path/to/file - 清空文件所有扩展 ACL(保留基本 owner/group/other 权限):
setfacl -b /path/to/file
验证与查看 ACL 设置
使用 getfacl 查看当前 ACL 状态:
getfacl /path/to/file
输出中会出现类似 user:alice:rw- 的行,确认设置已生效。注意:若看到 # file: ... 后有 # owner: ... 等字段,说明 ACL 已启用;若仅显示 user::rwx 类似基础条目,则尚未添加扩展 ACL。
注意事项与前提条件
- 目标文件系统必须支持 ACL(如 ext4、xfs),且挂载时启用了
acl选项(可通过mount | grep "$(df . | awk 'NR==2 {print $1}')"检查); - 普通用户只能为自己拥有的文件设置 ACL(除非是 root 或具备
CAP_DAC_OVERRIDE能力); - 目录上设置
x权限对进入该目录是必需的;若需让某用户遍历子目录,建议同时设置r-x; - ACL 权限不会自动继承,如需新创建的文件/子目录也拥有相同 ACL,需先设置默认 ACL(用
setfacl -d -m u:username:perms 目录)。











