密码存储在哪里?

密码存储在哪里?

对于可以登录的用户,如何确定用户密码存储在哪里?我知道系统使用 LDAP 来存储用户(用户名、主路径等),但它不包含任何类型的密码。我可以访问已配置的机器,那么如何确定密码在哪里?(哪个配置文件?)

答案1

密码本身不被存储。它们由一个函数转换,并hash存储由此产生的值,该值称为 。

如果您登录,则会对您的输入执行相同的功能,并将生成的值与文件中存储的值进行比较/etc/shadow

该函数很难被逆向。因此,使用 /etc/shadow 中的值,您无法计算原始密码,并且其中的密钥对登录没有帮助 - 您需要密码。

使用暴力破解,您可以尝试生成这样的密码,对于诸如等常见名称123456, password, asdf, secret, 1111,影子值已经众所周知,并存储在所谓的中rainbow-tables

为了防止彩虹表攻击,密码函数可以使用salt,它会影响结果,这意味着每个密码都使用不同的盐,存储在密码哈希字符串的前两个字节中(感谢 psusi 纠正了我),这样每个密码都需要一个不同的彩虹表,这不是很实用——生成它们需要太长时间,而且成本高昂。

我不确定 ubuntu 是否使用 salt。我们可以等待有人向我们解释,或者您可以在两台机器上生成具有相同密码的相同用户,然后比较 /etc/shadow 中的值。

答案2

密码(或更好的哈希值)很可能存储在 LDAP 服务器中。“很可能”意味着您可以有一个非常奇怪的设置,它们不存在。LDAP 配置非常灵活,但这也意味着,如果不检查配置文件,就无法清楚地回答在您的情况下如何完成。您可能已经查看了/etc/ldap.conf客户端上的配置详细信息?

LDAP 身份验证的一个可能设置如下:客户端从登录中获取用户名和密码,并执行绑定将此信息发送到 LDAP 服务器。LDAP 服务器验证用户名和密码并返回成功或失败。在此设置中,客户端永远不会看到来自 LDAP 服务器的存储密码哈希。

您知道使用的 LDAP 服务器类型吗?您是否可以看到散列的用户密码取决于 LDAP 服务器的设置。请参阅示例http://www.faqs.org/docs/securing/chap26sec213.html您可以在 OpenLDAP 服务器上配置什么。

“user-unknown” 给出的关于密码哈希的答案是正确的,只是哈希值不是存储在/etc/shadowLDAP 服务器中,而是存储在 LDAP 服务器中。哈希本身也可能由 LDAP 服务器而不是客户端执行。

答案3

您是否尝试过
- phpldapadmin?
- ldapsearch -LLL -x -b "dc=your,dc=domain" uid=*(或用用户名替换 *,可能是 cn 而不是 uid)
如果密码存储在 ldap 中,则您应该使用此方法查看它们。如果

计算机是域控制器,可能已安装 smbldap-tools,因此您只需使用 smbldap-passwd 用户名重置密码即可。

您可能还想检查 pam.d 配置(/etc/pam.d/common-*)以找出您的计算机正在使用的登录机制。

相关内容