如果我们有 root 访问权限,我们能知道其他用户的密码吗?

如果我们有 root 访问权限,我们能知道其他用户的密码吗?

如果一个人拥有特定 RHEL 计算机的 root 访问权限,他们是否能够检索其他用户的密码?

答案1

TL;DR:不,密码存储为哈希值(通常)无法恢复。

Linux 不在任何地方存储纯文本密码默认情况下。它们通过各种算法进行散列或加密。所以,一般来说,不,这对于存储的数据是不可能的。

如果您的密码存储在/etc/passwd数据库以外的其他位置,则它们的存储方式可能允许这样做。 htpasswd文件可以包含弱加密的密码,而其他应用程序可能出于各种(通常是不良的)原因存储较弱的哈希值或纯文本密码。

此外,由于各种原因,用户配置文件可能包含未加密的密码或弱保护的密码 - fetchmail 从其他服务抓取内容,.netrc或者简单的自动化事物可能包含密码。

如果使用较旧的弱算法(3DES、MD5)对密码进行散列或加密,则可以相当有效/廉价地计算出密码是什么 - 尽管是通过攻击数据而不是仅仅反转转换。 (例如:诸如此类的事情http://project-rainbowcrack.com/或者http://www.openwall.com/john/

由于您是 root,因此还可以在另一个级别攻击用户密码 - 将登录二进制文件、sudo 或 PAM 的一部分等替换为在输入密码时捕获密码的内容。

因此,具体来说,不是,但总的来说,拥有 root 访问权限确实可以更轻松地通过各种侧面渠道获取用户详细信息。

答案2

与这里的其他一些答案相反,我想说,对于这个问题和许多其他以“如果你有根”结尾的问题,简单的答案是“是”。

基本上,root 可以在机器上执行系统本身可以执行的任何操作。系统可以接受您的密码,因此 root 可以通过足够的努力接受您的密码,或者用他自己的密码代替您的密码。更重要的是,他可以简单地更改您的密码,或者成为您。

具体来说,密码通常是加密的。这通常是某种所谓的“单向”算法,它生成一个可用于检查密码的数字(散列),但通常不会反转该数字并再次取回密码。因此,这不仅仅是读取文件来获取某人的密码的问题。

也就是说,您可以读取他们的 shell 历史记录和登录历史记录,他们很可能在某个时候输入了密码而不是用户名,或者在 shell 中输入了密码而不是在密码提示符处输入了密码。在这种情况下,它将是纯文本。这在基于文本的终端上非常常见,据我所知没有好的解决方案。

然而,即使抛开这个问题,“单向”加密也不是真正的一种方式。有很多工具可以检查密码短语的多种组合,并使用相同的单向过程对它们进行加密,直到找到匹配的组合。然后他们知道将获得访问权限的密码(尽管作为 root,他们已经在那台机器上具有访问权限)。

更糟糕的是,还有彩虹表,它们是上述过程的预先计算的答案:人们已经根据给定的加密密码生成了原始密码。使用这些,这是一个简单的查找 - 不需要耗时的破解尝试。

再次强调,根级访问是需要保护的。一旦受到损害,整个机器及其上的所有东西都会受到损害。是时候重新开始了,包括通知所有用户,您的企业不再值得信任来保护他们的隐私。是的,这可能意味着破产。

答案3

如果有的话root,您可以运行密码破解程序/etc/shadow(假设使用本地密码,而不是 LDAP 或 Kerberos 等)。如果他们选择好的密码并且系统配置为使用强密码散列,这可能不会有效。但系统密码并不是以明文形式存储的;密码甚至不能直接获得root

答案4

所有密码都存储在/etc/shadow文件中。您可以使用 root 访问权限打开此文件,并查看hash value每个用户(甚至 root 用户)的这些密码。

除非您有任何类型的密码解密软件,否则您无法将这些哈希值转换回正常文本。

但是,如果您有权访问 root 用户,则可以使用以下命令更改任何普通用户的密码并访问他们的帐户。

root@localhost$ passwd pradeep

这将询问您要为 user 设置的新密码pradeep。这样您就可以更改 pradeep 的密码。

现在您可以通过以下方式从他的帐户访问:

root@localhost$ su pradeep

这将导致切换到 pradeep 用户,您将得到如下终端:

pradeep@localhost$

相关内容