46

所以我的问题很简单,给定一个 linux 用户名和密码,我如何测试它是否是一个有效帐户?

4

2 回答 2

74

您可以使用影子文件验证给定用户名的给定密码是否正确。

在大多数现代发行版中,散列密码存储在影子文件 /etc/shadow 中(只能由 root 读取)。以 root 身份,从给定用户的影子文件中拉出该行,如下所示:

cat /etc/shadow | grep username

你会看到这样的东西:

username:$1$TrOIigLp$PUHL00kS5UY3CMVaiC0/g0:15020:0:99999:7:::

在用户名后面有 1 美元。这表明它是一个 MD5 散列。之后是另一个 $,然后(在这种情况下)TrOIigLp 后跟另一个 $。TrOIigLp 是盐。之后是散列密码,使用盐进行散列 - 在本例中为 PUHL00kS5UY3CMVaiC0/g0。

现在,您可以使用 openssl 使用相同的盐对给定密码进行哈希处理,如下所示:

openssl passwd -1 -salt TrOIigLp

在提示时输入给定的密码,openssl 命令应该使用提供的 salt 计算 MD5 哈希,并且它应该与上述影子文件中的完全相同。上述命令中的 -1 用于 MD5 散列。

于 2013-08-03T17:10:51.387 回答
3

如果您担心安全性(您应该担心),则接受的答案表示将明文密码留在~/.bash_history文件中会带来安全风险。考虑到这一点,最好尝试登录,或者从~/.bash_history.

于 2018-10-16T04:06:28.107 回答