首页/系统/Linux 运维命令速查/getfacl 查看 ACL 权限

getfacl 查看 ACL 权限

getfacl 输出文件/目录的完整 ACL(含默认 ACL 与 mask),是排查「明明授权了却访问不了」的关键工具。

Linux 运维命令速查系统更新于 2026-10-13

getfacl 看的是完整权限

getfacl 输出文件或目录的完整 ACL:常规权限位、具名用户与组条目、mask、以及目录上的默认 ACL。排查“明明授权了却访问不了”时,答案经常就在这里 —— 权限位看起来没问题,但 mask 或默认 ACL 让实际效果与直觉不同。它配合 setfacl 做授权,配合 getfacl -R 做批量盘查与导出留档。

基本信息

适用平台Linux(acl 软件包;ext4/xfs 需挂载启用 acl,现代发行版默认开启)
语法getfacl [-R] [-p] [-h] 文件...
关键输出条目、mask、目录的 default 段
相关命令setfacl、ls -l(末尾 + 表示存在 ACL)、cp -a、tar --acls
权限要求查看普通用户即可

典型使用场景

  • 排查“用户在组里却依然读不了”的实际权限构成
  • 盘查共享目录的授权面,找出额外被授权的账号
  • 迁移或备份前导出 ACL,恢复时还原
  • 核对目录的默认 ACL 是否让新建文件继承预期权限
  • 安全审计中排查异常的具名授权

常用示例

常用示例
getfacl /srv/shared                        # 查看 ACL 全文
getfacl -p /srv/shared                     # -p 保留绝对路径前缀,便于备份还原
getfacl -R /srv/shared | grep '^# file' | head   # 递归前先看文件清单规模
getfacl -R -p /srv/shared > /tmp/acl-$(date +%F).txt   # 导出现状留档
getfacl -R -p /srv/shared | setfacl --set-file=- /backup/shared   # 还原到另一路径
ls -ld /srv/shared                         # 权限位末尾带 + 表示存在 ACL
getfacl -h /srv/shared-link                # -h 查看链接自身,而不是它指向的目标

输出读法

输出项含义注意
user::rwx属主权限与常规权限位一致
user:alice:r-x具名用户授权ls 的权限位上看不出来
group::r-x属组权限与常规属组权限一致
mask::r-xACL 的有效权限上限会裁剪具名条目,是“授权了却没生效”的最常见原因
other::---其他人权限与权限位第三段对应
default:(仅目录)新建文件继承的默认 ACL决定继承行为,只在目录上出现
getfacl -R 的输出量很大:先配合 grep 过滤或先看清单规模;备份与还原 ACL 用 setfacl --set-file 比手工拼规则可靠得多。
cp 与 tar 默认不保留 ACL:迁移或备份后要用 getfacl 复核,否则容易出现“文件都在但权限全变了”的情况(cp -a 与 tar --acls 才会保留)。
导出与还原的惯用组合:getfacl 带 -p 导出保留完整路径,还原时用 setfacl --set-file 逐路径施加;跨机器路径不同时先替换前缀再回灌,比手工重写规则安全。
具名条目会让 ls 的权限位出现 + 号,但看不出细节:交接、审计与排障时以 getfacl 的输出为准,不要凭权限位推断授权范围。

易错点

  • 只看 ls 的权限位:具名授权完全看不出来,目录还可能带有默认 ACL 影响新建文件
  • 忽略 mask 的裁剪作用:具名条目被 mask 限制,调整 setfacl 前先确认 mask 的值
  • cp/tar 迁移后权限丢失:默认不保留 ACL,需用 cp -a 或 tar --acls,并在迁移后复核
  • getfacl 默认不跟随符号链接:排查软链目录时看清对象,必要时用 -h 或直接查目标路径

数据来源与参考

  • man 1 getfacl(acl)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌