【问题标题】:Given a linux username and a password how can I test if it is a valid account? [closed]给定一个 linux 用户名和密码,我如何测试它是否是有效帐户? [关闭]
【发布时间】:2013-08-04 19:09:42
【问题描述】:

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

【问题讨论】:

标签: linux hash passwords crypt


【解决方案1】:

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

在大多数现代发行版中,散列密码存储在影子文件 /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 散列。

【讨论】:

  • getent shadow $user 更短……
  • 嗨,openssl passwd -1 -salt TrOIigLp 中的 -1 代表 MD5 散列,如果我有 SHA-512 散列,是否可以使用 openssl 检查散列?我要改用另一个命令吗?
  • 我的有username:$6$
  • @BrunoBronosky $6$ 表示 sha512 哈希。请参阅此answer 了解如何生成/检查哈希。
【解决方案2】:

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

【讨论】:

  • 接受的答案不会在~/.bash_history 中留下明文密码。但是,尝试登录似乎是更好的方法,因为您可能没有sudo 访问权限来阅读/etc/shadow
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 2022-12-25
相关资源
最近更新 更多