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

Shu*_*rma 25 permissions files shadow

的权限/etc/shadow是 600,这意味着除了 root 之外的任何人都无法读取它。

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

ins*_*ere 60

防止离线暴力攻击。

即使您无法反转散列,您仍然可以尝试对每个可能的密码进行散列,直到找到匹配项,并且您可以使用良好的硬件和对文件的本地访问每秒进行数百万次尝试。

如果该文件有644权限,那么任何登录到您系统的人,即使是在访客会话中,都可以从您的计算机(无论是到 U 盘还是通过 远程复制scp)并尝试离线暴力攻击,不要在您的计算机上留下任何证据


请注意,Ubuntu 上的权限实际上是640,而不是600

$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1239 Jun 25 04:35 /etc/shadow
Run Code Online (Sandbox Code Playgroud)

但这并不重要,因为其他人仍然没有权限,并且默认情况下,没有人在shadow组中。


最初,散列存储在/etc/passwd(这就是它被称为 的原因passwd)中,就像在创建 Linux 时一样,破解散列,即使是当时使用的弱类型,实际上也是不可能的。然而,最终,处理能力发展到破解散列(至少是相对较弱的密码)变得可行的地步。

更改/etc/passwdto的权限640600不起作用,因为有许多合法的理由能够以/etc/passwd普通用户的身份进行阅读(将 UID 转换为用户名、获取用户的全名、电话号码等),因此将哈希移至/etc/shadow,获得了640权限。一个x代替密码散列字段的用于在用户/etc/passwd使用以指示该用户的哈希值存储在/etc/shadow代替。

  • 值得注意的是,/etc/passwd 的权限是644。我相信历史上,密码哈希值曾经存储在这里。但是,将此文件更改为 640 会导致各种兼容性问题,因此密码散列被移至 shadow 并从 passwd 中删除 - 这允许 passwd 中的其他信息保持世界可读,同时密码散列在不同的文件。 (8认同)
  • 最后我检查了您可以将散列密码放回 /etc/passwd 并从 /etc/shadow 中删除该行并期望能够登录。 /etc/shadow 存在以便它可以出于给定的原因设置为 600在这个答案中。 (6认同)
  • @Rodney 作为在 BSD 4.3 上长大的人,你是对的。哈希值存储在 /etc/passwd 中。当 Vax 11/780 是最先进的时,对文件中的密码进行暴力攻击被认为是不可能的。也许更重要的是,互联网 [阿帕网] 是一个沉睡的小死水,几乎没有考虑过这些事情;没有 ssh——只有 rlogin/telnet。保留密码文件 644 意味着诸如 `ls` 之类的实用程序不需要 setuid root 才能从 uid 转换为 name。 (4认同)

use*_*ser 13

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

坚持住,在我们得到实际答案之前,这将是一个历史课。如果你不关心历史,只需向下滚动一点。

在过去,包括 Linux 在内的类 Unix 操作系统通常都将密码保存在 /etc/passwd 中。该文件是世界可读的,现在仍然如此,因为它包含允许在数字用户 ID 和用户名之间进行映射的信息。即使对于普通用户来说,这些信息对于完全合法的目的也非常有用,因此使文件世界可读对可用性大有裨益。

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

查看系统上的 /etc/passwd。看到第二个字段,它说x无处不在吗?它曾经保存相关帐户的散列密码。

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

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

  • 转向更强的哈希函数。旧的 crypt() 已经过了它的使用寿命,并且设计了更现代的方案,它们既经得起未来考验,又具有更强的计算能力。
  • 将散列密码移动到任何人都无法读取的文件中。这样,即使密码散列函数结果比预期的弱,或者如果有人开始使用弱密码,攻击者开始访问散列值也存在另一个障碍。它不再是免费的。

该文件是/etc/shadow。

与 /etc/shadow 一起使用的软件通常非常小,高度集中,并且由于潜在的问题,往往会在评论中接受一些额外的审查。它还以特殊权限运行,允许它读取和修改 /etc/shadow,同时让普通用户无法查看该文件。

所以你有它:/etc/shadow 的权限是限制性的(虽然,正如已经指出的那样,不像你所说的那样严格)因为该文件的全部目的是限制对敏感数据的访问。

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


Rin*_*ind 10

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

谁告诉你的?

$ls -l /etc/shadow
-rw-r----- 1 root shadow 1407 mei 18 10:05 /etc/shadow
Run Code Online (Sandbox Code Playgroud)
  • 它是 640。

简单的回答:Linux 中的权限很重要。“其他人”没有理由对/etc/shadow. 并且没有理由让组“影子”写信给它。而且执行不正常。

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

因为没有任何理由这样做。

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

这个答案 很有趣,并且对蛮力进行了一些估计。