如何在Linux中将用户密码显示为明文?


28

我们知道用户的密码/etc/passwd以加密的方式保存在中,因此即使root用户也看不到它们:

jane:x:501:501::/home/jane:/bin/bash
fred:x:502:502::/home/fred:/bin/bash

如上所示,:x:代表密码。

有没有一种方法(可能的配置)以/etc/passwd明文形式保存密码,以便根用户可以看到它们?


10
不,这是一个功能。也没有真正的理由,因为root帐户不需要用户密码即可访问其文件。在什么情况下您想要这个?
HalosGhost 2014年

1
我对此很好奇,为什么系统的管理员(root)看不到其他用户的密码?
user78050 2014年

5
@ user78050,因为root用户没有理由知道其他用户的密码,而允许他们这样做将是主要的安全风险。
David Z

16
因为它违反了业务中最简单的安全性原则:“永远不要以纯文本形式存储密码”。安全性做好后,只有用户才应该知道他们的密码,其他人都不知道。另外,绝对没有理由这样做。我无法想到一种可以帮助root用户知道另一个用户密码的管理情况。
HalosGhost

3
使用MD5“加密方法”,然后使用Rainbow表破解密码。
Cristian Ciupitu 2014年

Answers:


58

另外两个答案正确地告诉了您,这是一个Bad Idea™。但是他们也告诉您这很困难,需要更改大量程序。

这不是真的。很简单 您只需要更改一个或两个配置文件。我指出这一点很重要,因为在登录不受控制的系统时,您应该意识到这一点。这些实际上不会在/etc/passwd或中输入纯文本密码/etc/shadow,而是将其放入另一个文件中。请注意,我尚未测试这些密码,因为我不想以纯文本格式输入密码。

  1. 编辑/etc/pam.d/common-password(捕捉更改的密码)或/etc/pam.d/common-auth(捕捉登录的密码)并添加… pam_exec expose_authtok log=/root/passwords /bin/cat

  2. 编辑这两个文件,然后使用将其从pam_unix切换到pam_userdb crypt=none。另外,您可以只将密码放在通用密码中(也保留pam_unix),以在更改密码时记录密码。

  3. 您可以shadow从pam_unix中删除(以及所有强哈希选项)选项以禁用影子文件,然后返回传统的crypt密码。不是纯文本,而是开膛手约翰会为您解决该问题。

有关更多详细信息,请参阅《 PAM系统管理指南》

您也可以编辑PAM的源代码,或编写自己的模块。您只需要编译PAM(或您的模块),无需其他任何操作。


1
我想将纯文本密码写入/root/passwords
Faheem Mitha 2014年

顺便说一句。非常高兴知道它有多么容易,并且如果担心系统受到损害,我必须去哪里查看。
erik 2014年

8
@erik询问者有权选择他/她认为最有帮助的答案。OP发现“不要这样做!”可能是一件好事。最有帮助的...另外,要明确一点,这不是在受感染或恶意管理的系统上窃取密码的唯一方法。因此,您不能仅仅查看PAM配置来确定您的安全。
derobert

3
这是假设发行版正在使用PAM,而不是所有人都使用。

1
@msw我回答了,因为它显然是一个普遍的信念,即运行带有明文密码的Linux系统很困难(Bobby,值得肯定的是,他的回答已经确定; Anthon的建议仍然很难)。这是一个危险的信念,因为它鼓励重复使用密码。如果我只是发布一个答案“实际上很简单,您编辑一个或两个文件,但我不会告诉您”,那么没人会相信。为什么要听我(当时)票数更高,更彻底的答案?要指出这一点,需要说出如何做到这一点。(尽管它们不是复制和粘贴示例。仍然需要使用Thought。)
derobert 2014年

34

哦,亲爱的,好的,让我们从头开始...

我们知道用户的密码保存在/ etc / passwd中,但是是以加密方式保存的

不,它们已经存储在中/etc/passwd,这是相当早以前的事情。今天,大多数情况下,密码存储在所谓的影子文件中/etc/shadow

但是以加密的方式,所以即使根也看不到它们:

我知道它有时可以互换使用,但是散列不是加密。从本质上讲,加密是可逆的,这意味着您可以将加密的东西转换回其明文形式。散列被设计为以任何方式均不可逆(蛮力除外)。哈希的原始明文形式不应被恢复。

影子文件中的密码存储为散列。

如上所示:x:代表密码

x这种情况下仅适用于传统密码字段的占位符。这x意味着可以在影子文件中找到密码。

有没有一种方法(可能的配置)将密码以明文形式保存在/ etc / passwd中,以便root用户可以看到它们?

是的,这确实是可能的,但出于某些原因并不是一个好主意。德罗伯特的答案解释了一种相当简单的方法

但是,为什么这不是一个好主意呢?好吧,原因很简单但很重要:安全性。我建议阅读以下问题:

但总而言之,假定以下条件:公司中有一台服务器,所有用户帐户均由其密码保护,这些用户帐户中的数据使用相同的密码加密。来自外部的黑客可以访问服务器,但是他们无法访问任何重要数据,因为这些数据仍在用户帐户中进行了加密。

现在假设密码将以纯文本存储。破解者会突然访问所有内容,因为可以读取密码。但是,如果将它们存储为散列值,那么除了拥有大量资源进行暴力攻击的人以外,对于几乎任何人来说,它们几乎都是无用的。


2
在OP关于加密和哈希的辩护中,来自glibc 的crypt手册页说:«如果salt是一个以以下字符"$id$"开头的字符串,然后是一个以"$": 结尾的字符串,$id$salt$encrypted 则代替使用DES机器,id确定使用的加密方法,然后确定如何解释字符串的其余部分»。
Cristian Ciupitu 2014年

1
有趣,但没有像derobert的答案那样回答主要问题。
erik

6
@erik有时,即使在技术上可行的情况下,对问题的正确答案是“不要这样做”。这是那些时代之一。
吉尔斯(Gilles)'所以

1
我建议更改此行:“不,除了更改许多应用程序及其工作方式之外,没有其他方法。” 这给人的印象是不容易(或者至少容易做功能上等效的事情)。
derobert

2
@Bobby,这是一个很好的回答,但不是一个很好的答案。要使其成为一个很好的答案,您应该更改有关它“不容易实现”的部分,因为正如德罗伯特的答案所示,它显然是这样。
迈克尔·多斯特

10

首先,加密的密码不在/etc/passwd,但密码在/etc/shadow。原因之一是/etc/passwd可以公开读取(例如,您可以找到其他用户的GECOS字段信息),并且尤其是使用较旧的加密方案时,可能会允许对加密密码进行暴力攻击。

仅以纯文本形式存储密码是不必要的,并且需要更新密码程序和读取/etc/shadow信息的库以检查有效密码。然后,您必须希望所有实用程序都使用共享库来访问该信息,而不是与无法理解纯文本密码存储的内容静态链接。

如果这是安装程序配置中的一个选项,那么总会有愚蠢的人不恰当地打开它。当他们仍在CRT屏幕上工作并进行广播时,可以在查看信息时很容易地从建筑物外拾取它。

除此之外,人们倾向于在多个系统上使用相同或相似的密码,因此对于任何可读的密码来说,这并不是一个好主意。由于某些系统管理员可以在其他系统上重试它们,因此他知道用户拥有一个帐户。

必须有更多有趣的东西,可以在您的系统上研究的工作方式。


3
/etc/shadow不存储加密的密码,而是存储密码哈希。是的,该函数被称为crypt,并且手册页上显示“已加密”,但是如果您将一条鱼称为自行车,那它就不会运转。请注意,有可能以/etc/shadow其他格式存储密码而无需重新编译任何程序(至少在Linux和Solaris上):身份验证方法始终动态链接。将密码存储为纯文本将是一个糟糕的主意,但是可以通过一些工作来实现
吉尔斯(Gilles)'所以

@gilles我只是重用了OPs术语,但是您说得对,哈希是一个更合适的术语。
2014年

3

(为什么这样做不是一个好主意)的基本原因是,任何用户(root,admin或其他用户)都不能访问他人的用户密码。

仅仅是因为密码是一种身份验证手段。如果我知道其他用户的密码,则知道他们的凭据(用户名+密码),因此我可以以该用户身份登录,以模拟他(或她或她)。

我以该用户身份登录时执行的任何操作,将由其他用户负责。这不是身份验证应该如何工作的方式。

这些操作可能是灾难性的,例如删除一大堆重要文件,擦除硬盘,擦除备份,关闭核电计划等。

或者只是非法的。想象一下一个银行机构,我(管理员)可以访问所有密码。使用收银员的密码,我可以命令从主席的银行帐户向擦窗器的银行帐户转移一百万美元。然后,使用收银员的高级密码批准交易。然后批准从窗户清洁工的帐户到我自己的离岸银行帐户的支票。

然后我在巴哈马长假...


在这种情况下,密码的散列和单独的影子文件的使用可以看作是执行此规则的一种手段(任何用户都不能假冒其他用户)。

正如@Miral的评论*一样,有一个例外,su它在允许模拟时(并且会抛出上面的参数),同时也保留了其使用记录(因此它将规则更改为“只有管理员可以模拟其他人,但管理员可以日志保存”)。

*银行的例子可能不是最好的。在安全至关重要的任何环境中,通常都需要更多的身份验证和授权方式,而不仅仅是一个密码。


这种说法的一个缺陷是,root用户可以在任何情况下模拟系统上的任何其他用户,而无需知道其密码。一样容易su otheruser
Miral

@Miral你是对的,我没有考虑这一点。并且尽管su记录了使用情况,但su不会保留用户模仿另一个用户时实际执行的操作的记录。恶意根总是可以更改日志,以隐藏对未来调查人员的操作。
ypercubeᵀᴹ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.