这是一个关于文件许可权以及777为什么具有“破坏性”的规范性问题。


我不问如何解决此问题,因为有大量有关Server Fault(重新安装OS)上的参考。为什么它会做任何破坏性的事情?

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

评论

看到这个问题,我屏住呼吸。

#1 楼

首先,使用次要术语nitpick:chmod不会删除权限。它改变了他们。


现在问题的症结所在–模式777的意思是“任何人都可以读取,写入或执行此文件”-您已授予任何人(有效)执行任何操作的权限他们想要的。

现在,为什么这样不好?



您只是让每个人都读取/修改系统上的每个文件。 br />

Kiss密码安全性告别(任何人都可以读取影子文件并破解您的密码,但是为什么要打扰呢?只需更改密码!就容易多了!)。
为您的Kiss安全性二进制文件再见(某人可以编写一个新的login程序,每次都可以使用它们)。
让您的文件再见:一个用户误导了rm -r /,一切都结束了。告诉操作系统让他们做他们想做的事!



在启动之前,您讨厌每个检查文件权限的程序。 sudosendmail和其他许多主机将不再启动。他们将检查密钥文件的权限,发现它们不是应有的权限,然后弹出错误消息。
类似地,ssh会严重破坏(密钥文件必须具有特定的权限,否则它们“不安全” “,默认情况下SSH将拒绝使用它们。)

您已经删除了包含它们的程序中的setuid / setgid位。
模式777实际上是0 777。前导位数包括setuidsetgid位。
大多数setuid / setgid程序都设置了该位,因为它们必须以某些特权运行。他们现在已经坏了。和/tmp)被不属于他们的人删除。
不幸的是,有很多表现不佳的脚本可以通过执行/var/tmp来“清理”,而无需在sticky bit上设置粘性位,您就可以告别该目录中的所有文件。
草稿文件消失了确实会使某些写得不好的程序感到烦恼...

您在/tmp和类似文件系统中造成了严重破坏
/var/tmp是真实文件系统的旧版Unix系统上,这更是一个问题,其中包含的内容是使用rm -r /tmp/*创建的特殊文件,因为权限更改将在重新引导后保留,但是在任何设备权限更改的系统上,都可能导致严重的问题,从明显的安全风险(每个人都可以读取每个TTY)到内核恐慌的潜在原因不太明显。 /tmp


套接字和管道可能会损坏,或有其他问题
套接字和管道可能会完全损坏,或者由于使其具有世界通用性而遭受恶意注入。 /dev


您已使系统上的每个文件成为可执行文件
许多人在其/proc环境变量中使用了/dev(您不应该这样做)-这可能导致令人不愉快的惊喜,因为现在任何人都可以删除一个方便地命名为命令的文件(例如mknodCredit to @Tonny for pointing out this possibility,并有机会让您运行其恶意代码。Credit to @Tonny for pointing out this possibility在某些系统上,.将会重置访问控制列表(ACL)
,这意味着您可能不得不重新创建所有ACL,除了在各处修复权限外(这是该命令具有破坏性的实际示例)。PATH



系统中已经在运行的部分会继续运行吗?可能至少会持续一段时间。
但是下次您需要启动程序时,或者重新启动服务,否则天堂禁止将您所在的盒子重伤,因为上面的#2和#3将抬起他们难看的头。

评论


至少在某些系统上,/ tmp将在重启后得到修复。尽管所有其他事情似乎都坏了。至少在我刚刚测试过的VM中,它似乎重新启动了,修复了/ tmp权限。启动脚本中的某处必须有某些内容。

– Zoredache
2012年2月28日在22:02



使用tmpfs的@Zoredache系统通常会自行修复,而在磁盘上具有/ tmp的系统可能会自行修复(取决于其启动脚本)

–voretaq7
2012年2月28日在22:06

+1指出将消除setuid和setgid。这是一个极大的破坏性方面。尝试运行find / -perms -4000 -type f和find / -perms -2000 -type f,以查看依赖于这些标志的各种二进制文件。

–凯尔·史密斯(Kyle Smith)
2012年2月28日在22:33

键入“ less foo.txt”之类的内容将不会执行一个名为less.txt的文件,而不管是否设置了可执行位。您将需要在路径中包含目录less.txt,并且必须输入“ less.txt foo.txt”-并不是真正的意外情况。即使您使用的是Shell补全功能,它也会停在更少的时间,并且您仍然必须添加.txt。要调用具有可执行位设置的随机文本文件,您必须输入./nameoffile.txt。

–真实法案
2012年2月29日,下午3:40

@Deji每个人都被定义为集合的并集,包括拥有文件的用户,拥有文件的组中的用户以及不满足这些条件之一的用户(实际上是三个八进制权限数字:User,Group和其他)。换句话说,任何有权访问系统的用户。 (在这种情况下,“访问”可以是一个shell帐户,这是我通常要解决的问题,但是它还包括通过将数据写入磁盘的Web表单/ CGI进行的访问:www用户现在可以写入磁盘上的任何文件系统,这意味着随机访问者也可以。)

–voretaq7
2015年12月16日在22:40



#2 楼

一个主要的事情是,有许多工具(例如ssh / sudo)检查密钥配置文件的文件系统权限。如果权限错误,则这些工具将设计为失败,因为这将指示严重的安全问题。在我的Debian测试系统上,也许在其他系统上,登录功能失败,可能是因为登录二进制文件或PAM中的某些内容具有权限检查。

所以系统并不是真的被破坏了-这是因为许多工具被设计为在权限错误时立即失败。

如果在执行chmod 777 -R /后重新启动系统,它将启动,并且您可以启动没有显式权限检查的进程。因此,该系统并没有真正消失,只是某种无法使用的设计。