为什么“chmod -R 777 /”是破坏性的?

这是关于文件许可和为什么 777是“破坏性”的典型问题 。

我不是问如何解决这个问题,因为在Server Fault上已经有大量的参考文献(重新安装OS)。 为什么它会做破坏性的事情呢?

如果你曾经运行过这个命令,你几乎立刻就会破坏你的操作系统。 我不清楚为什么取消限制对现有stream程有任何影响。 例如,如果我没有读取访问权限,并在terminal突然错误input后,我现在有访问好…为什么这会导致Linux打破?

    首先是一个小小的术语nitpick: chmod不会删除权限。 它改变了他们。


    现在这个问题的焦点 – 模式777意思是“任何人都可以读,写或执行这个文件” – 你已经允许任何人做(有效)任何他们想要的。

    现在,为什么这不好?

    1. 你只是让每个人读取/修改你的系统上的每个文件。
      • 亲亲密码安全再见(任何人都可以阅读阴影文件并破解你的密码,但为什么要麻烦?只是改变密码!这是更容易!)。
      • 亲吻你的二进制文件的安全性再见(有人可以写一个新的login程序,让他们在每一次)。
      • 亲吻你的文件再见:一个用户错误rm -r /并且全部结束。 操作系统被告知让他们做任何他们想要的!
    2. 开始之前,您已经生气了每个检查文件权限的程序。
      sudosendmail和其他主机根本无法启动。 他们将检查关键的文件权限,看看他们不是他们应该是什么,并反馈错误消息。
      同样, ssh也会崩溃(关键文件必须具有特定的权限,否则就是“不安全的”,默认情况下SSH将拒绝使用它们。)
    3. 你已经抹掉了setuid / setgid位的程序。
      模式777实际上是0 777 。 在这个前导数字中的东西是setuidsetgid位。
      大多数setuid / setgid程序都设置了该位,因为它们必须以特定的权限运行。 现在他们坏了。
    4. 你已经打破了/tmp/var/tmp那个零八卦的八进制数字的另外一个就是sticky bit – 保护/tmp (和/var/tmp )中的文件不被不要拥有它们。
      (不幸的是)有很多糟糕的脚本,通过执行rm -r /tmp/*进行“清理”,没有在/tmp上设置粘滞位,就可以亲吻目录中的所有文件。
      暂存文件消失可以真正打乱一些写得不好的程序…
    5. 你已经在/dev /proc和类似的文件系统中造成严重破坏
      这在更老的Unix系统上是一个问题,其中/dev是一个真正的文件系统,它包含的东西是使用mknod创build的特殊文件,因为权限更改将在重新启动后保留,但是在任何系统上,由于明显的安全风险(每个人都可以阅读每个TTY)导致核心恐慌的不太明显的潜在原因。
      Credit to @Tonny for pointing out this possibility
    6. 套接字和pipe道可能会中断,或者有其他问题套接字和pipe道可能会完全中断,或者由于被写入世界而被恶意注入。
      Credit to @Tonny for pointing out this possibility
    7. 你已经使系统上的每个文件都可执行
      很多人都有. 在他们的PATH环境variables(你不应该!) – 这可能会导致一个不愉快的惊喜,因为现在任何人都可以方便地放置一个文件命名为一个命令(说makels ,并让你运行他们的恶意代码的一枪。
      Credit to @RichHomolka for pointing out this possibility
    8. 在某些系统上, chmod会重置访问控制列表(ACL)
      这意味着您可能会不得不重新创build所有的ACL,除了在任何地方修改权限(并且是命令具有破坏性的实际示例)。
      Credit to @JamesYoungman for pointing out this possibility

    系统中已经运行的部分是否继续运行? 可能至less在一段时间内。
    但下一次你需要启动一个程序,或者重新启动一个服务,或者天堂禁止重新启动一个受到伤害的盒子,因为上面的#2和#3将会把它们的丑陋的头部放在后面。

    一个主要的问题是,有许多工具,如ssh / sudo,检查关键configuration文件的文件系统权限。 如果权限是错误的,这些工具被devise为失败,因为这将表明一个严重的安全问题。 在我的Debiantesting系统上,也许在其他的系统上,login的能力失败,可能是因为login二进制文件或PAM中的某些内容有权限检查。

    所以系统并不是真的被破坏 – 许多工具被devise成在权限错误时立即失败。

    如果您在执行chmod 777 -R /后重新启动系统,它将启动,并且可以启动没有明确权限检查的进程。 所以这个系统并不是真的死了,只是有点不可用的devise