必须同时修改pam配置、设置系统默认加密方式、让用户重设密码;pam行需含sha512和rounds=65536,/etc/login.defs或/etc/default/passwd设encrypt_method sha512或crypt=sha512,重设密码后shadow中字段以$6$开头才生效。

要把 Linux 系统默认密码哈希算法升级为 SHA-512,必须同时完成三件事:改 PAM 密码模块配置、设全局默认加密方式、让每个用户重设一次密码。少一步,/etc/shadow 里就还是旧算法。
修改 PAM 密码模块配置
编辑 /etc/pam.d/passwd(RHEL/CentOS)或 /etc/pam.d/common-password(Debian/Ubuntu):
- 找到含
pam_unix.so的 password 行,例如password [success=1 default=ignore] pam_unix.so md5 shadow nullok - 把
md5换成sha512,并必须加上rounds=65536 - 确保该行未被注释,且是唯一生效的
pam_unix.so密码行
最终应类似:password required pam_unix.so sha512 shadow nullok rounds=65536
漏掉 rounds=65536 会退回到仅 5000 轮,暴力破解成本下降超 13 倍。
设置系统级默认加密方式
编辑 /etc/default/passwd 或 /etc/login.defs:
- 在
/etc/default/passwd中设CRYPT=sha512(RHEL 系常用) - 在
/etc/login.defs中确保有未注释的ENCRYPT_METHOD SHA512 - RHEL/CentOS 还可直接运行:
authconfig --passalgo=sha512 --update(注意大小写)
这个设置只影响新创建用户,对已有账户无效。
所有用户必须重设密码
配置改完不会自动更新旧哈希,必须触发一次密码重算:
- 普通用户执行
passwd,输入当前密码后设新密码 - 管理员为他人重设:
sudo passwd username - 强制用户下次登录改密:
sudo chage -d 0 username(包括 root)
改完立刻验证:sudo grep "^$USER:" /etc/shadow | cut -d: -f2,输出以 $6$ 开头才表示成功。
验证是否真生效
别只信配置文件,最可靠的方式是实操加检查:
- 自己改一次密码,再查
/etc/shadow对应字段第二段 - 看到
$6$表示 SHA-512;$1$是 MD5,$5$是 SHA-256,说明没生效 - 特别留意服务账户(如
www-data、postgres),它们不登录就不会更新
不复杂但容易忽略。











