首页/系统/Linux 运维命令速查/setfacl 配置访问控制列表

setfacl 配置访问控制列表

setfacl 在传统 rwx 之外按用户/组精细授权:-m 添加规则、-x 删规则、-R 递归、-d 设默认 ACL(目录内新文件自动继承)。

Linux 运维命令速查系统更新于 2026-10-13

setfacl 是什么

setfacl 在传统 rwx 之外按用户或组做精细授权。三个关键概念:访问 ACL 针对具体对象加规则;默认 ACL 只对目录生效,决定目录内新建文件与子目录继承什么权限;mask 限制所有命名用户与命名组 ACL 能取到的最大权限。用法上 -m 添加规则、-x 删除单条、-b 清空全部、-R 递归、-d 设置默认 ACL,查看用 getfacl。判断一个文件是否带 ACL 最快的方法是看 ls -l 权限位末尾有无加号。

基本信息

适用平台Linux(acl 包提供 getfacl 与 setfacl;ext4 与 XFS 通常默认启用 acl 挂载选项)
命令语法setfacl [-m|-x|-b] 规则 文件或目录
常用选项-m 修改规则 -x 删除指定规则 -b 清空全部 ACL -R 递归 -d 设置默认 ACL -k 删除默认 ACL
规则写法u:用户名:权限、g:组名:权限、o:权限、m:mask,权限可用 r、w、x 及组合
配套命令getfacl 查看规则、ls -l 通过加号判断是否带 ACL

典型使用场景

  • 单点授权:只给某个用户读写某一份报告,而不改动文件属组
  • 共享目录:让多个组在同一个目录里各自持有不同权限
  • 权限继承:给目录设置默认 ACL,内部新建文件自动带上约定权限
  • 排障定位:出现「明明授权了却没有权限」时检查 mask
  • 授权回收:按用户维度精确删除规则,而不是粗暴清空全部

常用示例

常用示例
setfacl -m u:alice:rw /srv/data/report.pdf
setfacl -m g:auditors:r /srv/data
setfacl -d -m u:deploy:rwx /srv/shared   # 目录默认 ACL,新建内容自动继承
setfacl -R -m u:backup:rX /srv/data      # 递归授权,X 只给目录加执行位
setfacl -x u:alice /srv/data/report.pdf  # 移除单条规则
setfacl -b /srv/data/report.pdf          # 清空全部 ACL
getfacl /srv/data/report.pdf

getfacl 输出读法

条目含义注意
user::rw-文件属主的权限位与 ls -l 显示的属主权限一致
user:alice:rw-命名用户的 ACL 规则具体授权对象与权限
group::r--属组的权限位对应传统 group 权限
mask::rw-ACL 掩码是命名用户与命名组权限的上限,常见失效原因
default: 开头的条目默认 ACL只出现在目录上,被新建内容继承
设置 ACL 后 ls -l 的权限位末尾会出现加号。授权看似正确却不生效时,先看 mask 是不是把命名用户与组的权限卡住了。
备份、同步与解压类工具如果没带 ACL 保留选项,恢复后授权会整体丢失,且不会报错。涉及 ACL 的目录要在备份方案里明确开启相应参数。

易错点

  • mask 位是所有命名用户与命名组 ACL 的上限,忽略它会出现授权了但没权限的现象
  • 默认 ACL 只影响设置之后新建的内容,已有文件仍需单独授权
  • 递归授权时用 rwx 会连文件也加上执行位,应改用 X 让只有目录获得执行权限
  • 备份或同步工具未保留 ACL,恢复后权限静默丢失

数据来源与参考

  • man 1 setfacl(acl)
  • man 5 acl

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌