<p>直接用 setfacl -m u:用户名:rw- 文件或目录 就能为指定用户设置 ACL 读写权限,但需确保文件系统启用 acl 挂载选项、目标路径可写、用户存在,并注意 mask 限制和默认 ACL(-d)才能使新建文件继承权限。</p>

直接用 setfacl -m u:用户名:rw- 文件或目录 就能为指定用户设置 ACL 读写权限,但要确保文件系统支持 ACL、目标路径可写、用户真实存在,并留意 mask 限制和默认继承机制,否则权限可能不生效或无法延续到新文件。
确认系统和路径前提
ACL 不是默认启用的功能,需逐项检查:
- 运行
tune2fs -l /dev/对应分区 | grep "Default mount options",输出中必须含acl;若没有,需在/etc/fstab对应挂载项添加acl参数,并执行sudo mount -o remount /挂载点 - 确保你要设置权限的文件或目录本身具有写权限(例如属主可写),否则
setfacl会静默失败 - 确认用户存在:
id 用户名能查到有效 UID,否则设置无效
为单个用户添加读写权限
语法固定,权限位要写准:
- 对普通文件:用
sudo setfacl -m u:alice:rw- /path/to/file(末尾-明确禁用执行权,避免误开) - 对目录:用
sudo setfacl -m u:alice:rwx /path/to/dir(目录必须有x才能进入和遍历) - 执行后,
ls -l /path显示权限末尾出现+号,表示 ACL 已启用
让新建文件自动继承该权限
上面命令只作用于当前对象。如目标是目录且希望后续新建内容也获得相同权限,必须设置默认 ACL:
- 先确保目标是目录(不是文件),再运行:
sudo setfacl -d -m u:alice:rw- /shared(-d表示默认规则) - 已有子文件/子目录不受影响;如需一并更新,补一句:
sudo setfacl -R -m u:alice:rw- /shared
验证与常见问题排查
权限没起作用?重点看这三项:
- 用
getfacl /path查看输出,确认是否存在user:alice:rw-条目 - 检查
mask::行——它会压制所有非属主/属组的 ACL 权限。比如 mask 是r--,即使设了rw-,用户实际也只有读权限 - 修复 mask:
sudo setfacl -m u:alice:rw- --mask /path(加--mask强制重算) - 测试时别直接切换用户,改用
sudo -u alice cat /path,避免 shell 环境干扰


















