Answers:
TL; DR:否,密码存储为哈希(通常无法恢复)。
Linux 默认情况下不会在任何地方存储纯文本密码。通过各种算法对它们进行哈希处理或加密。因此,通常,不,这对于存储的数据是不可能的。
如果您将密码存储在/etc/passwd
数据库以外的其他位置,则可以通过允许的方式存储密码。 htpasswd
文件中可能包含较弱的加密密码,而其他应用程序可能出于各种(通常是错误的)原因而存储较弱的哈希值或纯文本密码。
此外,由于各种原因,用户配置文件可能包含未加密的密码或受保护程度不高的密码-fetchmail从其他服务获取内容.netrc
,或者简单的自动化操作可能包括该密码。
如果使用较旧的弱算法(3DES,MD5)对密码进行哈希处理或加密,则可以合理有效/廉价地计算出密码的含义-尽管可以通过攻击数据而不是仅仅逆转转换来进行。(例如:http : //project-rainbowcrack.com/或http://www.openwall.com/john/之类的东西)
由于您是root用户,因此也有可能在另一个级别上攻击用户密码-替换登录二进制文件,sudo或PAM的一部分等,并使用在输入密码时会捕获密码的方式。
因此,特别是,没有,但总的来说,具有root用户访问权限确实可以更轻松地通过各种辅助渠道获取用户详细信息。
与这里的其他答案相反,我想对这个问题以及其他许多以“如果你有根”为结尾的问题的简单答案是“是”。
基本上,root可以在计算机上执行系统本身可以执行的任何操作。系统可以接受您的密码,因此root可以通过足够的努力来接受您的密码,或者由您自己的密码代替您的密码。更重要的是,他可以简单地更改您的密码或成为您。
具体来说,密码通常是加密的。这通常是某种所谓的“单向”算法,该算法会生成一个数字(散列),该数字可用于检查密码,但通常不会反转该数字并再次获取密码。因此,仅读取文件来获取某人的密码就不是问题。
就是说,您可以阅读他们的shell历史记录和登录历史记录,他们很可能在某个时候键入了密码而不是用户名,或者在shell中而不是在密码提示符下键入了密码。在这种情况下,它将是纯文本。在基于文本的终端上,这是令人不安的普遍现象,没有我知道的好的解决方案。
但是,即使撇开该问题,“单向”加密也不是真正的一种方法。周围有很多工具可以使用多种密码短语组合,并通过相同的单向过程对其进行加密,直到找到匹配的短语。然后,他们知道将获得访问权限的密码(尽管以root身份,他们已经在该计算机上具有访问权限)。
更糟糕的是,有彩虹表是对上述过程的预先计算的答案:人们已经生成了来自给定加密密码的原始密码。使用它们,这是一个简单的查找-无需耗时的破解尝试。
同样,根级访问是要保护的东西。受到破坏后,整个计算机及其上的所有东西都将受到破坏。现在是时候重新开始了,包括通知您的所有用户您的业务不再受信任可以保护他们的隐私。而且,是的,这可能意味着要倒闭。
所有密码都存储在/etc/shadow
文件中。您可以使用root用户访问权限打开此文件,并查看hash value
每个用户(甚至root用户)的密码。
除非您拥有任何类型的密码解密软件,否则您无法将这些哈希值转换回普通文本。
但是,即使您有权访问root用户,也可以使用以下命令更改任何普通用户的密码并访问其帐户。
root@localhost$ passwd pradeep
这将要求您输入要为user设置的新密码pradeep
。这样,您可以将passwd更改为Pradeep。
现在,您可以通过以下方式从他的帐户访问:
root@localhost$ su pradeep
这将导致切换到高级用户,您将获得一个如下所示的终端:
pradeep@localhost$