权限为/etc/shadow
600,这意味着除root以外的任何人都无法读取。
但是,由于其中的所有密码不是以明文形式存储,而是以散列形式存储(这意味着无法从哈希中计算出原始密码),为什么每个人都不能读取它?
权限为/etc/shadow
600,这意味着除root以外的任何人都无法读取。
但是,由于其中的所有密码不是以明文形式存储,而是以散列形式存储(这意味着无法从哈希中计算出原始密码),为什么每个人都不能读取它?
Answers:
即使您无法反转哈希,也可以尝试哈希每个可能的密码,直到找到匹配项为止,并且您可以通过良好的硬件和对文件的本地访问来每秒进行数百万次尝试。
如果该文件具有644
权限,那么即使在访客会话中,登录到系统的任何人都可以将该文件从计算机上复制(无论是复制到USB记忆棒还是通过远程访问scp
),然后尝试进行离线蛮力攻击,而不会在您的计算机上留下任何证据。
请注意,实际上对Ubuntu的权限640
不是600
:
$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1239 Jun 25 04:35 /etc/shadow
不过,这无关紧要,因为仍然没有其他人的权限,并且默认情况下,该shadow
组中没有人。
最初,哈希存储在/etc/passwd
(这就是为什么被称为passwd
)中,就像创建Linux时一样,破解哈希(甚至是当时使用的弱类型)几乎是不可能的。最终,尽管如此,处理能力最终发展到可以破解哈希(至少是相对较弱的密码)的程度。
更改/etc/passwd
to 的权限640
或600
将其无效,因为有许多正当理由可以以/etc/passwd
普通用户身份阅读(将UID转换为用户名,获取用户的全名,电话号码等),因此将哈希值移至/etc/shadow
,已被授予640
权限。一个x
代替密码散列字段的用于在用户/etc/passwd
使用以指示该用户的哈希值存储在/etc/shadow
代替。
ls
不需要将诸如setuid root之类的实用程序从uid转换为name。
实际上,创建/ etc / shadow的目的是允许其远离用户名和密码的公共可读列表。
坚持下去,这将是一堂历史课,然后我们才能得到实际答案。如果您不关心历史,只需向下滚动一点。
在过去,类似Unix的操作系统(包括Linux)通常都将密码保存在/ etc / passwd中。该文件是全世界可读的,并且至今仍是可读的,因为它包含允许例如在数字用户ID和用户名之间进行映射的信息。即使对于普通用户而言,该信息对于完全合法的目的也非常有用,因此使文件世界可读性对于可用性非常有用。
即使在那时,人们也意识到,将密码以纯文本格式保存在众所周知位置的文件中,任何可以登录的人都可以自由阅读,这是一个坏主意。因此,从某种意义上讲,密码是经过哈希处理的。那是旧的“ crypt”密码散列机制,该机制在现代系统上几乎从未使用过,但通常出于遗留目的而受支持。
看一下系统上的/ etc / passwd。看到第二个字段,x
随处可见?它曾经保存有问题的帐户的哈希密码。
问题是人们可以下载/ etc / passwd,甚至不下载它,然后着手破解密码。当计算机不是特别强大时,这不是一个大问题(如Cuckoo's Egg中的 Clifford Stoll所述,我记得在1980年代中期有时间将一个密码散列在IBM PC类系统上,大约是一秒钟),但随着处理能力的提高,这成为一个问题。在某个时候,有了一个不错的单词列表,破解那些密码变得太容易了。由于技术原因,此方案也不能支持长度超过八个字节的密码。
为了解决这个问题,做了两件事:
该文件是/ etc / shadow。
与/ etc / shadow一起使用的软件通常很小,高度集中,并且由于潜在的问题,往往会在评论中受到更多的审查。它还具有特殊权限,允许其读取和修改/ etc / shadow,同时使普通用户无法查看该文件。
这样就可以了:/ etc / shadow上的权限是限制性的(尽管,正如已经指出的那样,并不像您声明的那样严格),因为该文件的全部目的是限制对敏感数据的访问。
密码散列本来应该很强大,但是如果您的密码在Internet列表上的“ 前500个密码”中,则有权访问该散列的任何人仍然可以快速找到该密码。保护散列可以防止这种简单的攻击,并将成功攻击的标准从简单的窥视提高到要求已成为主机上的系统管理员,或者先进行特权升级攻击。尤其是在正确管理多用户系统,这两个都是显著不仅仅是在看世界可读的文件更加困难。
/etc/shadow
不包含“影子密码”(因为这不是问题)。整个文件是的阴影/etc/passwd
。看看Linux中使用术语的方式Shadow Password HOWTO:为什么要隐藏passwd文件?。与在计算中使用其他术语“影子”不同,它不是影子副本(例如,将BIOS代码影子到RAM中而不是从ROM中运行)。/ etc / passwd中的字段是一个占位符,包含一个特殊字符,表示“真正的密码哈希在/ etc / shadow中”。
为什么将/ etc / shadow文件的权限设置为600?
谁告诉你的?
$ls -l /etc/shadow
-rw-r----- 1 root shadow 1407 mei 18 10:05 /etc/shadow
简单的答案:Linux中的权限非常重要。“其他人”没有理由做任何事情/etc/shadow
。而且没有理由让“影子”小组写信给它。而且执行是乱序的。
但是,由于其中的所有密码不是以明文形式存储,而是以散列形式存储(这意味着无法从哈希中计算出原始密码),为什么每个人都不能读取它?
因为没有唯一的原因。
哈希是单向的。授予某人读取访问权限,使他可以使用脚本滥用此方法:只列出您可以想象的任何单词并创建哈希。在某些时候它可能与密码匹配。可能还需要一段时间。
这个答案 很有趣,并且对暴力破解有一些估计。
重要背景:/etc/shadow
存在仅是为了隐藏密码哈希。在Unix的早期,密码哈希存储在中/etc/passwd
。随着计算机变得越来越强大,网络连接越来越持久,安全利用也越来越复杂,人们意识到使密码散列保持文字可读性会带来麻烦。(我不会详细介绍这些漏洞利用;已经有足够好的答案了。)
但是/etc/passwd
不能被读取保护:各种各样的程序都使用它来将数字用户ID映射到用户名,并查找主目录,默认shell,用户的全名(以及办公室编号等-签出man finger
)。 。因此,敏感部分(密码哈希)已移至/etc/shadow
,其余部分保持原样。这就是为什么/etc/passwd
(取决于名称)包含除(哈希)密码之外的所有内容的原因。
/etc/shadow
是600
吗?