我遇到了一个奇怪的问题,即我的服务器中的一个用户能够使用前八个字符与用户实际密码相同的任何密码登录。例如,如果用户的实际密码是abcdefgh
login withabcdefgh
作为密码,以及abcdefgh2002
orabcdefghijkl
成功,但不是 with 2001abcdefgh
。我正在使用带有影子文件的 PAM。所关注的用户在 /etc/shadow 文件中有他的密码哈希,但据我所知,它没有任何盐。
我用自己的账户试了一下,但没有成功登录。
该用户有一个古老的crypt
哈希。它是加盐的,但它只使用密码的前八个字符。
您可以通过查看哈希来验证这一点,/etc/shadow
如果它没有$n$
以指示哈希方法的标记开头,那么它使用的是原始的 unixcrypt
哈希,它只使用前八个字符。有关crypt(3)
更多信息,请参阅。
如果他更改密码,即使更改为相同的密码,它也会更新为使用系统上设置为默认值的任何哈希值,这通常是更现代和更安全的东西,例如SHA512
.
顺便说一句,在那些旧式散列中,盐只是散列的前两个字符,这就是为什么你认为没有一个。较新的哈希看起来$id$salt$encrypted
可能是您习惯的,但旧的只有 13 个字符,前两个是盐。