这是关于文件许可和为什么 777是“破坏性”的典型问题 。
我不是问如何解决这个问题,因为在Server Fault上已经有大量的参考文献(重新安装OS)。 为什么它会做破坏性的事情呢?
如果你曾经运行过这个命令,你几乎立刻就会破坏你的操作系统。 我不清楚为什么取消限制对现有stream程有任何影响。 例如,如果我没有读取访问权限,并在terminal突然错误input后,我现在有访问好…为什么这会导致Linux打破?
首先是一个小小的术语nitpick: chmod
不会删除权限。 它改变了他们。
现在这个问题的焦点 – 模式777
意思是“任何人都可以读,写或执行这个文件” – 你已经允许任何人做(有效)任何他们想要的。
现在,为什么这不好?
login
程序,让他们在每一次)。 rm -r /
并且全部结束。 操作系统被告知让他们做任何他们想要的! sudo
, sendmail
和其他主机根本无法启动。 他们将检查关键的文件权限,看看他们不是他们应该是什么,并反馈错误消息。 ssh
也会崩溃(关键文件必须具有特定的权限,否则就是“不安全的”,默认情况下SSH将拒绝使用它们。) 777
实际上是0
777
。 在这个前导数字中的东西是setuid
和setgid
位。 /tmp
和/var/tmp
那个零八卦的八进制数字的另外一个就是sticky bit
– 保护/tmp
(和/var/tmp
)中的文件不被不要拥有它们。 rm -r /tmp/*
进行“清理”,没有在/tmp
上设置粘滞位,就可以亲吻目录中的所有文件。 /dev
/proc
和类似的文件系统中造成严重破坏 /dev
是一个真正的文件系统,它包含的东西是使用mknod
创build的特殊文件,因为权限更改将在重新启动后保留,但是在任何系统上,由于明显的安全风险(每个人都可以阅读每个TTY)导致核心恐慌的不太明显的潜在原因。 Credit to @Tonny for pointing out this possibility
Credit to @Tonny for pointing out this possibility
.
在他们的PATH
环境variables(你不应该!) – 这可能会导致一个不愉快的惊喜,因为现在任何人都可以方便地放置一个文件命名为一个命令(说make
或ls
,并让你运行他们的恶意代码的一枪。 Credit to @RichHomolka for pointing out this possibility
chmod
会重置访问控制列表(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 。