48

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

我们都被告知,在基于 Linux 的 Web 主机上保留目录或文件的权限级别777是一件坏事,并且始终根据需要设置尽可能少的权限。

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

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

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

4

4 回答 4

32

这是一种情况:

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

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

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

于 2010-02-26T00:31:18.277 回答
6

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

任何通过任何登录方式访问您系统的人都可以对您的页面做任何他们想做的事情,包括将它们更改为“这个网站真的不安全,所以请给我您的信用卡信息。”

编辑:(澄清和解决意见)

许多服务器在生活中有不止一个目的。他们运行多种服务。如果您通过为每个用户分配一个唯一的用户并相应地管理文件权限来小心地将这些服务彼此隔离,是的,如果有人破坏了帐户的凭据,您仍然会陷入困境,但他们所能造成的损害仅限于该一项服务. 如果您只有一个通用帐户并将整个文件系统设置为 777,那么一个受感染的帐户会危及机器上的所有内容。

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

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

于 2010-02-26T00:22:17.737 回答
3

在权限方面遵循极简主义有很多很好的一般理由,但在 LAMP 虚拟主机的背景下,容易想到的少数是

  • 在共享主机平台上,共享您主机的其他用户现在可以读取和写入您的脚本。
  • 在专用主机上,恶意进程可以读取/写入并意外删除您的文件。假设有一个自定义日志进程在后台运行,用户没有人,它有一个错误导致它试图rm -rf /. 现在通常这将是无害的,因为几乎没有任何人应该拥有写权限的任何文件,但是这个流氓进程现在会带走你的文件。
  • 要破坏您的网站,某人只需要以任何用户的身份获得访问权限,甚至可以说nobody或一些这样的虚拟帐户。通常,攻击者必须进行进一步的用户级别升级攻击才能到达他可以造成一些破坏的地方。这是一个真正的威胁。一些非关键服务可能在虚拟帐户下运行,并且可能包含漏洞。
于 2010-02-26T00:32:09.120 回答
1

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

于 2015-01-21T20:17:50.400 回答