Linux ACL可在不改动属主和主组前提下为特定用户或组单独授权,需确认文件系统挂载时启用acl选项,通过setfacl -d -m设置默认ACL实现新文件自动继承,并配合umask与mask确保权限准确落地。

Linux ACL 能在不改动文件属主和主组的前提下,为特定用户或组单独授权,解决多用户协作中“既要安全又要灵活”的核心矛盾。关键不是堆砌权限,而是让新文件自动继承、权限不被 umask 或 mask 意外截断。
确认并启用文件系统 ACL 支持
ACL 功能依赖挂载选项,不是内核开关。即使系统默认支持,也要验证实际挂载状态:
- 运行
mount | grep "$(df . | tail -1 | awk '{print $1}')" | grep acl,输出含acl才算真正启用 - 若无输出,临时启用:比如对
/shared目录执行sudo mount -o remount,acl /shared - 永久生效需编辑
/etc/fstab,在对应分区的 options 字段追加acl(如defaults,acl),再sudo mount -o remount /shared
设置目录默认 ACL 实现自动继承
默认 ACL 是协作目录的基石,它只影响新建文件/子目录,不改变已有内容:
- 命令格式:
setfacl -d -m u:用户名:权限,g:组名:权限 /path/to/dir - 权限建议用
rwx或rwX(大写 X:仅对目录和已有执行位的文件加 x) - 例如:
setfacl -d -m u:alice:rwX,g:devteam:rwx /shared/project - 执行后用
getfacl /shared/project查看,确认输出中有以default:开头的条目
配合 umask 与 mask 确保权限落地
默认 ACL 设了≠新文件真有权限,中间还有两道关卡:
-
umask:它会过滤掉新建文件的权限位。协作目录建议统一设为
002(文件 664,目录 775),可在/etc/profile或用户~/.bashrc中添加umask 002 -
mask:它是所有命名用户/组权限的“天花板”。
setfacl -m通常自动更新 mask,但若手动改过或 chmod 过,可用setfacl --recompute-mask /path重算 - 用
ls -l查看时,权限末尾出现+(如drwxrwxr-x+)说明存在 ACL;getfacl输出中的mask::行就是当前生效上限
验证与清理要点
配置后必须动手验证,避免“看起来设了,其实没效”:
- 切换到目标用户(如
su - alice),在目录下创建测试文件:touch test.txt && mkdir testdir - 分别运行
getfacl test.txt和getfacl testdir,检查是否出现对应用户的user:alice:条目,且testdir还带default:块 - 若未生效,按顺序排查:父目录是否有 default 条目 → 文件系统是否真启用了 acl → 当前用户 umask 是否太严 → mask 是否被压低
- 清空默认 ACL:
setfacl -d -b /shared/project(-b清全部默认条目)


















