为什么“chmod -R 777 /”具有破坏性?

为什么“chmod -R 777 /”具有破坏性?

这是一个典型问题关于文件权限和为什么777是“破坏性的”。

我并不是在问如何修复这个问题,因为 Server Fault(重新安装操作系统)上已经有大量关于这个问题的参考资料。它为什么会造成破坏性的影响?

如果您曾经运行过此命令,那么您几乎会立即破坏您的操作系统。我不清楚为什么删除限制会对现有进程产生任何影响。例如,如果我对某些内容没有读取权限,并且在终端中快速输入错误后,我突然拥有了访问权限……为什么这会导致 Linux 崩溃?

答案1

首先,对术语有一个小小的挑剔chmod消除权限。它变化他们。


现在问题的关键是——模式777意味着“任何人都可以读取、写入或执行此文件”——你有给予许可任何人都可以(有效地)做任何他们想做的事情。

那么,这为什么很糟糕?

  1. 您刚刚允许每个人读取/修改系统上的每个文件。
    • 与密码安全告别(任何人都可以读取影子文件并破解您的密码,但何必呢?只需更改密码!这容易多了!)。
    • 与你的二进制文件的安全告别吧(有人可以编写一个新login程序,让他们每次都进入)。
    • 告别文件:只要用户犯错,rm -r /一切就都完了。操作系统被告知让他们做任何他们想做的事!
  2. 您已经惹恼了每个在启动前检查文件权限的程序。
    sudosendmail和许多其他程序将无法再启动。它们将检查密钥文件权限,发现它们不符合预期,并返回错误消息。
    类似程序ssh将严重崩溃(密钥文件必须具有特定权限,否则它们“不安全”,默认情况下 SSH 将拒绝使用它们。)
  3. 您已经清除了具有 setuid / setgid 位的程序。
    该模式777实际上是0777。前导数字中包含setuidsetgid位。
    大多数 setuid/setgid 程序都设置了该位,因为它们必须以特定权限运行。它们现在已损坏。
  4. 你已经打破/tmp/var/tmp 前导八进制数字中被清零的另一个含义是sticky bit-- 它可以保护/tmp(和/var/tmp) 中的文件不被不拥有这些文件的人删除。
    不幸的是,有很多行为不当的脚本通过执行 来“清理” rm -r /tmp/*,如果不设置粘性位,/tmp 您就可以与该目录中的所有文件告别了。
    临时文件消失确实会破坏一些编写不当的程序……
  5. 你对/dev /proc类似文件系统造成了严重破坏
    这在较旧的 Unix 系统上更是一个问题,因为/dev该系统是一个真实的文件系统,并且它包含的内容是用创建的特殊文件mknod,因为权限更改将在重启后保留,但在任何系统上,设备权限更改都可能导致严重的问题,从明显的安全风险(每个人都可以读取每个 TTY)到不太明显的内核恐慌潜在原因。
    Credit to @Tonny for pointing out this possibility
  6. 插座和管道可能破裂,或出现其他问题 套接字和管道可能会完全中断,或者由于被设置为全球可写而容易受到恶意注入。
    Credit to @Tonny for pointing out this possibility
  7. 您已使系统上的每个文件都可执行
    很多人.在他们的PATH环境变量中都有(你不应该!) - 这可能会引起不愉快的意外,因为现在任何人都可以删除一个方便地命名为命令的文件(比如makels,并试图让你运行他们的恶意代码。
    Credit to @RichHomolka for pointing out this possibility
  8. 在某些系统上将chmod重置访问控制列表 (ACL)
    这意味着您可能最终必须重新创建所有 ACL,此外还要修复所有地方的权限(这是命令具有破坏性的实际示例)。
    Credit to @JamesYoungman for pointing out this possibility

系统中已经运行的部分会继续运行吗?可能,至少会持续一段时间。
但是下次您需要启动程序、重新启动服务或重新启动系统时,您将面临巨大的麻烦,因为上面的 #2 和 #3 会抬起它们的头来。

答案2

一个主要问题是,有许多工具(如 ssh/sudo)会检查关键配置文件的文件系统权限。如果权限错误,这些工具就会失效,因为这表明存在严重的安全问题。在我的 Debian 测试系统以及其他测试系统上,登录失败,可能是因为 PAM 中的登录二进制文件或某些内容有权限检查。

因此,这并不是说系统真的被破坏了——而是许多工具被设计为在权限错误时立即失效。

如果你在执行完后重启系统,chmod 777 -R /系统会启动,你可以启动没有明确权限检查的进程。所以系统并没有真正死掉,只是有点不可用按设计

相关内容