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

Pek*_*ica 45 php linux apache security chmod

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

我们都被教导过,将基于Linux的Web主机上的目录或文件保留为权限级别777是一件坏事,并且根据需要设置总是很少的权限.

我现在好奇的地方正是在于剥削的危险,特别是在一个PHP/Apache的环境.

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

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

Mik*_*rov 28

这是一个场景:

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

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

从评论中编辑:重要的不是PHP文件的权限,它是system()PHP文件中的调用,将由linux用户apache执行linux系统调用(或者你将apache设置为运行的任何内容),这是精确地执行位很重要.

  • 不,重要的不是PHP文件的权限,它是PHP文件中的system()调用,它将作为linux系统调用执行,而且执行位很重要. (4认同)
  • @Mike这是有道理的,*但*我是否需要设置可执行位来运行PHP文件?我现在无法测试它,但我想不会,不会读取Apache/PHP的权限就足以运行该文件了吗? (2认同)
  • 你好@MikeSherov,很抱歉提出这个老问题和以下愚蠢的问题。你写道“你有一个不受保护的目录,用户可以上传到。” “用户”是什么意思?如果他们没有 FTP 访问权限,他们如何上传该目录中的文件?如果我在专用服务器上,我应该没问题,对吧? (2认同)
  • 嗨@testermaster AFAIK,网页中文件上传界面的未消毒图像是将php文件上传到服务器的方法之一。 (2认同)

Eri*_* J. 6

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

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

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

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

如果您的服务器仅用于运行 Apache/PHP 而没有其他用途,并且只有一个帐户在运行 Apache/PHP,那么该帐户被盗与整个机器被盗一样从您的应用程序的角度来看(尽管您仍然应该有系统文件受到保护并且不能被用于运行 PHP 的帐户写入......这仍然应该只适用于管理员帐户/root)。

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