繁体   English   中英

我如何 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$ /来解决此问题,以从DocumentRoot文件夹中获取我的 php 文件,但这会阻止DirectoryIndex工作,因为现在 Apache 查找/index.php作为文件的索引。不存在。 我假设这可能也是非常糟糕的形式......

有没有办法处理这个? 我知道 nginx 可以通过重写 SCRIPT_FILENAME 来解决这个问题,但这不是我的选择。 我也知道我可以设置doc_root php.ini 选项,但我听说这可能是个问题,因为它会影响与 php 中的脚本路径相关的$_SERVER变量。

在相关说明中,不在 chroot 中运行 php-fpm 有多不安全? (我已将open_basedir设置为 /var/www/html)

我曾经在 chroot 中运行 PHP,但是,对于没有巨大的安全优势来说,这是一个真正的痛苦。 我遇到的最大问题是试图将所有相关的共享对象放入 chroot 并在每次系统更新后保持它们是最新的。 我最终放弃并最终为每个虚拟主机运行了一个具有不同用户:组的反向代理,而不是尝试 chroot。 如果您有 2 个池作为 www:site1 和 www:site2 运行,您可以 chown root:site1 /var/www/site1 然后 chmod 750 /var/www/site1。 这将防止被黑的虚拟主机(站点 2)渗入其他虚拟主机(站点 1)。 服务器上的大多数其他文件应该是安全的,但您仍然希望有出站 iptable 规则,并且如果您使用文件存储引擎,则应确保您的 session 存储使用模式 600。 您可能还想探索 disable_functions ini 设置以获得额外的安全性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM