必须先确认文件系统启用ACL挂载选项,否则setfacl规则无效;再用setfacl -d -m设置目录默认ACL以实现新文件自动继承,同时需协调umask(建议002)和大写X权限字符确保正确生效。

确认文件系统已启用 ACL 支持
没启用 acl 挂载选项,setfacl 设置的规则根本不会生效。别跳过这步直接设权限。
运行:mount | grep "$(df . | tail -1 | awk '{print $1}')" | grep acl,如果没输出,说明当前挂载不带 acl。
- 临时启用(例如对
/home):sudo mount -o remount,acl /home - 永久生效:编辑
/etc/fstab,在对应分区的挂载选项中加入acl(如defaults,acl),然后sudo mount -o remount /home - 注意:某些发行版(如 CentOS 7+、Ubuntu 20.04+)默认已启用,但 NFS 或 XFS 特定配置下仍可能被禁用
设置目录默认 ACL 让新文件自动继承权限
默认 ACL 只影响后续新建的文件和子目录,不改已有内容。这是协作目录的核心配置点。
例如给 /shared/team 设置:用户 alice 读写、用户 bob 只读、组 devs 读写:
setfacl -d -m u:alice:rwX,u:bob:r-X,g:devs:rwX /shared/team
- 务必用大写
X:它只对目录或已有执行位的文件加x,避免给普通文件错误添加执行权 - 验证是否生效:
getfacl /shared/team输出里必须有以default:开头的行 - 若新创建的文件没继承,先检查
getfacl输出有没有default:,再查umask和挂载选项
umask 会覆盖 ACL 中的部分权限
即使设了 u:alice:rwX,如果用户当前 umask 是 022,新建文件权限就是 644(即 rw-r--r--),alice 实际只能拿到 rw- —— 看似给了,实则被 umask 截断了。
- 协作目录建议统一设
umask 002(组可写)或umask 007(仅用户+组可访问) - 在
/etc/profile或用户~/.bashrc中添加:umask 002 -
umask不影响目录的x位,但会影响文件是否可执行;而 ACL 的X能绕过这个限制,所以优先用X而非x
验证是否真生效,别信 getfacl 输出就完事
getfacl 显示有 default: 条目 ≠ 新建文件真继承了权限。必须手动测试。
- 切换到目标用户:
su - alice - 进目录创建文件:
touch test.txt && mkdir testdir - 检查:
getfacl test.txt应含user:alice:rw-;getfacl testdir应同时显示 user/group 条目 +default:块 - 如果没出现,常见原因:父目录没默认 ACL、文件系统未挂载
acl、当前 shell 的umask过严、或用了cp/rsync等不保留 ACL 的命令复制文件
ACL 的关键复杂点不在命令本身,而在“默认规则 + umask + 挂载选项”三者必须同时对齐。少一个,权限就断在半路。


















