使用 setfacl -m u:用户名:rw 可为用户添加读写权限,但需确保文件系统挂载时启用 acl 选项,目录需配合 -d 设置默认 acl 才能使新建文件继承权限,且 mask 掩码可能限制实际权限。

直接用 setfacl -m u:用户名:rw 文件或目录 就能为特定用户添加读写权限,但要注意生效前提和常见陷阱——不是所有文件系统默认支持,也不是设了就立刻可用。
确认文件系统已启用 ACL 支持
ACL 不是内核自动开启的功能,得看挂载点是否启用了 acl 选项:
- 查当前挂载选项:
tune2fs -l /dev/sda1 | grep "Default mount options"(把/dev/sda1换成实际设备);输出里必须含acl - 若没有,编辑
/etc/fstab,在对应行的挂载选项中加入acl,例如:/dev/sda1 /data ext4 defaults,acl 0 2 - 不改配置可临时启用:
sudo mount -o remount,acl /data(重启后失效)
基础用法:给单个用户加读写权限
语法简单,但权限对象类型决定行为差异:
- 对普通文件:
setfacl -m u:alice:rw report.txt—— alice 立即可读写该文件 - 对目录:
setfacl -m u:bob:rwx shared/—— bob 可进入、列出、新建文件,但新文件**不会自动继承**此权限 - 注意:执行后
ls -l显示权限末尾会多一个+,如-rw-rw-r--+,表示存在 ACL
让新文件也生效:必须加默认 ACL(-d)
只设 -m 不管用,新建文件默认不带 ACL。要让子项自动获得权限,需配合 -d 设置默认规则:
- 先确保目标是目录(如
/shared) - 设置默认 ACL:
setfacl -d -m u:alice:rwx /shared - 已有内容需单独赋权:
setfacl -R -m u:alice:rwx /shared - 两项结合才完整:既覆盖现有内容,又保障后续新建项自动带上权限
权限没反应?检查 mask 掩码是否锁住
ACL 条目写了 rwx,但用户实际只能读?大概率是 mask 在限制:
- 运行
getfacl /path,查看是否有mask::r--这类窄权限 - mask 是 ACL 的“最大有效权限闸门”,非属主/属组的条目都受它约束
- 刷新 mask:
setfacl --mask -m mask::rwx /path,或更常用:setfacl -m u:alice:rwx --mask /path(自动重算)











