这是一个典型问题关于文件权限和为什么777是“破坏性的”。
我并不是在问如何修复这个问题,因为 Server Fault(重新安装操作系统)上已经有大量关于这个问题的参考资料。它为什么会造成破坏性的影响?
如果您曾经运行过此命令,那么您几乎会立即破坏您的操作系统。我不清楚为什么删除限制会对现有进程产生任何影响。例如,如果我对某些内容没有读取权限,并且在终端中快速输入错误后,我突然拥有了访问权限……为什么这会导致 Linux 崩溃?
答案1
首先,对术语有一个小小的挑剔chmod
:消除权限。它变化他们。
现在问题的关键是——模式777
意味着“任何人都可以读取、写入或执行此文件”——你有给予许可任何人都可以(有效地)做任何他们想做的事情。
那么,这为什么很糟糕?
- 您刚刚允许每个人读取/修改系统上的每个文件。
- 与密码安全告别(任何人都可以读取影子文件并破解您的密码,但何必呢?只需更改密码!这容易多了!)。
- 与你的二进制文件的安全告别吧(有人可以编写一个新
login
程序,让他们每次都进入)。 - 告别文件:只要用户犯错,
rm -r /
一切就都完了。操作系统被告知让他们做任何他们想做的事!
- 您已经惹恼了每个在启动前检查文件权限的程序。
sudo
、sendmail
和许多其他程序将无法再启动。它们将检查密钥文件权限,发现它们不符合预期,并返回错误消息。
类似程序ssh
将严重崩溃(密钥文件必须具有特定权限,否则它们“不安全”,默认情况下 SSH 将拒绝使用它们。) - 您已经清除了具有 setuid / setgid 位的程序。
该模式777
实际上是0
777
。前导数字中包含setuid
和setgid
位。
大多数 setuid/setgid 程序都设置了该位,因为它们必须以特定权限运行。它们现在已损坏。 - 你已经打破
/tmp
了/var/tmp
前导八进制数字中被清零的另一个含义是sticky bit
-- 它可以保护/tmp
(和/var/tmp
) 中的文件不被不拥有这些文件的人删除。
不幸的是,有很多行为不当的脚本通过执行 来“清理”rm -r /tmp/*
,如果不设置粘性位,/tmp
您就可以与该目录中的所有文件告别了。
临时文件消失确实会破坏一些编写不当的程序…… - 你对
/dev
/proc
类似文件系统造成了严重破坏
这在较旧的 Unix 系统上更是一个问题,因为/dev
该系统是一个真实的文件系统,并且它包含的内容是用创建的特殊文件mknod
,因为权限更改将在重启后保留,但在任何系统上,设备权限更改都可能导致严重的问题,从明显的安全风险(每个人都可以读取每个 TTY)到不太明显的内核恐慌潜在原因。
Credit to @Tonny for pointing out this possibility
- 插座和管道可能破裂,或出现其他问题
套接字和管道可能会完全中断,或者由于被设置为全球可写而容易受到恶意注入。
Credit to @Tonny for pointing out this possibility
- 您已使系统上的每个文件都可执行
很多人.
在他们的PATH
环境变量中都有(你不应该!) - 这可能会引起不愉快的意外,因为现在任何人都可以删除一个方便地命名为命令的文件(比如make
或ls
,并试图让你运行他们的恶意代码。
Credit to @RichHomolka for pointing out this possibility
- 在某些系统上将
chmod
重置访问控制列表 (ACL)
这意味着您可能最终必须重新创建所有 ACL,此外还要修复所有地方的权限(这是命令具有破坏性的实际示例)。
Credit to @JamesYoungman for pointing out this possibility
系统中已经运行的部分会继续运行吗?可能,至少会持续一段时间。
但是下次您需要启动程序、重新启动服务或重新启动系统时,您将面临巨大的麻烦,因为上面的 #2 和 #3 会抬起它们的头来。
答案2
一个主要问题是,有许多工具(如 ssh/sudo)会检查关键配置文件的文件系统权限。如果权限错误,这些工具就会失效,因为这表明存在严重的安全问题。在我的 Debian 测试系统以及其他测试系统上,登录失败,可能是因为 PAM 中的登录二进制文件或某些内容有权限检查。
因此,这并不是说系统真的被破坏了——而是许多工具被设计为在权限错误时立即失效。
如果你在执行完后重启系统,chmod 777 -R /
系统会启动,你可以启动没有明确权限检查的进程。所以系统并没有真正死掉,只是有点不可用按设计。