我的问题很直接,给定一个Linux用户名和密码,如何测试它是否是有效的帐户?
您可以使用影子文件来验证给定用户名的密码是否正确。
在大多数现代发行版中,哈希密码存储在影子文件 /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哈希。
openssl passwd -1 -salt TrOIigLp
中的 -1
代表使用 MD5 哈希算法,如果我要改用 SHA-512 哈希算法的话,能否用 openssl
来验证哈希值呢?我需要使用其他命令吗? - xnr_zusername:$6$
。 - Bruno Bronosky如果你关心安全(你应该关心),那么接受的答案会带来安全风险,因为明文密码会留在~/.bash_history
文件中。考虑到这一点,最好尝试登录或从~/.bash_history
中删除此条目。
~/.bash_history
中留下明文密码。然而,尝试登录似乎是更好的方法,因为您可能没有 sudo
访问权限来读取 /etc/shadow
。 - CivFan