手动设置 MD5 哈希后用户无法登录

手动设置 MD5 哈希后用户无法登录

我正在使用 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()函数将为您生成完整的影子文件字符串。

相关内容