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

mon*_*onu 26 users password rhel

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

Dan*_*man 41

TL;DR:不,密码以散列形式存储,(通常)无法恢复。

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

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

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

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

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

所以,具体来说,不,但一般来说,拥有 root 访问权限确实可以更容易地通过各种侧渠道获取用户详细信息。

  • 这在很大程度上是一个很好的答案,但是 3DES 和 MD5 实际上并不比其他算法弱得多。蛮力仍然是从散列中找到密码的唯一方法([彩虹表](http://security.stackexchange.com/questions/379/what-are-rainbow-tables-and-how-are-they-使用)是一种加速任何算法的蛮力方法的方法,而不是 MD5 的弱点)。密码哈希方法的改进之处在于它很慢并且使用了足够长的盐。 (2认同)

小智 15

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

基本上,root 可以在机器上做系统本身可以做的任何事情。系统可以接受你的密码,所以 root 可以接受你的密码,或者他自己的密码来代替你的密码,只要付出足够的努力。更重要的是,他可以简单地改变你的密码,或者成为你。

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

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

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

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

同样,根级访问是需要保护的。由于受到损害,整个机器及其上的一切都受到损害。是时候重新开始了,包括通知您的所有用户,您的企业不能再被信任来保护他们的隐私。而且,是的,这可能意味着倒闭。


gee*_*aur 8

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


pra*_*tri 5

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

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

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

root@localhost$ passwd pradeep

这将询问您要为 user 设置的新密码pradeep。通过这种方式,您可以更改 pradeep 的密码。

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

root@localhost$ su pradeep

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

pradeep@localhost$