setfacl -r 可递归设置目录树acl权限,需显式指定-r选项;自动更新mask确保权限生效,支持-d设默认acl、-n跳过mask调整,并可用getfacl验证。

用 setfacl -R 就能递归修改整个目录及其所有子文件、子目录的 ACL 权限。
核心命令:-R 参数必须加
默认情况下,setfacl 只作用于单个文件或目录。要让权限设置生效到整个目录树,必须显式加上 -R(recursive)选项:
-
setfacl -R -m u:alice:rwx /shared/project给用户 alice 对/shared/project及其所有子项赋予读写执行权限 -
setfacl -R -m g:devteam:rx /shared/project给组 devteam 赋予读和执行权限(对目录是进入+查看必需的) -
setfacl -R -x u:bob /shared/project从整个目录树中删除用户 bob 的 ACL 条目
注意 mask 掩码是否自动更新
ACL 权限实际生效受 mask 限制。使用 -R 时,setfacl 默认会重新计算并同步更新每个文件/目录的 mask,确保新设权限真正可用。如果你手动指定了 mask(比如 -m m:rwx),它也会被递归应用;没指定则由系统自动推导。
常见组合操作建议
实际管理中常搭配其他参数提升效率和安全性:
- 加
--no-mask(简写-n)跳过 mask 自动调整——仅当你明确知道 mask 已足够且不想触发额外计算时使用 - 加
-d设置默认 ACL(setfacl -R -d -m u:alice:rwx /shared/project),让后续新建的文件/目录自动继承该规则 - 先用
getfacl -R /shared/project | head -20快速确认当前结构,避免误操作
验证是否生效
执行后用以下方式检查:
-
getfacl -R /shared/project | grep "user:alice"看是否每层都有对应条目 - 挑几个子文件运行
getfacl 文件名,确认权限串末尾有+,且user:alice行存在且权限正确 - 切换到 alice 用户,尝试
ls、cat或cd进入对应路径,实测行为是否符合预期











