必须修改/etc/pam.d/passwd中pam_unix.so行,将md5替换为sha512并添加rounds=65536;同步设置/etc/default/passwd中CRYPT=sha512;所有用户须重设密码才能生成$6$开头的SHA-512哈希。

修改 /etc/pam.d/passwd 启用 SHA-512 密码哈希
Linux 系统默认仍可能用 md5 或 sha256 存储密码,要强制升级为 sha512,关键在 PAM 配置。不改这里,后续所有操作都无效。
- 打开
/etc/pam.d/passwd,找到类似password required pam_unix.so md5 shadow nullok的行 - 把其中的
md5替换为sha512,并**必须加上rounds=65536**(不加则退化为默认 5000 轮,安全性大打折扣) - 最终应为:
password required pam_unix.so sha512 shadow nullok rounds=65536 - 注意:该行不能被注释,且优先级高于其他
pam_unix.so行;若存在多条,只保留这一条生效的
同步更新 /etc/default/passwd 中的默认加密算法
这个文件控制 passwd 命令新建用户或调用 useradd 时的默认行为,和 PAM 是两套机制,必须双保险。
- 编辑
/etc/default/passwd,找到CRYPT=这一行 - 将
CRYPT=md5(或des、sha256)改为:CRYPT=sha512 - 该值只影响新用户创建时的初始密码哈希方式,对已有用户无作用——已有用户密码仍需重设才生效
必须重设密码才能触发 SHA-512 重新哈希
配置改完 ≠ 密码立刻变 SHA-512。系统不会主动批量重算旧密码,必须由用户显式修改一次,PAM 才会按新规则生成 $ 开头的哈希值。
- 普通用户执行:
passwd(输当前密码后设新密码) - 管理员为他人重设:
sudo passwd username - 验证是否成功:查看
/etc/shadow中对应行第二字段,开头是$6$即为 SHA-512(如$6$salt$hash...) - 常见错误:改完配置但没重设密码,结果
/etc/shadow里还是$1$(MD5)或$5$(SHA-256),误以为配置失败
rounds 参数不是可选项,而是安全底线
rounds=65536 不是“锦上添花”,它直接决定暴力破解成本。省略它,攻击者穷举速度提升 13 倍以上(65536 ÷ 5000 ≈ 13)。
- 现代 CPU 在 1 秒内完成单次 SHA-512+65536 轮计算毫无压力,不影响日常登录体验
- 但对攻击者而言,每次尝试都要跑满 65536 轮——这正是延缓离线爆破的核心手段
- 低于 10000 的 rounds 值在实战中已不被推荐;65536 是当前主流发行版(如 Ubuntu 22.04+、RHEL 8+)默认值
rounds、改 CRYPT=sha512、让每个用户至少改一次密码。少一个,/etc/shadow 里就还藏着老算法。










