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

smi*_*mit 19 linux passwords hash crypt username

所以我的问题是直接给出一个linux用户名和密码如何测试它是否是一个有效的帐户?

mti*_*935 40

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

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

cat /etc/shadow | grep username
Run Code Online (Sandbox Code Playgroud)

你会看到这样的东西:

username:$1$TrOIigLp$PUHL00kS5UY3CMVaiC0/g0:15020:0:99999:7:::
Run Code Online (Sandbox Code Playgroud)

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

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

openssl passwd -1 -salt TrOIigLp
Run Code Online (Sandbox Code Playgroud)

在提示时输入给定的密码,openssl命令应使用提供的salt计算MD5哈希值,并且它应与shadow文件中的上述内容完全相同.上述命令中的-1表示MD5哈希.

  • 我有'用户名:$ 6 $` (8认同)
  • `getent shadow $ user`更短...... (4认同)
  • 嗨,`openssl passwd -1 -salt TrOIigLp`中的`-1`代表MD5哈希,如果有的话,SHA-512哈希是否有可能用`openssl`检查哈希?我是否要使用其他命令? (3认同)
  • 见 http://unix.stackexchange.com/questions/52108/how-to-create-sha512-password-hashes-on-command-line (2认同)
  • @BrunoBronosky` $ 6 $`表示sha512哈希值.有关如何生成/检查哈希的信息,请参阅[answer](https://unix.stackexchange.com/a/158402/10822). (2认同)