在PHP / Apache / Linux环境中,为什么chmod 777是危险的?

2022-08-30 10:46:05

受到这个问题中讨论的启发。

我们都被教导过,在基于Linux的Web托管上留下具有权限级别的目录或文件是一件坏事,并且始终根据需要设置尽可能少的权限。777

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

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

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


答案 1

下面是一个方案:

  1. 您有一个未受保护的目录,用户可以将其上载到。
  2. 他们上传两个文件:一个 shell 脚本和一个 php 文件,其中包含对 shell 脚本的调用。system()
  3. 他们通过访问浏览器中的url来访问刚刚上传的php脚本,从而导致shell脚本执行。

如果这个目录是777,这意味着任何人(包括用户apache,这是php脚本将执行的)都可以执行它!如果未在该目录上设置执行位,并且可能是该目录中的文件,则上面的步骤 3 将不执行任何操作。

从注释中编辑:重要的不是PHP文件的权限,而是PHP文件内部的调用,它将由linux用户apache(或您设置的apache设置为运行的任何内容)作为linux系统调用执行,而这正是执行位重要的地方。system()


答案 2

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

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

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

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

如果您的服务器专用于运行Apache / PHP,并且在生活中没有其他目的,并且只有一个帐户运行Apache / PHP,那么从应用程序的角度来看,让一个帐户受到损害与整个机器受到损害一样好(尽管您仍然应该让系统文件受到保护并且不受用于运行PHP的帐户的写入...这应该仍然只适用于管理员帐户/根)。

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


推荐