/etc/shadow安全需权限、内容、访问痕迹三重确认:权限必须为600或640且属主root;空密码(第二字段为空)、低uid非系统账户、错误shell均属高危;须排查非授权读取及备份一致性。

/etc/shadow 是 Linux 系统密码安全的最后防线,它不靠复杂工具,靠的是权限、内容、访问痕迹三重确认。一次疏忽——比如权限变成 644 或第二字段为空——就可能让攻击者绕过所有登录限制。
检查权限与归属是否严格合规
该文件必须仅 root 可读写,普通用户连查看都不应被允许。标准权限是 600(-rw-------),少数发行版接受 640(-rw-r-----),但前提是属组为 shadow 且普通用户不在该组中。
- 执行
ls -l /etc/shadow查看当前权限、属主和属组 - 若权限不是 600 或 640,或属主不是 root,立即修复:
sudo chown root:root /etc/shadow && sudo chmod 600 /etc/shadow - 启用 SELinux 的系统还需同步上下文:
sudo restorecon /etc/shadow - 修复后务必用普通用户实测:
su - nobody -c "cat /etc/shadow 2>/dev/null || echo blocked",输出blocked才算生效
筛查高危账户状态
空密码、异常 UID、错误 shell 是最常被利用的突破口,它们不会报错,但会悄悄打开后门。
- 空密码账户(第二字段为空)等于免密登录:
sudo awk -F: '$2 == "" {print $1}' /etc/shadow - 锁定或禁用账户用
*或!表示,属正常;!!多表示密码过期锁定 - 检查 UID 小于 1000 的非系统账户(如手工添加的低UID管理员):
sudo awk -F: '$3 - 验证 shell 字段是否合理:系统账户应为
/usr/sbin/nologin或/bin/false,避免交互式登录
排查非授权访问与残留痕迹
即使权限正确,也要防“合法路径、非法读取”。脚本、备份任务、老旧管理工具可能绕过权限逻辑直接读取 shadow。
- 检查是否有进程正在打开该文件:
sudo lsof +D /etc/ 2>/dev/null | grep shadow - 查看审计日志(若启用 auditd):
sudo ausearch -m avc -ts today | grep shadow - 搜索残留备份文件:
find /etc -name "shadow*" -not -name "shadow" -type f 2>/dev/null,发现即删 - 确认没有定时任务或监控脚本硬编码读取
/etc/shadow,尤其注意自研运维工具
执行可靠备份与一致性校验
备份不是复制完就结束,运行时文件可能正被修改,导致备份不一致。恢复时才发现无法登录,已晚。
- 避开高频变更时段(如批量改密、系统更新窗口),优先在凌晨空闲期操作
- 推荐原子化方式:
rsync -aHAX --delete /etc/ /backup/etc_$(date +\%Y\%m\%d)/,保留硬链接、ACL 和扩展属性 - 生成校验码:
sha256sum /backup/etc_$(date +\%Y\%m\%d)/shadow > /backup/etc_$(date +\%Y\%m\%d)/shadow.sha256 - 每季度在测试机上执行一次完整恢复演练:覆盖
/etc/shadow后尝试 SSH 登录,确认无报错且行为正常











