Linux中ACL是对基础权限的叠加补充,仅在需为非所有者/非所属组成员授予权限时必要;启用需文件系统挂载时含acl参数;setfacl操作须注意-m、mask限制及default ACL对新文件的继承作用。

Linux 中 ACL 不是“额外权限系统”,而是对 user/group/other 三类基础权限的叠加补充——它只在需要给**非所有者、非所属组成员的特定用户或组**授予权限时才真正必要。盲目启用或滥用 ACL 反而会掩盖权限逻辑,增加排错成本。
确认文件系统已启用 acl 挂载选项
ACL 功能依赖底层文件系统挂载时带 acl 参数,不是装了 acl 包就自动可用。
- 运行
mount | grep "$(df . | tail -1 | awk '{print $1}'),检查输出中是否含acl;若无,说明未启用 - 临时启用:
sudo mount -o remount,acl /(替换/为实际挂载点) - 永久生效:编辑
/etc/fstab,在目标分区行第4列(options 字段)追加,acl,例如:UUID=xxx / ext4 defaults,acl 0 1 - 注意:
remount不会触发重新读取/etc/fstab,改完 fstab 后必须执行一次mount -o remount或重启才能生效
用 setfacl 添加用户/组权限时必须理解 -m 和权限位含义
setfacl -m 是修改 ACL 的核心操作,但权限字符串写错会导致行为完全偏离预期。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-
u:alice:rw-表示用户 alice 有读写、无执行权;u:alice:rwx才是完整权限;漏掉-或写成rx(缺w)会隐式置空对应位 - 对目录设权限时,
x不可省略:没有x就无法cd进入,也无法读取其下文件名(即使有r) - 递归设置用
-Rm,但注意:它只作用于**已有**子项,不影响后续新建文件——要让新文件也继承,必须配合 default ACL(见下一节) - 权限冲突时,
mask字段起决定性作用:所有非所有者的 ACL 条目实际生效权限 ≤mask;修改基础权限(如chmod g+w)可能意外收紧mask,导致 ACL “失效”
设置 default ACL 才能让新文件自动继承权限
普通 ACL 只影响当前对象;只有 default ACL(用 -d 参数)能控制该目录下未来创建的文件和子目录。
- default ACL **仅对目录有效**,对文件使用
-d会被忽略且不报错 - 命令格式:
setfacl -d -m u:alice:rw /shared/→ 新建文件默认获得 alice 的rw-,新建子目录则同时继承此 default 规则 + 自身的普通 ACL - 可一次设置多条 default 规则:
setfacl -d -m u:bob:r,g:editors:rw,o::r /shared/ -
ls -ld /shared/看不到+标识,但getfacl /shared/会明确列出default:前缀的条目
用 getfacl 查看真实生效权限,别只信 ls -l
ls -l 末尾的 + 只表示“存在扩展 ACL”,但具体谁有什么权限、mask 是多少、是否有 default 规则,全靠 getfacl。
-
getfacl /path输出中,user:alice:r--是显式规则,mask::rwx是生效上限,default:user:alice:r--是继承规则 - 如果某用户看似该有权限却访问被拒,先查
getfacl输出中的mask是否比你的 ACL 条目更严格 - 清除 ACL 要分场景:
setfacl -b清空所有扩展条目(保留基础权限);setfacl -k只删 default ACL;setfacl -x u:alice删除单个用户条目
ACL 的复杂性不在命令本身,而在权限叠加逻辑和 mask 的隐式干预——哪怕一条 chmod 都可能悄悄改掉 mask,让之前设好的 setfacl 条目部分失效。每次调整后,务必用目标用户身份实测,再用 getfacl 对照验证。

















