众所周知,Linux的用户密码信息是存放在/etc/shadow 文件中的。
# tail -1 /etc/shadow
dev:$6$5Xe8oRqLHgtgCpOZ$IjMRyilbFyNDTlJBVf/qIdPfO8MicnlR248fMQ5fcl5INsMrielTingprLQ9DOBGl0ly6eG6/T4GOD3DYM5in1:19967:0:99999:7:::
/etc/shadow 文件的每一行都以 :
号分为 9 个部分,分别是:
- 用户名
- 加密的口令加密字符串
- 上次修改密码时间
- 密码最短有效天数
- 密码最长有效天数
- 密码过期前警告天数
- 密码过期后多少天禁用此账号
- 账户失效时间
- 保留字段
其中第二段加密字符串,又分被 $
分为 3 段:
- id:字段是加密算法代号,1 为 MD5,5 为 SHA256,6 为 SHA512
- salt:混淆明文的一段字符
- 密文
以上面的 dev 用户为例,可以看出使用了 SHA512 的加密算法,盐为5Xe8oRqLHgtgCpOZ
。
可以尝试使用 openssl 对上述要求生成密文:
# openssl passwd -6 -salt 5Xe8oRqLHgtgCpOZ 123456
$6$5Xe8oRqLHgtgCpOZ$IjMRyilbFyNDTlJBVf/qIdPfO8MicnlR248fMQ5fcl5INsMrielTingprLQ9DOBGl0ly6eG6/T4GOD3DYM5in1
可以发现跟/etc/shadow 文件中 dev 用户的口令加密字符串一模一样。亦可使用同样的方法生成加密字符串,去手动修改文件中的密文字符串。