getfacl 是查看 linux 文件或目录 acl 权限的核心命令,可显示传统权限、用户/组 acl、mask 和默认 acl;基础用法为 getfacl filename,关键字段包括 user::、group::、other::、user:name:、group:name:、mask:: 和 default:前缀条目,其中 mask 决定所有 named 条目的实际有效权限。

使用 getfacl 查看文件或目录上设置的 ACL(访问控制列表)权限,是 Linux 中排查用户/组细粒度权限问题的关键手段。它能清晰展示除传统 rwx 之外的额外授权规则,比如对特定用户或组单独赋予读写执行权限。
基本用法:查看单个文件或目录的 ACL
直接运行命令即可显示完整 ACL 信息:
-
getfacl filename—— 显示文件的 ACL 条目,包括所有用户、组、mask 和默认 ACL(如果是目录) -
getfacl -p dirname—— 加-p可避免显示绝对路径前缀,输出更简洁 -
getfacl /path/to/dir | head -n 20—— 对大型目录可配合head快速浏览开头部分
识别 ACL 输出中的关键字段
输出通常包含以下几类条目,需重点关注:
- user::rwx —— 文件所有者的基础权限(对应 chmod 的 u)
- group::r-x —— 所属组的基础权限(对应 chmod 的 g)
- other::--- —— 其他用户的权限(对应 chmod 的 o)
- user:alice:r-- —— 明确授予用户 alice 的额外权限
- group:devs:rw- —— 明确授予组 devs 的额外权限
- mask::rw- —— 实际生效的最高权限掩码,所有 named user/group 权限不能超过 mask
- default:user::rwx —— 目录的默认 ACL,影响后续新建文件/子目录(仅目录有)
区分“有效权限”与“显式设置”
ACL 中某条规则可能被 mask 限制,导致实际不生效。例如:
本文档主要讲述的是Android linux内核介绍;Android内核是基于Linux 2.6内核的(目前最新开发版本是2.6.31),它是一个增强内核版本,除了修改部分Bug外,它提供了用于支持Android平台的设备驱动,希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
user:tom:rwx + mask::r-- → tom 实际只有 r-- 权限,getfacl 会在对应行末尾标注 # effective:r--
这意味着即使你设置了 rwx,真正起作用的是 mask 和该条目的交集。修改 mask 需用 setfacl -m m::rwx。
常见排查场景示例
当用户无法访问某文件,但属主/属组看起来没问题时:
- 先确认是否启用了 ACL:
mount | grep "acl"或检查文件系统挂载选项(ext4 默认支持,xfs 均支持) - 运行
getfacl /path/to/file,看是否有冲突的 user/group 条目或过严的 mask - 对比用户实际所属组与 ACL 中列出的 group 条目,注意:ACL 不继承 /etc/group 关系,只认显式声明的组名
- 若为目录,检查 default ACL 是否缺失,导致新创建文件没继承预期权限
不复杂但容易忽略 —— 很多权限问题不是没设,而是 mask 卡住了,或者 default ACL 没配全。










