要让Linux系统真正使用SHA-512存储密码,必须同步完成三件事:PAM配置生效(如authconfig或修改common-password)、/etc/login.defs中ENCRYPT_METHOD设为SHA512、每个用户重设一次密码以生成$6$开头的哈希;缺一不可。

要让 Linux 系统真正用强哈希算法(如 SHA-512)存储用户口令,光改一两个配置文件远远不够。关键在于三件事同步到位:PAM 密码策略生效、系统级默认加密方式对齐、每个用户必须重设一次密码。缺一不可,否则 /etc/shadow 里还是 $1$(MD5)或 $5$(SHA-256)。
确认当前实际生效的哈希算法
别猜,直接查:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- RHEL/CentOS/Alpine 系统运行:
authconfig --test | grep hashing,看输出是不是password hashing algorithm is sha512 - 所有系统都检查:
grep "^ENCRYPT_METHOD" /etc/login.defs,应为ENCRYPT_METHOD SHA512(注意大小写,sha512或SHA-512无效) - Debian/Ubuntu 还需检查:
grep "pam_unix.so" /etc/pam.d/common-password,确认该行含sha512且未被注释
分发行版执行核心配置
RHEL/CentOS/Fedora/Alpine 等:
运行命令一次性更新:authconfig --passalgo=sha512 --update(注意是 sha512,不是 SHA512)
Debian/Ubuntu 系统:
编辑 /etc/pam.d/common-password,找到类似这行:password [success=1 default=ignore] pam_unix.so md5 shadow nullok
改为:password [success=1 default=ignore] pam_unix.so sha512 shadow nullok rounds=65536
rounds=65536 不可省略——它决定暴力破解成本,省掉就退回到默认 5000 轮,安全性下降超 13 倍。
所有发行版都要补一步:
确保 /etc/login.defs 中有且仅有一行:ENCRYPT_METHOD SHA512
如果被注释(开头有 #)或写成其他值,手动修正并保存。
必须重设密码才生成新哈希
配置只是“告诉系统以后怎么存”,不会自动重算旧密码。只有用户调用 passwd 改密时,PAM 才按新规则生成 $6$ 开头的 SHA-512 哈希。
- 普通用户:直接运行
passwd,按提示输入当前密码和新密码 - 管理员为他人设置:
sudo passwd username(无需原密码) - 强制 root 下次登录改密:
sudo chage -d 0 root - 服务账户(如
www-data、postgres)也要单独处理,否则它们的哈希永远不更新
验证是否真生效
改完密码后立刻验证,这是唯一靠谱的方式:
- 执行:
sudo grep "^$(whoami):" /etc/shadow | cut -d: -f2 - 输出应以
$6$开头,例如:$6$abc123$xyz789... - 如果还是
$1$、$5$或空,说明某处配置漏了、拼写错了,或者用户根本没重设密码

















