stat -c "%a %c" 可同时获取文件八进制权限与selinux上下文,其中%a输出如644的纯数字权限(首位表特殊权限),%c输出如system_u:object_r:etc_t:s0的完整上下文,仅selinux启用且文件有标签时有效。

直接用 stat -c "%a %C" 文件名 就能同时拿到八进制权限和 SELinux 安全上下文,这是运维中快速核验权限合规与策略执行的常用组合。
怎么看八进制权限(不是 ls 那套字符)
stat 输出中 Access 行括号左侧的四位数字(如 0644)才是真实权限位,首位代表特殊权限:4 是 setuid、2 是 setgid、1 是 sticky。例如 01777 明确表示带 sticky 的目录,而 ls -l 可能只显示 drwxrwxrwx,掩盖关键细节。
- stat -c "%a" 提取纯数字(如 644),适合脚本判断或批量比对基线
- stat -c "%A" 输出符号权限(如 -rw-r--r--),与 ls -l 一致但来源更底层、更可靠
- 若
Access: (0664/-rw-rw-r--)中两部分不一致,说明存在 ACL,需配合getfacl进一步确认
怎么提取 SELinux 安全上下文
%C 是 stat 命令中专用于输出 SELinux context 的格式符,它返回类似 system_u:object_r:etc_t:s0 的完整字符串。该字段仅在启用 SELinux 的系统上有效,且要求文件有对应标签。
- 运行
stat -c "%n %C" /etc/shadow可验证敏感文件是否落在正确域(如shadow_t) - 若输出为空或为
?,常见原因包括:SELinux 被禁用、文件未打标、或使用了非 SELinux 文件系统(如 ext2) - 搭配
-L使用可确保软链接指向的目标文件上下文被读取,而非链接本身
一次查清权限 + 上下文的实用写法
生产环境排查时,常需同时确认权限数值与策略标签是否匹配。推荐以下简洁命令:
-
stat -c "%n: %a (%A) — %C" /var/www/html/index.php→ 输出如/var/www/html/index.php: 644 (-rw-r--r--) — system_u:object_r:httpd_sys_content_t:s0 -
stat -c "%a %C" /etc/passwd放入自动化检查脚本,做数值与上下文双条件判断 - 批量检查多个路径:
for f in /etc/passwd /etc/shadow /root/.bashrc; do echo "$(stat -c "%n: %a %C" "$f")"; done
不复杂但容易忽略:%C 在非 SELinux 系统或无上下文文件上会空白,不能当作默认存在字段来依赖;而 %a 始终有效,是权限校验最稳定的基础指标。











