在PHP / Apache / Linux上下文中,为什么chmod 777确实是危险的?

受此问题讨论的启发,这可能是一个愚蠢的问题。

我们都被告知,将目录或文件留在基于Linux的Web托管上,其权限级别为777是一件坏事,并且始终设置必要的权限。

我现在很好奇利用的危险到底在哪里,特别是在PHP / Apache上下文中。

毕竟,无论它是否标记为“可执行”,都可以从外部执行PHP脚本文件(即,通过调用Web服务器,然后调用解释器),不是吗? 同样适用于通过命令行777解释程序调用的文件,对吗?

那么777的漏洞到底在哪里? 是同一台计算机上的其他用户可以访问可写的文件吗?

Pekka 웃 asked 2020-07-14T00:48:21Z
4个解决方案
28 votes

这是一种情况:

  1. 您拥有用户可以上传到的不受保护的目录。
  2. 他们上载了两个文件:一个shell脚本和一个在其中向该shell脚本调用了system()的php文件。
  3. 他们通过访问浏览器中的URL来访问刚上传的php脚本,从而使shell脚本得以执行。

如果此目录为777,则意味着任何人(包括用户apache,即将执行php脚本的人)都可以执行它! 如果未在该目录上设置执行位,并且未在该目录内的文件上设置执行位,则上述第3步将无效。

从评论中进行编辑:无关紧要的是PHP文件的权限,重要的是PHP文件中的system()调用,该调用将由linux用户apache(或您设置为以其运行的任何apache)作为linux系统调用执行。 正是执行位很重要的地方。

Mike Sherov answered 2020-07-14T00:48:58Z
4 votes

这大大增加了您的网站针对恶意活动的漏洞配置文件,因为只需要侵入一个帐户即可。

任何能够通过任何登录访问您的系统的人都可以对您的页面进行任何操作,包括将其更改为“此网站确实不安全,请给我您的信用卡信息”。

编辑:(以澄清和解决评论)

许多服务器在生活中具有多个目的。 他们运行多种服务。 如果通过为每个服务分配一个唯一的用户并相应地管理文件权限来仔细地隔离这些服务,是的,如果有人破坏了帐户的凭据,您仍然处于困境中,但是它们可以造成的损害仅限于该服务 。 如果您只有一个通用帐户并将整个文件系统设置为777,则一个受感染的帐户会危害计算机上的所有内容。

如果您的服务器专用于仅运行Apache / PHP,并且在生活中没有其他用途,并且只有一个帐户在运行Apache / PHP,那么破坏一个帐户与使整个计算机不受破坏一样好。 从您的应用程序的角度来看(尽管您仍然应该使用运行PHP的帐户来保护系统文件并且该文件不可写...这仍然仅对管理员帐户/ root用户有效)。

如果他们可以写文件并且可以执行,则可以将其更改为在您的计算机上执行的文件(可执行文件或脚本),然后使用PHP的shell_exec运行该可执行文件。 如果配置为不允许shell_exec,则它们也可以更改您的配置

Eric J. answered 2020-07-14T00:49:42Z
2 votes

在权限方面遵循极简主义有很多很好的一般原因,但是在LAMP虚拟主机的情况下,容易想到的是

  • 在共享主机平台上,共享您的主机的其他用户现在可以读取和写入您的脚本。
  • 在专用主机上,胭脂进程可以读取/写入并意外删除您的文件。 可以说有一个自定义日志记录进程在后台以nobody用户身份运行,该bug导致尝试尝试执行rm -rf /。现在通常这将是无害的,因为几乎没有任何文件需要该人拥有写权限 流程现在将处理您的文件。
  • 要破坏您的网站,某人只需以任何用户身份获得访问权限,甚至无需说任何人或某些此类虚拟帐户即可。 通常,攻击者必须进行进一步的用户级别升级攻击,才能到达可能造成一定损害的地方。 这是一个真正的威胁。 某些非关键服务可能正在虚拟帐户下运行,并且可能包含漏洞。
anshul answered 2020-07-14T00:50:16Z
1 votes

假设您的服务器中安装了一个软件包,并且其中存在零日漏洞,攻击者可以使用文件上传功能访问“管理控制面板”,如果将所有内容都设置为777,那么上传一个 他想要的任何地方的shell脚本。 但是,如果您正确设置了权限,则他将无法执行此操作,因为没人/ www-data / etc将没有写权限。

D.Snap answered 2020-07-14T00:50:37Z
translate from https://stackoverflow.com:/questions/2338641/in-a-php-apache-linux-context-why-exactly-is-chmod-777-dangerous