setfacl -m u:用户名:权限可直接为单一用户设置专属读写权限,无需更改所有者或所属组;前提为文件系统支持acl且路径可写,需通过mount检查acl挂载选项,未启用时可用sudo mount -o remount,acl临时开启;对目录设默认acl(-d)才能使新建文件继承权限;mask掩码限制实际生效权限,需用--mask参数或setfacl --mask显式更新。

直接用 setfacl -m u:用户名:权限 就能给单一普通用户加专属读写权限,不需要改文件所有者或所属组,也不影响其他人原有权限。
确认前提:文件系统支持 ACL 且路径可写
ACL 不是默认就生效的,得先确保底层支持:
- 运行
mount | grep "$(df . | tail -1 | awk '{print $1}')" | grep acl,看到acl才说明已启用 - 如果没输出,用
sudo mount -o remount,acl /挂载点临时开启(比如/home或/data) - 长期生效需编辑
/etc/fstab,在对应行 options 加上acl,例如:/dev/sdb1 /data ext4 defaults,acl 0 2
给用户设读写权限(仅当前文件/目录)
这是最常用操作,命令简洁明确:
- 对文件加读写:
setfacl -m u:alice:rw /path/to/file.txt - 对目录加读写执行(x 是进入和遍历必需的):
setfacl -m u:bob:rwx /path/to/dir - 权限生效后,
ls -l输出末尾会出现+,如-rw-rw-r--+ 1 root root
让新建文件也自动继承——必须设默认 ACL
只设普通 ACL,新创建的文件/子目录不会自动获得该权限。要实现“后续所有内容都有”,得配默认规则:
- 先确保目标是目录(文件上设
-d会被忽略) - 执行:
setfacl -d -m u:alice:rw /shared/project - 这样以后在
/shared/project里新建的文件默认带 alice 的读写权,新建子目录则同时继承普通 + 默认 ACL - 已有内容不受影响,如需一并更新,再补一句:
setfacl -R -m u:alice:rw /shared/project
注意 mask 掩码是否锁住了实际效果
即使你写了 u:alice:rwx,若 mask 是 r--,alice 实际只有读权限。判断和修复方法:
- 运行
getfacl /path,看输出里mask::xxx这一行 - 如果 mask 权限比预期窄,执行:
setfacl --mask -m mask::rwx /path - 更省事的是加
--mask参数让 setfacl 自动重算:setfacl -m u:alice:rwx --mask /path











