我如何使用 chroot php-fpm (7.3) 与 Apache 2.4.10 一起使用?
How do I chroot php-fpm (7.3) for use with Apache 2.4.10?
出于安全原因,我想将我的 php-fpm 服务 chroot 到 /var/www/html。我在 Apache 2.4.10 中有一个虚拟主机,如下所示:
<VirtualHost *:8080>
DocumentRoot /var/www/html
DirectoryIndex index.php index.html /index.php /index.html
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php7.3-fpm.sock|fcgi://localhost/"
</FilesMatch>
</VirtualHost>
我的问题是当我在 php-fpm 的 pool.conf 中设置 chroot = /var/www/html
时,从 Apache 发送的文件路径不正确(由于 DocumentRoot
它会设置SCRIPT_FILENAME 到 /var/www/html/index.php
,而 php-fpm 现在期望 /index.php
)。我可以通过执行 AliasMatch \.php$ /
将我的 php 文件从 DocumentRoot
文件夹中取出来解决这个问题,但这会阻止 DirectoryIndex
工作,因为现在 Apache 寻找/index.php
作为索引文件,不存在。我假设这可能也是非常糟糕的形式...
有办法处理吗?我知道 nginx 可以通过重写 SCRIPT_FILENAME 来解决这个问题,但这对我来说不是一个选择。我也知道我可以设置 doc_root
php.ini 选项,但我听说这可能是个问题,因为它会影响 php 中与脚本路径相关的 $_SERVER
变量.
在相关说明中,不在 chroot 中的 运行 php-fpm 有多不安全? (我已将 open_basedir
设置为 /var/www/html)
我曾在 chroot 中使用 运行 PHP,但是,这确实是一种痛苦,并没有带来巨大的安全优势。我 运行 遇到的最大问题是试图将所有依赖的共享对象放入 chroot 并在每次系统更新后使它们保持最新。我最终放弃了,并最终 运行 为每个 vhost 使用不同 user:group 的反向代理,而不是尝试 chroot。如果你有 2 个池 运行ning 作为 www:site1 和 www:site2 你可以 chown root:site1 /var/www/site1 然后 chmod 750 /var/www/site1。这将防止被黑的虚拟主机 (site2) 渗入其他虚拟主机 (site1)。服务器上的大多数其他文件应该是安全的,但您仍然希望有出站 iptable 规则,并且如果您使用文件存储引擎,应该确保您的会话存储使用模式 600。您可能还想探索 disable_functions ini 设置以提高安全性。
出于安全原因,我想将我的 php-fpm 服务 chroot 到 /var/www/html。我在 Apache 2.4.10 中有一个虚拟主机,如下所示:
<VirtualHost *:8080>
DocumentRoot /var/www/html
DirectoryIndex index.php index.html /index.php /index.html
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php7.3-fpm.sock|fcgi://localhost/"
</FilesMatch>
</VirtualHost>
我的问题是当我在 php-fpm 的 pool.conf 中设置 chroot = /var/www/html
时,从 Apache 发送的文件路径不正确(由于 DocumentRoot
它会设置SCRIPT_FILENAME 到 /var/www/html/index.php
,而 php-fpm 现在期望 /index.php
)。我可以通过执行 AliasMatch \.php$ /
将我的 php 文件从 DocumentRoot
文件夹中取出来解决这个问题,但这会阻止 DirectoryIndex
工作,因为现在 Apache 寻找/index.php
作为索引文件,不存在。我假设这可能也是非常糟糕的形式...
有办法处理吗?我知道 nginx 可以通过重写 SCRIPT_FILENAME 来解决这个问题,但这对我来说不是一个选择。我也知道我可以设置 doc_root
php.ini 选项,但我听说这可能是个问题,因为它会影响 php 中与脚本路径相关的 $_SERVER
变量.
在相关说明中,不在 chroot 中的 运行 php-fpm 有多不安全? (我已将 open_basedir
设置为 /var/www/html)
我曾在 chroot 中使用 运行 PHP,但是,这确实是一种痛苦,并没有带来巨大的安全优势。我 运行 遇到的最大问题是试图将所有依赖的共享对象放入 chroot 并在每次系统更新后使它们保持最新。我最终放弃了,并最终 运行 为每个 vhost 使用不同 user:group 的反向代理,而不是尝试 chroot。如果你有 2 个池 运行ning 作为 www:site1 和 www:site2 你可以 chown root:site1 /var/www/site1 然后 chmod 750 /var/www/site1。这将防止被黑的虚拟主机 (site2) 渗入其他虚拟主机 (site1)。服务器上的大多数其他文件应该是安全的,但您仍然希望有出站 iptable 规则,并且如果您使用文件存储引擎,应该确保您的会话存储使用模式 600。您可能还想探索 disable_functions ini 设置以提高安全性。