shadow 文件为什么要收紧
Linux 把口令哈希从 /etc/passwd 挪到 /etc/shadow,就是为了让全局可读的 passwd 不再泄露哈希。shadow 一旦权限过宽,本地普通用户就能把整份哈希拿走离线爆破,绕过失败锁定与在线速率限制。所以基线的要求很简单:属主 root,最多让 shadow 组读,其他任何身份都不该碰。
基本信息
| 加固项 | /etc/shadow 最小可读权限 |
|---|---|
| 适用平台 | Linux(RHEL/CentOS/Debian/Ubuntu) |
| 风险等级 | 高 |
| 基线值 | 0000 root:root,或 0640 root:shadow |
| 检查文件 | /etc/shadow 与备份文件 /etc/shadow- |
典型使用场景
- 基线核查:交付前确认口令文件权限符合发行版基线
- 应急响应:判断攻击者是否已具备离线爆破条件,权限过宽要按已泄露评估
- 批量整改后复核:收紧权限后确认所有相关文件都改到,未遗漏备份文件
- 安装第三方软件后复查:部分安装脚本会给目录或文件放宽权限
- 等保测评:口令文件权限是身份鉴别条款里的固定检查项
核查命令
核查命令
stat -c '%a %U:%G %n' /etc/shadow /etc/shadow- # 权限与属主一起看
stat -c '%a %U:%G %n' /etc/gshadow /etc/gshadow- # 组口令文件同样敏感
ls -l /etc/shadow /etc/shadow- # 常规列表方式交叉确认
find /etc -maxdepth 1 -name 'shadow*' -printf '%m %u:%g %p\n' # 找出全部相关文件加固
加固
chown root:root /etc/shadow # 属主固定为 root
chmod 0000 /etc/shadow # 通用做法,root 不受该权限限制
# Debian 系若约定 root:shadow 组可读:
# chown root:shadow /etc/shadow && chmod 0640 /etc/shadow
cp /etc/shadow /root/shadow.bak.before # 改动前先留一份便于回滚
stat -c '%a %U:%G %n' /etc/shadow # 复核相关文件基线对照
| 文件 | 基线 | 说明 |
|---|---|---|
| /etc/shadow | 0000 root:root 或 0640 root:shadow | 口令哈希主文件,最敏感 |
| /etc/shadow- | 与主文件同级收紧 | 改密时产生的备份,同样含哈希,最易被遗漏 |
| /etc/gshadow | 0000 root:root 或 0640 root:shadow | 组口令哈希,权限过宽同样可离线爆破 |
| /etc/gshadow- | 与主文件同级收紧 | 备份文件,检查脚本要一起覆盖 |
改动前先 stat 记录原值并留一份副本便于回滚;某些监控或同步工具依赖 shadow 组读取,收紧到 0000 之前先确认没有这类依赖,否则它们会静默失败且不易发现。
root 不受文件权限限制,0000 不会影响 root 正常读取与改密。不同发行版的默认约定不同:Debian 系常见 0640 root:shadow,RHEL 系常见 0000,核查结论按发行版基线写,不要用一个数值套所有系统。
权限之外的联动项
shadow 权限只是口令保护的一环。同一批核查里还应确认:passwd 与 group 保持 0644、空口令账号已清零、口令复杂度与失败锁定策略已启用。权限收紧但账号策略缺失,攻击面并没有真正变小。