服务器如果使用chmod 777命令,会变得容易受到攻击吗?

29

我经常阅读一些这样的文章:

chmod 777 是不好的!

我想知道:

当我在一个文件上执行 chmod 777 时,我如何变得容易受攻击?

有没有一个真实的例子,我可以复现它?

5个回答

23

它允许任何人查看和/或修改文件系统内容:假设攻击者已经拥有一般系统访问权限,这在共享托管平台上非常普遍...有些比其他人更加“硬化”。以下是可能的攻击向量的一个小而不完整的列表:

  1. “你的安全代码”可能会被“他们的恶意代码”覆盖,该代码在相同的Web服务器上下文中运行..可以窃取密码/木马、暴露数据库、删除内容等。也就是说,别人的代码可以在你的安全上下文下运行。
  2. 内容(例如“脚本源”)可能在Web服务器之外的上下文中被查看(或所有者)。有一个连接到数据库的“安全”密码?好吧,不再安全了...
  3. 如果内容受权限保护(例如Web服务器以前无法访问),Web服务器可能能够访问/列出敏感信息...如果您不想分享,则不好。不同的Web服务器配置也会以不同的方式处理“列表”,这也可能会暴露比预期更多的内容。
在上述内容中,我还假设“组”包括 Web 服务器主体,并且涉及可以用作主要攻击向量和/或安全漏洞的 Web 服务器(和/或共享托管)。但是,我再次强调:上面的列表不完整
虽然不能“保证安全”,但使用最具体的权限可以减轻一些漏洞/曝光。

2
如果攻击者只能访问网页界面(不能通过同一共享主机上的其他帐户访问文件),那么777模式并不会直接打开任何漏洞。它所做的是使攻击者更容易在以其他方式进入后更改站点上的内容。
例如,假设您有一个WordPress网站,并且某个地方存在漏洞,允许攻击者在服务器守护程序的凭据下执行任意PHP代码(这在过去已经发生了很多次,将来无疑还会发生)。 WordPress本身的代码存储在服务器守护程序可以读取的.php文件中。如果这些文件的模式为777,则攻击者可以写入这些文件-这意味着他们可以修改代码-更改您的站点功能。也许他们安装了“驱动器利用”工具包,现在每个访问您网站的人都被黑客攻击了。也许他们安装了SEO垃圾邮件工具包,现在Google认为您正在销售伟哥(但如果您直接访问该网站,则看不到这一点-是的,这确实发生过)。
如果.php文件的模式为755,并且属于不是服务器守护程序的用户,则攻击者无法永久更改站点的功能。
请注意,这意味着WordPress的自升级功能存在风险,因为它只有在WordPress能够修改自身时才起作用--一旦对手能够执行任意PHP代码,就无法防止其修改文件。
还要注意,如果服务器守护程序可以修改任何文件和目录,那么您只有完全避免这种情况才是100%安全的。即使只允许将文件上传到单个目录,仍然可能会出现问题--即使您只允许在其中放置图像文件。(如果这似乎不可能,请查看http://lcamtuf.coredump.cx/squirrel/。)

1

chmod 命令中的每个数字都代表一个八进制(3 位)数字。有三个数字,总共有 9 位。每一位表示一个权限;1 == 具有权限,0 == 没有权限。

每个数字中的三个位分别表示读取(二进制 100 == 十进制 4)、写入(二进制 010 == 十进制 2)和执行(二进制 001 == 十进制 1)。十进制 7 是读取+写入+执行权限。

chmod 命令的第一个数字表示文件或目录所有者的权限。第二个数字是组的权限。第三个数字是“宇宙”——也就是其他所有人的权限。

因此,chmod 777 表示您、组和所有人都具有读取、写入和执行权限。这通常比所需的访问权限要高得多。

对于您的实际示例,请想象一个名为 my_bank_account_credentials 的文件被使用 chmod 777 更改了。非常不安全!恶意用户可以更改其中的内容或只是阅读它并愉快地拿走您的钱。

对于服务器而言,最大的危险是被利用的漏洞可能允许攻击者访问服务器进程拥有权限的任何内容,这将包括任何设置了777权限的内容。


2
我认为OP询问的是“一个恶意用户怎么会改变里面的内容或者只是读取并欣然接受你的钱”,而不是777的含义。 - user541686

0

chmod是CHange MODe命令的缩写。777表示权限。有三组人可以拥有权限(每个人都有自己的数字),顺序为:所有者(文件或目录的所有者,第一个7),组(与所有者属于同一组的所有人,第二个7)和全球(第三个7)。

所有者是文件的用户 - 也就是你。在*nix世界中,用户属于组。所以你可能是Marketing组中的用户/所有者Bob。这种模型让你可以做出像Bob可以读/写该文件,其余营销人员只能读取该文件,其他用户可以读取该文件等操作。

777中的每个数字都是rwx(读/写/执行)的二进制表示。因此,chmod 755的意思是:

111(7)-所有者可以读取、写入和执行

101(5)-组中的其他人可以执行或读取,但不能写入

101(5)-全球的其他人可以读取和执行,但不能写入。

这样设置意味着你可以读取/写入和执行你的文件,但是访问你网站的人只能读取或执行该文件。因此,你需要将cgi-bin中的程序设置为755,以便人们可以将该文件作为程序执行。

如果您将权限设置为“chmod 644”,则可以获得一个只能被您写入但其他人只能读取的文件。这对于纯HTML文件非常有用,以防止任何不良行为发生。但是,如果使用权限为644的文件进行执行,则会出现错误。

CHMOD 777将允许每个人更改您服务器上的文件,它会给予他们写入条件,而众所周知这是不好的。


-3
如果恶意入侵到达您的应用程序、网站等,无论它对代码做了什么,关键点在于数据库,没有可能保护它免受“写入”的攻击。因此,chmod 777权限根本不会有任何危险。

代码/文件系统也同样重要。你不希望有人删除系统上的所有文件。你应该备份它,但另一方面你也应该备份数据库。 - hostingutilities.com
删除所有文件是一个最好的情况,更有可能的是,入侵者将利用您授予他们的权限在您的系统上安装您不想要的东西,例如垃圾邮件服务器或恶意软件分发点。 - tripleee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接