我们知道用户的密码/etc/passwd
以加密的方式保存在中,因此即使root用户也看不到它们:
jane:x:501:501::/home/jane:/bin/bash
fred:x:502:502::/home/fred:/bin/bash
如上所示,:x:
代表密码。
有没有一种方法(可能的配置)以/etc/passwd
明文形式保存密码,以便根用户可以看到它们?
我们知道用户的密码/etc/passwd
以加密的方式保存在中,因此即使root用户也看不到它们:
jane:x:501:501::/home/jane:/bin/bash
fred:x:502:502::/home/fred:/bin/bash
如上所示,:x:
代表密码。
有没有一种方法(可能的配置)以/etc/passwd
明文形式保存密码,以便根用户可以看到它们?
Answers:
另外两个答案正确地告诉了您,这是一个Bad Idea™。但是他们也告诉您这很困难,需要更改大量程序。
这不是真的。很简单 您只需要更改一个或两个配置文件。我指出这一点很重要,因为在登录不受控制的系统时,您应该意识到这一点。这些实际上不会在/etc/passwd
或中输入纯文本密码/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
。另外,您可以只将密码放在通用密码中(也保留pam_unix),以在更改密码时记录密码。
您可以shadow
从pam_unix中删除(以及所有强哈希选项)选项以禁用影子文件,然后返回传统的crypt密码。不是纯文本,而是开膛手约翰会为您解决该问题。
有关更多详细信息,请参阅《 PAM系统管理指南》。
您也可以编辑PAM的源代码,或编写自己的模块。您只需要编译PAM(或您的模块),无需其他任何操作。
/root/passwords
。
哦,亲爱的,好的,让我们从头开始...
我们知道用户的密码保存在/ etc / passwd中,但是是以加密方式保存的
不,它们已经存储在中/etc/passwd
,这是相当早以前的事情。今天,大多数情况下,密码存储在所谓的影子文件中/etc/shadow
。
但是以加密的方式,所以即使根也看不到它们:
我知道它有时可以互换使用,但是散列不是加密。从本质上讲,加密是可逆的,这意味着您可以将加密的东西转换回其明文形式。散列被设计为以任何方式均不可逆(蛮力除外)。哈希的原始明文形式不应被恢复。
影子文件中的密码存储为散列。
如上所示:x:代表密码
在x
这种情况下仅适用于传统密码字段的占位符。这x
意味着可以在影子文件中找到密码。
有没有一种方法(可能的配置)将密码以明文形式保存在/ etc / passwd中,以便root用户可以看到它们?
是的,这确实是可能的,但出于某些原因并不是一个好主意。德罗伯特的答案解释了一种相当简单的方法。
但是,为什么这不是一个好主意呢?好吧,原因很简单但很重要:安全性。我建议阅读以下问题:
但总而言之,假定以下条件:公司中有一台服务器,所有用户帐户均由其密码保护,这些用户帐户中的数据使用相同的密码加密。来自外部的黑客可以访问服务器,但是他们无法访问任何重要数据,因为这些数据仍在用户帐户中进行了加密。
现在假设密码将以纯文本存储。破解者会突然访问所有内容,因为可以读取密码。但是,如果将它们存储为散列值,那么除了拥有大量资源进行暴力攻击的人以外,对于几乎任何人来说,它们几乎都是无用的。
"$id$"
开头的字符串,然后是一个以"$"
: 结尾的字符串,$id$salt$encrypted
则代替使用DES机器,id
确定使用的加密方法,然后确定如何解释字符串的其余部分»。
首先,加密的密码不在/etc/passwd
,但密码在/etc/shadow
。原因之一是/etc/passwd
可以公开读取(例如,您可以找到其他用户的GECOS字段信息),并且尤其是使用较旧的加密方案时,可能会允许对加密密码进行暴力攻击。
仅以纯文本形式存储密码是不必要的,并且需要更新密码程序和读取/etc/shadow
信息的库以检查有效密码。然后,您必须希望所有实用程序都使用共享库来访问该信息,而不是与无法理解纯文本密码存储的内容静态链接。
如果这是安装程序配置中的一个选项,那么总会有愚蠢的人不恰当地打开它。当他们仍在CRT屏幕上工作并进行广播时,可以在查看信息时很容易地从建筑物外拾取它。
除此之外,人们倾向于在多个系统上使用相同或相似的密码,因此对于任何可读的密码来说,这并不是一个好主意。由于某些系统管理员可以在其他系统上重试它们,因此他知道用户拥有一个帐户。
必须有更多有趣的东西,可以在您的系统上研究的工作方式。
/etc/shadow
不存储加密的密码,而是存储密码哈希。是的,该函数被称为crypt
,并且手册页上显示“已加密”,但是如果您将一条鱼称为自行车,那它就不会运转。请注意,有可能以/etc/shadow
其他格式存储密码而无需重新编译任何程序(至少在Linux和Solaris上):身份验证方法始终动态链接。将密码存储为纯文本将是一个糟糕的主意,但是可以通过一些工作来实现。
(为什么这样做不是一个好主意)的基本原因是,任何用户(root,admin或其他用户)都不能访问他人的用户密码。
仅仅是因为密码是一种身份验证手段。如果我知道其他用户的密码,则知道他们的凭据(用户名+密码),因此我可以以该用户身份登录,以模拟他(或她或她)。
我以该用户身份登录时执行的任何操作,将由其他用户负责。这不是身份验证应该如何工作的方式。
这些操作可能是灾难性的,例如删除一大堆重要文件,擦除硬盘,擦除备份,关闭核电计划等。
或者只是非法的。想象一下一个银行机构,我(管理员)可以访问所有密码。使用收银员的密码,我可以命令从主席的银行帐户向擦窗器的银行帐户转移一百万美元。然后,使用收银员的高级密码批准交易。然后批准从窗户清洁工的帐户到我自己的离岸银行帐户的支票。
然后我在巴哈马长假...
在这种情况下,密码的散列和单独的影子文件的使用可以看作是执行此规则的一种手段(任何用户都不能假冒其他用户)。
正如@Miral的评论*一样,有一个例外,su
它在允许模拟时(并且会抛出上面的参数),同时也保留了其使用记录(因此它将规则更改为“只有管理员可以模拟其他人,但管理员可以日志保存”)。
*银行的例子可能不是最好的。在安全至关重要的任何环境中,通常都需要更多的身份验证和授权方式,而不仅仅是一个密码。
su otheruser
。
su
记录了使用情况,但su不会保留用户模仿另一个用户时实际执行的操作的记录。恶意根总是可以更改日志,以隐藏对未来调查人员的操作。