我在使用 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 的运行权限。如果你能阻止恶意用户上传文件,你就能防止这种漏洞的发生。