给定linux用户名和密码,如何测试它是否是有效帐户?

给定linux用户名和密码,如何测试它是否是有效帐户?,linux,hash,passwords,crypt,Linux,Hash,Passwords,Crypt,因此,我的问题是,如果给定linux用户名和密码,我如何测试它是否是有效帐户?您可以使用影子文件验证给定密码对于给定用户名是否正确 在大多数现代发行版中,哈希密码存储在shadow文件/etc/shadow中(只有root用户才能读取)。作为root用户,从给定用户的阴影文件中提取行,如下所示: cat /etc/shadow | grep username 您将看到如下内容: username:$1$TrOIigLp$PUHL00kS5UY3CMVaiC0/g0:15020:0:99999:

因此,我的问题是,如果给定linux用户名和密码,我如何测试它是否是有效帐户?

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

在大多数现代发行版中,哈希密码存储在shadow文件/etc/shadow中(只有root用户才能读取)。作为root用户,从给定用户的阴影文件中提取行,如下所示:

cat /etc/shadow | grep username
您将看到如下内容:

username:$1$TrOIigLp$PUHL00kS5UY3CMVaiC0/g0:15020:0:99999:7:::
用户名后面是$1。这表示它是一个MD5散列。在这之后还有一个$,然后(在本例中)TrOIigLp后跟另一个$。TrOIigLp是盐。之后是散列密码,它是使用salt进行散列的-在本例中是PUHL00kS5UY3CMVaiC0/g0

现在,您可以使用openssl使用相同的salt对给定密码进行散列,如下所示:

openssl passwd -1 -salt TrOIigLp

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

如果您担心安全性(您应该担心),则接受的答案表示存在安全风险,将明文密码保留在
~/.bash_history
文件中。考虑到这一点,最好尝试登录,或者从
~/.bash\u历史记录中删除此条目。您可以尝试使用它们登录。如果你在,那么这个组合是有效的。下面是一个C语言函数的例子,如何检查用户名和密码
getent shadow$user
更短…嗨,
openssl passwd-1-salt TrOIigLp
中的
-1
代表MD5哈希,如果我有,SHA-512哈希是否可以使用
openssl
检查哈希?我必须使用另一个命令吗?请看我的has
用户名:$6$
@BrunoBronosky
$6$
表示sha512哈希。有关如何生成/检查散列的信息,请参见此。接受的答案不会在
~/.bash\u历史记录中留下明文密码。但是,尝试登录似乎是更好的方式,因为您可能没有
sudo
访问权限来读取
/etc/shadow