问题描述
/etc/shadow
的权限为600,这意味着除root以外的任何人都无法读取。
但是,由于其中的所有密码不是以明文形式存储,而是以散列形式存储(这意味着不可能从哈希中计算出原始密码),为什么每个人都不能读取它?
最佳办法
防止离线brute-force攻击。
即使您无法反转哈希,也可以尝试哈希每个可能的密码,直到找到匹配项为止,并且您可以通过良好的硬件和对文件的本地访问来每秒进行数百万次尝试。
如果文件具有644
权限,则即使在访客会话中登录到系统的任何人都可以将此文件从计算机上复制(无论是复制到USB memory 棒还是通过scp
远程复制)并尝试进行离线brute-force攻击,而不会在计算机上留下任何证据。
请注意,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
的权限更改为640
或600
无效,因为有许多合理的理由能够以普通用户身份读取/etc/passwd
(将UID转换为用户名,获取用户的全名,电话号码等),已移至/etc/shadow
,并被授予640
权限。在/etc/passwd
中,x
代替了用户的密码哈希字段,用于指示该用户的哈希存储在/etc/shadow
中。
次佳办法
实际上,创建/etc /shadow的目的是允许其远离用户名和密码的公共可读列表。
坚持下去,这将是一堂历史课,然后我们才能得到实际答案。如果您不关心历史,只需向下滚动一点。
在过去,Unix-like操作系统(包括Linux)通常都将密码保存在/etc /passwd中。该文件是全世界可读的,并且至今仍是可读的,因为它包含允许在数字用户ID和用户名之间进行映射的信息。该信息甚至对于出于完全合法目的的普通用户也非常有用,因此使文件世界可读性对于可用性具有极大的好处。
即使在那时,人们也意识到,将密码以纯文本格式保存在well-known位置的文件中,任何可以登录的人都可以自由阅读这是一个坏主意。因此,从某种意义上说,密码是散列的。那就是旧的”crypt”密码哈希机制,该机制几乎在现代系统上从未使用过,但通常出于遗留目的而受支持。
看一下系统上的/etc /passwd。看到第二个字段,到处都显示x
吗?它曾经保存有问题的帐户的哈希密码。
问题在于人们可以下载/etc /passwd,甚至不下载它,然后继续破解密码。当计算机不是特别强大时,这不是一个大问题(如Cuckoo’s Egg中的Clifford Stoll所述,我记得在1980年代中期有时间将一个密码散列在IBM PC类系统上,大约是一秒钟),但随着处理能力的提高,这成为一个问题。在某个时候,有了一个不错的单词列表,破解那些密码变得太容易了。由于技术原因,该方案也不能支持长度超过八个字节的密码。
为了解决这个问题,做了两件事:
-
转向更强大的哈希函数。旧的 crypt()已过期,并且设计了更现代的方案,既是future-proofed,又在计算上更强大。
-
将散列的密码移动到任何人都无法读取的文件中。这样,即使密码散列功能比预期的要弱,或者某个人的密码开始时很弱,攻击者也要获得访问散列值的另一个障碍。它不再是free-for-all。
该文件是/etc /shadow。
与/etc /shadow一起使用的软件通常很小,高度集中,并且由于潜在的问题,往往会在评论中受到更多的审查。它还具有特殊权限,允许其读取和修改/etc /shadow,同时使普通用户无法查看该文件。
这样就可以了:/etc /shadow上的权限是严格的(尽管,正如已经指出的那样,并不像您声明的那样严格),因为该文件的全部目的是限制对敏感数据的访问。
密码散列本来应该很强,但是如果您的密码在Internet列表上的“前500个密码”中,则有权访问该散列的任何人仍然可以快速找到该密码。保护散列可以防止这种简单的攻击,并将成功攻击的标准从简单的窥视提高到要求已成为主机上的系统管理员,或者先进行特权升级攻击。特别是在正确管理的multi-user系统上,这两个问题都比仅查看world-readable文件困难得多。
第三种办法
Why permission for /etc/shadow file is set to be 600?
谁告诉你的?
$ls -l /etc/shadow
-rw-r----- 1 root shadow 1407 mei 18 10:05 /etc/shadow
-
是640。
简单的答案:Linux中的权限非常重要。 “others”没有理由对/etc/shadow
做任何事情。并且没有理由让组”shadow”对其进行写入。而且执行混乱。
However, as all passwords inside it are not stored in clear text but as hashes (which means it is impossible to compute the original password from the hash), why may it not be read by everyone?
因为没有唯一的原因。
哈希为one-way。授予某人读取访问权限,使他可以使用脚本来滥用此one-way:只需列出您可以想象的任何单词并创建哈希即可。在某些时候它可能与密码匹配。可能还需要一段时间。
这个answer很有趣,并且对蛮力有一些估计。