![手动设置 MD5 哈希后用户无法登录](https://linux22.com/image/615290/%E6%89%8B%E5%8A%A8%E8%AE%BE%E7%BD%AE%20MD5%20%E5%93%88%E5%B8%8C%E5%90%8E%E7%94%A8%E6%88%B7%E6%97%A0%E6%B3%95%E7%99%BB%E5%BD%95.png)
我正在使用 Puppet 来管理用户密码。(是的,我知道 LDAP 更好,但上级告诉我要使用 Puppet。)我有这个类,当以 root 身份运行时,它会将 bob 的密码更改为“bobs_new_password”。理想情况下,当 bob 运行它时,它应该会提示输入新密码,但我应该能够稍后添加该功能。当我以 root 身份运行它时puppet agent --test
,它说一切顺利并通知我新的哈希值,所以我知道它已在文件中正确设置/etc/shadow
。现在,我只在虚拟机上使用测试用户,所以我不担心通知哈希的安全风险;该行显然会被从代码的工作版本中删除。到目前为止,我拥有的是:
class pwdchange ($newpwd = 'bobs_new_password', $targetuser = "bob") {
$temp = inline_template("<%= Digest::MD5.digest(scope.lookupvar('newpwd'))%>")
$hashtypeidentifier = '$1$' #'$1' for MD5, '$6' for sha512.
user {"$targetuser":
ensure => present,
password => "${hashtypeidentifier}${temp}",
}
notify {"${temp}":}
}
但是,当我以 bob 的身份通过 ssh 进入虚拟机时,旧密码和新密码均不被接受。我做错了什么?为什么不接受任何密码?我该怎么做才能解决这个问题?
答案1
影子文件中的 MD5 密码的格式为$1$salt$hash
,我在您的代码中看不到任何盐。
也可以看看如何为 Ubuntu 10.04 生成与 /etc/shadow 兼容的密码?
另请参阅 Ruby 的crypt()
函数将为您生成完整的影子文件字符串。