限制 PHP-FPM 仅提供特定目录下的文件

限制 PHP-FPM 仅提供特定目录下的文件

我在使用 PHP-FPM 和 Apache 2.4.1 mod_proxy_fcgi 时遇到了问题。由于 mod_proxy_fcgi 无法处理 Unix 套接字,因此 PHP-FPM 必须在本地主机上进行监听。因此,任何有权访问服务器的人都可以向 PHP-FPM 发送请求。我无法将 PHP-FPM 限制在我的文档根目录中,因此有人可以创建一个恶意的 PHP 文件,确保我的 PHP 进程可以访问它,然后向 PHP-FPM 监听的端口发送特制的请求。(我已经试过了,成功了。)

我的 apache 配置中有以下内容:

<VirtualHost *:80>
   ServerName example.org

   DocumentRoot /srv/vhosts/example.org/vhostdata/public/

   <Directory /srv/vhosts/example.org/vhostdata/public/>
          Require all granted
   </Directory>


   <LocationMatch ^(.*\.php)$>
            ProxyPass fcgi://127.0.0.1:6001/srv/vhosts/example.org/vhostdata/public/
            ProxyErrorOverride On
   </LocationMatch>
 </VirtualHost>

如何让 PHP-FPM/srv/vhosts/example.org/vhostdata/public/在收到每个请求时预先准备文档根目录?我已经尝试过该chdir指令,但它不适合我的需求。

不幸的是,使用 chroot 对我来说不是一个选择,因为我在 linux-vserver 环境中运行,该环境mknod出于安全原因已被管理员禁用。

答案1

如果您想这样做,在 chroot 中运行确实是您唯一的选择。

其他人是否真的有权在您的机器上运行代码?如果是,我真的建议您切换到支持 unix 套接字的程序,mod_fastcgi 就是一个选项。另一个选项(如果您的应用程序兼容)是切换到 nginx,它支持 PHP 的 unix 套接字。

如果这只是出于安全方面的考虑,我建议你严格限制 PHP/Apache 的运行权限。如果你能阻止恶意用户上传文件,你就能防止这种漏洞的发生。

相关内容