/etc/shadow权限应设为600且属主root,/etc/passwd权限应为644且属主root;需用chmod、chown加固,禁用特殊权限,验证非root用户无法读取,并同步selinux上下文。

直接限制访问权限是最有效、最基础的防护手段。/etc/shadow 存的是所有用户的密码哈希,一旦被普通用户读取,就等于把整套登录凭证摊开在攻击者面前。
确保 shadow 文件仅 root 可读写
默认情况下,该文件必须禁止任何非 root 用户读取或写入:
- 执行 sudo chmod 600 /etc/shadow,将权限设为仅 root 可读可写(-rw-------)
- 若系统依赖 PAM 或某些服务需 shadow 组访问,可用 sudo chmod 640 /etc/shadow && sudo chown root:shadow /etc/shadow
- 务必清除 setuid/setgid/sticky 位:sudo chmod u-s,g-s,o-t /etc/shadow
验证非特权用户无法访问
加固不是改完就结束,必须实测是否生效:
- 切换到普通用户(如 su - testuser),运行 cat /etc/shadow
- 应明确返回 Permission denied,而非输出内容或空行
- 检查是否有脚本、定时任务或监控工具意外读取该路径(可用 sudo lsof /etc/shadow 或审计日志排查)
配合 passwd 文件权限同步控制
/etc/passwd 虽然可读,但它的安全性直接影响 shadow 的有效性:
- 运行 sudo chmod 644 /etc/passwd && sudo chown root:root /etc/passwd
- 确认第二字段全为 x(表示密码已移至 shadow),而非明文或空值
- 避免 passwd 文件被篡改为可写,否则攻击者可添加新用户或修改 shell 字段绕过认证
纳入持续检查机制
人工加固容易遗漏或被后续操作覆盖,建议固化为基线:
- 写入巡检脚本,例如:[ "$(stat -c "%a %U:%G" /etc/shadow)" = "600 root:root" ]
- 若启用 SELinux,加固后运行 sudo restorecon /etc/shadow 同步安全上下文
- 结合 sudo awk -F: '$2 == "" {print $1}' /etc/shadow 排查空密码账户,一并清理











