ACL权限冲突本质是mask截断、继承失效或机制叠加导致“表面有权限实际被拦”,需通过ls -l查+号、getfacl验mask与default、namei检路径x权限、排除SELinux/隐藏属性/挂载选项干扰。

ACL 权限冲突不是“权限没加够”,而是实际生效权限被掩码(mask)截断、继承失效或与其他机制叠加导致的“表面有权限,实际被拦住”。排查要直击关键点,不靠试错。
先确认 ACL 是否已启用并生效
执行 ls -l 查看目标路径权限串末尾是否有 +(如 drwxr-xr-x+),没有则 ACL 未配置;有则继续验证:
- 用 getfacl /path 查输出,重点看
user:xxx:、group:yyy:条目是否存在,以及mask::的值 - 注意:即使你设了
u:alice:rwx,若mask::r-x,那 alice 实际只有r-x—— 这是最常见的“明明给了写权却不能写”的原因 - 检查
default:开头的行,它决定新创建文件/子目录是否自动继承 ACL;没设 default,新建项就回落到基础 UGO 权限
验证 mask 是否成了权限瓶颈
mask 不是“额外限制”,而是 ACL 权限的“最大允许上限”。它的值由所有 ACL 条目中最高权限动态计算得出,但可被手动覆盖:
- 运行 getfacl /path,对比
mask::和你想授予用户的权限(如u:deploy:rwx) - 若 mask 权限低于用户所需(例如 mask 是
r-x,但用户需要rw-),执行:
sudo setfacl -m m::rwx /path - 对目录还应同步更新 default mask:
sudo setfacl -d -m m::rwx /path
检查路径各层目录的执行(x)权限
ACL 只控制目标路径本身,但访问路径中的每一级父目录都必须有 x 权限才能进入。常见误判是 ACL 设对了,但卡在上层目录:
- 用 namei -l /full/path/to/file 一次性列出从根目录到目标的每一段属主、属组和权限
- 逐级确认是否有某一级目录缺少
x(比如drw-r--r--),这会导致整个路径不可达,ACL 完全不生效 - 特别注意:普通用户对
/home/otheruser目录无 x 权限时,哪怕 ACL 给了该用户对/home/otheruser/project/file.txt的 rwx,也进不去
排除 ACL 之外的干扰机制
ACL 是 DAC 层面的增强,但它可能被更高优先级策略覆盖或忽略:
- SELinux:用 sestatus 确认是否启用;查日志 ausearch -m avc -ts recent 是否有被拒记录;临时 setenforce 0 测试是否恢复
-
文件隐藏属性:运行 lsattr /path,若出现
i(immutable)或a(append-only),chmod/setfacl 都无效,需先 chattr -i /path -
挂载选项:执行 mount | grep "$(df /path | tail -1 | awk '{print $1}')" ,确认没带
noacl或ro(只读挂载会使所有写权限失效)


















