众所周知,Linux的用户密码信息是存放在/etc/shadow 文件中的。

# tail -1 /etc/shadow
dev:$6$5Xe8oRqLHgtgCpOZ$IjMRyilbFyNDTlJBVf/qIdPfO8MicnlR248fMQ5fcl5INsMrielTingprLQ9DOBGl0ly6eG6/T4GOD3DYM5in1:19967:0:99999:7:::

/etc/shadow 文件的每一行都以 :号分为 9 个部分,分别是:

  1. 用户名
  2. 加密的口令加密字符串
  3. 上次修改密码时间
  4. 密码最短有效天数
  5. 密码最长有效天数
  6. 密码过期前警告天数
  7. 密码过期后多少天禁用此账号
  8. 账户失效时间
  9. 保留字段

其中第二段加密字符串,又分被 $分为 3 段:

  1. id:字段是加密算法代号,1 为 MD5,5 为 SHA256,6 为 SHA512
  2. salt:混淆明文的一段字符
  3. 密文

以上面的 dev 用户为例,可以看出使用了 SHA512 的加密算法,盐为5Xe8oRqLHgtgCpOZ

可以尝试使用 openssl 对上述要求生成密文:

# openssl passwd -6 -salt 5Xe8oRqLHgtgCpOZ 123456
$6$5Xe8oRqLHgtgCpOZ$IjMRyilbFyNDTlJBVf/qIdPfO8MicnlR248fMQ5fcl5INsMrielTingprLQ9DOBGl0ly6eG6/T4GOD3DYM5in1

可以发现跟/etc/shadow 文件中 dev 用户的口令加密字符串一模一样。亦可使用同样的方法生成加密字符串,去手动修改文件中的密文字符串。