我遇到了PHP-FPM和Apache 2.4.1 mod_proxy_fcgi的问题。 由于mod_proxy_fcgi无法处理Unix套接字,PHP-FPM必须在本地主机上侦听。 因此,任何有权访问服务器的人都可以向PHP-FPM发送请求。 我无法将PHP-FPM限制到我的文档根目录,所以有人可以创build一个恶意的PHP文件,确保我的PHP进程可以访问它,并发送一个特殊的请求到PHP-FPM侦听的端口。 (我已经尝试了,它的工作。)
我在我的apacheconfiguration中有以下内容:
<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不是我的select,因为我正在linux-vserver环境中运行,其中出于安全原因, mknod已被pipe理员禁用。
在chroot中运行是你唯一的select,如果你想这样做。
其他人是否真的有机会在你的机器上运行代码? 如果是这样,我真的build议你切换到支持unix套接字的东西,mod_fastcgi将是一个选项。 另一个选项(如果你的应用程序兼容)切换到nginx,它支持PHP的unix套接字。
如果这只是担心安全性,我build议你只是加紧PHP / Apache运行的权限。 如果您可以防止恶意用户上传文件,则可以防止此漏洞的发生。