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