为什么将/ etc / shadow的文件许可权设置为600?


25

权限为/etc/shadow600,这意味着除root以外的任何人都无法读取。

但是,由于其中的所有密码不是以明文形式存储,而是以散列形式存储(这意味着无法从哈希中计算出原始密码),为什么每个人都不能读取它?


您确定的权限/etc/shadow600吗?
edwinksl

4
如果您的Stackoverflow帐户的密码是哈希值,您是否愿意将哈希值密码显示给其他人?
Jeon,2016年

5
@ByteCommander。有时我想要一种支持编辑的方法。
TRiG

Answers:


60

防止离线暴力攻击。

即使您无法反转哈希,也可以尝试哈希每个可能的密码,直到找到匹配项为止,并且您可以通过良好的硬件和对文件的本地访问来每秒进行数百万次尝试。

如果该文件具有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/passwdto 的权限640600将其无效,因为有许多正当理由可以以/etc/passwd普通用户身份阅读(将UID转换为用户名,获取用户的全名,电话号码等),因此将哈希值移至/etc/shadow,已被授予640权限。一个x代替密码散列字段的用于在用户/etc/passwd使用以指示该用户的哈希值存储在/etc/shadow代替。


1
复制文件的电话很好!
Rinzwind

1
而且我不需要代表;-)编辑:嗯,他将它设置在我的:P抱歉:D edit2,现在又回来了。eh:D
Rinzwind '16

6
最后,我检查了您是否可以将散列密码放回/ etc / passwd并从/ etc / shadow中删除该行,并希望能够登录。/ etc / shadow存在,因此可以将其设置为600,原因如下:在这个答案。
约书亚州

8
值得注意的是/ etc / passwd的权限为644。我相信,从历史上看,密码散列曾经存储在这里。但是,将此文件更改为640会引起各种兼容性问题,因此,密码哈希被移到了阴影中并从passwd中删除了-这允许passwd中的其他信息保持世界可读性,而密码哈希被秘密保存在不同的文件。
罗德尼

4
@Rodney是在BSD 4.3上长大的人,您是正确的。哈希存储在/ etc / passwd中。回到Vax 11/780的最新状态时,认为无法对文件中的密码进行暴力攻击。也许更重要的是,互联网[Arpanet]只是一个困乏的小死水,几乎没有考虑过这种事情。没有ssh-only rlogin / telnet。保留密码文件644意味着ls不需要将诸如setuid root之类的实用程序从uid转换为name。
Mike S

13

实际上,创建/ etc / shadow的目的是允许其远离用户名和密码的公共可读列表。

坚持下去,这将是一堂历史课,然后我们才能得到实际答案。如果您不关心历史,只需向下滚动一点。

在过去,类似Unix的操作系统(包括Linux)通常都将密码保存在/ etc / passwd中。该文件是全世界可读的,并且至今仍是可读的,因为它包含允许例如在数字用户ID和用户名之间进行映射的信息。即使对于普通用户而言,该信息对于完全合法的目的也非常有用,因此使文件世界可读性对于可用性非常有用。

即使在那时,人们也意识到,将密码以纯文本格式保存在众所周知位置的文件中,任何可以登录的人都可以自由阅读,这是一个坏主意。因此,从某种意义上讲,密码是经过哈希处理的。那是旧的“ crypt”密码散列机制,该机制在现代系统上几乎从未使用过,但通常出于遗留目的而受支持。

看一下系统上的/ etc / passwd。看到第二个字段,x随处可见?它曾经保存有问题的帐户的哈希密码。

问题是人们可以下载/ etc / passwd,甚至不下载它,然后着手破解密码。当计算机不是特别强大时,这不是一个大问题(如Cuckoo's Egg Clifford Stoll所述,我记得在1980年代中期有时间将一个密码散列在IBM PC类系统上,大约是一秒钟),但随着处理能力的提高,这成为一个问题。在某个时候,有了一个不错的单词列表,破解那些密码变得太容易了。由于技术原因,此方案也不能支持长度超过八个字节的密码。

为了解决这个问题,做了两件事:

  • 转向更强大的哈希函数。旧的crypt()已失效,并且设计了更现代的方案,这些方案既可以面向未来,又可以在计算上更强大。
  • 将散列的密码移到任何人都无法读取的文件中。这样,即使密码散列功能比预期的要弱,或者某个人的密码开始时很弱,攻击者也要获得访问散列值的另一个障碍。它不再是万能的。

该文件是/ etc / shadow。

与/ etc / shadow一起使用的软件通常很小,高度集中,并且由于潜在的问题,往往会在评论中受到更多的审查。它还具有特殊权限,允许其读取和修改/ etc / shadow,同时使普通用户无法查看该文件。

这样就可以了:/ etc / shadow上的权限是限制性的(尽管,正如已经指出的那样,并不像您声明的那样严格),因为该文件的全部目的是限制对敏感数据的访问。

密码散列本来应该很强大,但是如果您的密码在Internet列表上的“ 前500个密码”中,则有权访问该散列的任何人仍然可以快速找到该密码。保护散列可以防止这种简单的攻击,并将成功攻击的标准从简单的窥视提高到要求已成为主机上的系统管理员,或者先进行特权升级攻击。尤其是在正确管理多用户系统,这两个都是显著不仅仅是在看世界可读的文件更加困难。


我真的很喜欢您描述每件事的方式:)(y)
Shubhanshu Vishwakarma

术语/词源:/etc/shadow不包含“影子密码”(因为这不是问题)。整个文件是的阴影/etc/passwd。看看Linux中使用术语的方式Shadow Password HOWTO为什么要隐藏passwd文件?。与在计算中使用其他术语“影子”不同,它不是影子副本(例如,将BIOS代码影子到RAM中而不是从ROM中运行)。/ etc / passwd中的字段是一个占位符,包含一个特殊字符,表示“真正的密码哈希在/ etc / shadow中”。
彼得·科德斯

历史悠久,但1秒。即使在1980年代,每个密码也几乎没有限制,并不是每个人中超过1%的人都使用最高密码。
沃伦·露

1
@WarrenDew不确定您是否要陈述事实或观点。crypt()具有一个12位盐和一个8字节密码的12 + 64位输出(通常为base64编码)。对于普通密码,是的,您可能可以通过蛮力攻击它们,但是,如果每次密码检查都花费一秒钟的时间,那么使用蛮力破解就不会花费那么多的密码。即使仅使用一个密码就可以预先计算一个盐分表,以每秒一次加密的速度进行,大约需要一个小时,而且您还必须应对有限的存储空间(当时40-80 MB的存储空间很大)。
CVn

@PeterCordes好点。我要删除该段落,因为它实际上与回答OP的问题并不特别相关。
CVn

10

为什么将/ etc / shadow文件的权限设置为600?

谁告诉你的?

$ls -l /etc/shadow
-rw-r----- 1 root shadow 1407 mei 18 10:05 /etc/shadow
  • 是640。

简单的答案:Linux中的权限非常重要。“其他人”没有理由做任何事情/etc/shadow。而且没有理由让“影子”小组写信给它。而且执行是乱序的。

但是,由于其中的所有密码不是以明文形式存储,而是以散列形式存储(这意味着无法从哈希中计算出原始密码),为什么每个人都不能读取它?

因为没有唯一的原因。

哈希是单向的。授予某人读取访问权限,使他可以使用脚本滥用此方法:只列出您可以想象的任何单词并创建哈希。在某些时候它可能与密码匹配。可能还需要一段时间。

这个答案 很有趣,并且对暴力破解有一些估计。


640适用于普通用户 组用户可以读取影子文件吗?
Shubhanshu Vishwakarma

抱歉?该文件为640。因此,请为用户“ root”写入并为组“ shadow”读取。“影子”是为此特定目的而创建的特权系统组。
Rinzwind

2

重要背景:/etc/shadow存在仅是为了隐藏密码哈希。在Unix的早期,密码哈希存储在中/etc/passwd。随着计算机变得越来越强大,网络连接越来越持久,安全利用也越来越复杂,人们意识到使密码散列保持文字可读性会带来麻烦。(我不会详细介绍这些漏洞利用;已经有足够好的答案了。)

但是/etc/passwd不能被读取保护:各种各样的程序都使用它来将数字用户ID映射到用户名,并查找主目录,默认shell,用户的全名(以及办公室编号等-签出man finger)。 。因此,敏感部分(密码哈希)已移至/etc/shadow,其余部分保持原样。这就是为什么/etc/passwd(取决于名称)包含(哈希)密码之外的所有内容的原因。


感谢您对我的问题的答复,现在我对/ etc / passwd和/ etc / shadow文件有了完整的了解。
Shubhanshu Vishwakarma
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.