Linux文件系统ACL高级继承通过默认ACL(default ACL)实现,需确保挂载选项含acl,用setfacl -d -m设置目录默认规则,配合SGID和umask才能使新文件/目录自动继承预设权限。

Linux 文件系统 ACL 高级继承设置,核心是让新创建的文件和子目录自动获得预设权限,而不是靠手动反复 chmod 或 setfacl。这不依赖“自动复制”,而是通过 默认 ACL(default ACL) 机制实现——它只对目录生效,且仅作用于后续新建项。
确认文件系统已启用 ACL 支持
ACL 功能不是开关一开就万事大吉,必须确保底层挂载选项包含 acl:
- 运行
mount | grep "$(df . | awk 'NR==2 {print $1}')"查看当前所在分区的挂载参数,确认输出含acl - 若缺失,临时启用:
sudo mount -o remount,acl /path/to/mountpoint - 永久生效需编辑
/etc/fstab,在对应行 options 字段追加acl,例如:UUID=abc123 /data ext4 defaults,acl 0 2
为目录设置默认 ACL(关键步骤)
这是实现继承的唯一可靠方式。命令格式为 setfacl -d -m [规则] 目录,其中 -d 表示 default,-m 表示修改:
- 让组
devs对/shared/project下所有新建内容有读写执行权:setfacl -d -m g:devs:rwx /shared/project - 同时赋予用户
audit只读权限:setfacl -d -m u:audit:r-x /shared/project - 注意:该操作不影响已有文件或子目录,只管“将来”
让继承真正落地:配合 SGID 和 umask
单设 default ACL 还不够,实际权限还受两层过滤:
-
SGID 位:执行
chmod g+s /shared/project,确保新文件/目录自动继承父目录所属组,避免组权限失效 -
umask 限制:新建文件权限 = default ACL 权限 & ~umask。例如 default 给
rw-rw-rw-,但用户 umask 是002,最终文件就是rw-rw-r-- - 建议团队统一设置用户 shell 的 umask 为
002(写入~/.bashrc或/etc/profile)
验证与维护 ACL 继承状态
别只设不管,定期检查才能防疏漏:
- 查看是否已设默认 ACL:
getfacl /shared/project,输出中出现以default:开头的行即表示生效 - 测试继承效果:在目录内新建文件
touch test.txt,再运行getfacl test.txt,确认其 ACL 条目与 default 规则一致 - 清理某条默认规则:
setfacl -d -x g:devs /shared/project;清空全部默认 ACL:setfacl -d -b /shared/project


















