必须同步完成三件事:pam配置启用sha-512并设rounds=65536、/etc/login.defs中encrypt_method设为sha512、每个用户重设密码;缺一则/etc/shadow仍为$1$或$5$。

要让Linux系统真正用SHA-512及以上强度的算法存储密码,光改一个配置文件没用。必须三件事同时到位:PAM模块明确启用SHA-512并设足够轮数、系统级默认加密方式对齐、每个用户至少重设一次密码。少一个,/etc/shadow里就还是$1$(MD5)或$5$(SHA-256)。
确认当前实际生效的哈希算法
别靠猜测或发行版文档判断,直接查系统当前行为:
- 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且未被注释
按发行版完成核心PAM与系统级配置
不同发行版主路径不同,混用会导致策略冲突:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
-
RHEL/CentOS/Fedora/Alpine:运行命令一键生效:
authconfig --passalgo=sha512 --update(注意是小写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不可省略——它把暴力破解成本提升13倍以上,省掉就退回到默认5000轮 -
所有发行版统一补漏:确保
/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 passwd username,否则其哈希永远不更新
验证是否真正生效
最可靠的方式是改完密码后立刻检查 /etc/shadow:
- 执行:
sudo grep "^$(whoami):" /etc/shadow | cut -d: -f2 - 输出必须以
$6$开头,例如:$6$saltstring$hashvalue... - 如果仍是
$1$、$5$或为空,说明:配置某处拼写错误、rounds=65536漏写、某条PAM规则被跳过,或该用户根本没重设密码
不复杂但容易忽略:三件事同步做,缺一不可。










