给定一个Linux用户名和密码,如何测试其是否是有效帐户?

55

我的问题很直接,给定一个Linux用户名和密码,如何测试它是否是有效的帐户?


4
您尝试使用这些组合登录。如果您成功登录,则该组合是有效的。 - user529758
这是一个C语言函数的示例,用于检查用户名和密码。https://dev59.com/JHTYa4cB1Zd3GeqPrSZP#63173069 - obezyan
2个回答

90

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

在大多数现代发行版中,哈希密码存储在影子文件 /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命令应使用提供的盐计算MD5哈希值,并且它应与来自shadow文件的上述哈希值完全相同。 上面命令中的“-1”用于MD5哈希。


9
"getent shadow $user" 这个命令甚至更短... - ypid
4
嗨,openssl passwd -1 -salt TrOIigLp 中的 -1 代表使用 MD5 哈希算法,如果我要改用 SHA-512 哈希算法的话,能否用 openssl 来验证哈希值呢?我需要使用其他命令吗? - xnr_z
2
请见http://unix.stackexchange.com/questions/52108/how-to-create-sha512-password-hashes-on-command-line - mti2935
16
我的用户名是 username:$6$ - Bruno Bronosky
8
@BrunoBronosky $6$ 表示一个 sha512 哈希。请查看此答案以了解如何生成/检查哈希。 - Dario Seidl
显示剩余8条评论

3

如果你关心安全(你应该关心),那么接受的答案会带来安全风险,因为明文密码会留在~/.bash_history文件中。考虑到这一点,最好尝试登录或从~/.bash_history中删除此条目。


5
接受的答案不会在 ~/.bash_history 中留下明文密码。然而,尝试登录似乎是更好的方法,因为您可能没有 sudo 访问权限来读取 /etc/shadow - CivFan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接