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

时间:2010-02-26 00:20:35

标签: php linux security apache chmod

受到this question中讨论的启发,可能是一个愚蠢的问题。

我们都被告知,在基于Linux的Web托管中保留目录或文件的权限级别为777是件坏事,并且根据需要设置总是很少的权限。

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

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

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

4 个答案:

答案 0 :(得分:27)

以下是一个场景:

  1. 您有一个用户可以上传到的不受保护的目录。
  2. 他们上传了两个文件:一个shell脚本,以及一个对shell脚本进行system()调用的php文件。
  3. 他们通过访问浏览器中的url来访问他们刚上传的php脚本,导致shell脚本执行。
  4. 如果这个目录是777,那意味着任何人(包括用户apache,这是php脚本将执行的)都可以执行它!如果没有在该目录上设置执行位,并且可能是目录中的文件,则上面的步骤3将不执行任何操作。

    从评论中编辑:重要的不是PHP文件的权限,而是PHP文件中的system()调用将由linux用户apache执行的linux系统调用(或者您拥有的任何apache设置)运行as),这是执行位重要的地方。

答案 1 :(得分:3)

它极大地增加了您的网站对恶意活动的漏洞配置文件,因为它只需要分成一个帐户。

任何能够通过任何登录访问您系统的人都可以对您的网页做任何他们想做的事情,包括将其更改为“此网站真的不安全所以请告诉我您的信用卡信息。”

编辑:(澄清并发表评论)

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

如果您的服务器专用于仅运行Apache / PHP并且在生活中没有其他用途,并且只有一个帐户可以运行Apache / PHP,那么让一个帐户受到攻击就像拥有整个机器一样好从您的应用程序的角度来看已经受到损害(尽管您仍然应该使用用于运行PHP的帐户保护系统文件并且不可写入...但仍然只能用于管理员帐户/ root)。

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

答案 2 :(得分:2)

在权限方面,有很多很好的一般理由可以遵循极简主义,但在LAMP虚拟主机环境中,很少有人会想到的是

  • 在共享托管平台上,共享主机的其他用户现在可以读取和写入脚本。
  • 在专用主机上,rouge进程可以读/写并意外删除您的文件。假设有一个自定义日志记录进程在后台运行,因为用户nobody有一个错误导致它尝试rm -rf /。现在通常这将是无害的,因为几乎没有任何文件没有人应该具有写权限,但是这个胭脂程序现在将带有你的文件。
  • 要破坏您的网站,某人只需要以任何用户身份获取访问权限,甚至可以说没有人或某些虚拟帐户。通常,攻击者必须进行进一步的用户级升级攻击才能到达可以造成一些伤害的地方。这是一个真正的威胁。某些非关键服务可能在虚拟帐户下运行,可能包含漏洞。

答案 3 :(得分:0)

假设您的服务器中安装了软件包,并且存在零日漏洞,攻击者可以通过上传文件功能访问管理控制面板,如果您将所有内容设置为777,则会让他在任何他想要的地方上传shell脚本都是微不足道的。但是,如果您正确设置了权限,则他无法执行此操作,因为nobody / www-data / etc不具备写入权限。