我们知道用户的密码保存在 中/etc/passwd
,但是以加密方式保存的,所以即使是 root 也看不到它们:
jane:x:501:501::/home/jane:/bin/bash
fred:x:502:502::/home/fred:/bin/bash
Run Code Online (Sandbox Code Playgroud)
如上图,:x:
代表密码。
有没有办法(可能的配置)以/etc/passwd
明文形式保存密码,以便 root 可以看到它们?
der*_*ert 60
其他两个答案告诉你——正确!——这是一个坏主意™。但是他们也告诉过你这很难做到,需要更改一堆程序。
这不是真的。这很容易。您只需要更改一两个配置文件。我觉得指出这一点很重要,因为您在登录不受控制的系统时应该意识到这一点。这些实际上不会将纯文本密码放入/etc/passwd
or 中/etc/shadow
,它会进入不同的文件。注意我没有测试过这些,因为我宁愿没有纯文本的密码。
编辑/etc/pam.d/common-password
(捕捉密码更改)或/etc/pam.d/common-auth
(捕捉登录)并添加… pam_exec expose_authtok log=/root/passwords /bin/cat
编辑这两个,然后从 pam_unix 切换到 pam_userdb crypt=none
。或者,您可以只将它放在 common-password(也离开 pam_unix)中,以便在更改密码时只记录密码。
您可以shadow
从 pam_unix 中删除(以及任何强哈希选项)选项以禁用影子文件,并返回到传统的 crypt 密码。不是纯文本,但开膛手约翰会为您解决这个问题。
有关更多详细信息,请查看PAM 系统管理指南。
您还可以编辑 PAM 的源代码,或编写自己的模块。您只需要编译 PAM(或您的模块),别无他物。
Bob*_*bby 36
哦,亲爱的,好吧,让我们从头开始……
我们知道用户的密码保存在 /etc/passwd 中,但是是以加密的方式
不,它们已经存储在 中/etc/passwd
,那是很久以前的事了。如今,大多数情况下,密码都存储在所谓的影子文件中/etc/shadow
。
但是以加密的方式,所以即使是 root 也看不到它们:
我知道它有时可以互换使用,但散列不是加密。加密就其定义而言是可逆的,这意味着您可以将加密的内容转换回其明文形式。散列被设计成以任何方式都不可逆(除了蛮力)。散列的原始明文形式不应该是可恢复的。
影子文件中的密码以散列形式存储。
如上图:x:代表密码
在x
这种情况下仅适用于传统密码字段的占位符。这x
意味着可以在影子文件中找到密码。
有没有办法(可能的配置)以明文形式将密码保存在 /etc/passwd 中,以便 root 可以看到它们?
是的,这确实是可能的,但由于某些原因,这不是一个好主意。Derobert 的回答解释了一种相当简单的方法。
但为什么这不是一个好主意呢?嗯,有一个简单但非常重要的原因:安全。我建议阅读以下问题:
但总而言之,假设如下: 公司中有一台服务器,所有用户帐户都由其密码保护,并且这些用户帐户中的数据使用相同的密码进行加密。来自外部的破解者可以访问服务器,但他们无法访问任何重要数据,因为这些数据仍然在用户帐户中加密。
现在假设密码将以纯文本形式存储。破解者将突然可以访问所有内容,因为可以读取密码。但是,如果将它们存储为散列值,那么除了拥有大量资源进行蛮力攻击的人之外,它们几乎对任何人都无用。
Ant*_*hon 10
首先,加密的密码不在 中/etc/passwd
,但在/etc/shadow
. 这样做的原因之一是它/etc/passwd
是公开可读的(例如,您可以找到另一个用户的 GECOS 字段信息),并且,尤其是对于较旧的加密方案,可能允许对加密密码进行暴力攻击。
仅以纯文本形式存储密码不是必需的,并且需要更新密码程序和读取/etc/shadow
信息的库以检查有效密码。然后您必须希望所有实用程序都使用共享库来访问该信息,而不是静态链接到无法理解纯文本密码存储的内容。
如果这是设置配置中的一个选项,那么总会有愚蠢的人会不恰当地打开它。当他们仍在 CRT 屏幕上工作并以一种可以从建筑物外轻松获取的方式进行广播时,他们正在查看信息。
除此之外,人们倾向于在多个系统上使用相同或相似的密码,因此将任何密码设为人类可读都不是一个好主意。由于某些系统管理员可以在其他系统上重试他们的系统,他知道用户有一个帐户。
一定有更多有趣的事情,可以在您的系统上调查其工作原理。