在 chroot 中使用 php fpm 在 apache 上“找不到文件”

问题描述 投票:0回答:0

我在 Debian 上意识到一个使用 php fpm 的 apache 服务器,但出于安全问题,带有 php fpm 的虚拟主机位于 chroot 中。

理想的情况是每个人都可以根据自己的需要修改自己的站点以及 php fpm 的配置,但与服务器保持隔离,目标都是由 chroot 之外的 apache 管理。

由于我处于 chroot 环境中,我还必须在外部使用 systemd 启动 fpm。 到现在为止,没问题...

但是当我开始在虚拟主机中使用 phpx.x-fpm.sock 时,当我访问该站点时,我得到一个“找不到文件”

配置

/etc/apache2/sites-enabled/$domain.conf

...
<VirtualHost ip:80 >
        ServerName $domain
        ServerAlias www.$domain

        UseCanonicalName Off

        ErrorLog "/var/www/vhosts/$user/var/app/system/logs/$domain/error.log"
        CustomLog "/var/www/vhosts/$user/var/app/system/logs/$domain/access.log" combined
        DocumentRoot "/var/www/vhosts/$user/var/app/www/$domain/httpdocs"

        <Directory /var/www/vhosts/$user/var/app/www/$domain/httpdocs>
                <IfModule mod_proxy_fcgi.c>

                        <FilesMatch \.php$>
                                SetHandler proxy:unix:/var/www/vhosts/$user/run/php/php8.1-fpm.sock|fcgi://localhost
                        </FilesMatch>
                </IfModule>
        </Directory>

        DirectoryIndex "index.php" "index.html" "index.htm"

        <Directory /var/www/vhosts/$user/var/app/www/$domain>
                Options -FollowSymLinks -Indexes
                AllowOverride AuthConfig FileInfo Indexes Limit Options=Indexes,SymLinksIfOwnerMatch,MultiViews,ExecCGI,Includes,IncludesNOEXEC
        </Directory>
</VirtualHost>
...

/etc/systemd/system/phpx.x-$user.service :

...
Description=The PHP 8.1 FastCGI Process Manager of $user
Documentation=man:php-fpm8.1(8)
After=network.target

[Service]
Type=notify
RootDirectory=/var/www/vhosts/$user

MountAPIVFS=true

RuntimeDirectory=/run

RemoveIPC=true
PrivateTmp=true

ExecStart=/usr/sbin/php-fpm8.1 --nodaemonize --fpm-config /etc/php/8.1/fpm/php-fpm.conf
ExecStartPost=-/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/8.1/fpm/pool.d/www.conf 81
ExecStopPost=-/usr/lib/php/php-fpm-socket-helper remove /run/php/php-fpm.sock /etc/php/8.1/fpm/pool.d/www.conf 81
ExecReload=/bin/kill -USR2 \$MAINPID

[Install]
WantedBy=multi-user.target
...

当然,不仅是我建议你看这里,那里有fpm的整个安装脚本here

如果你有兴趣,我还有准备整个服务器的脚本......这里

所有这些都只是一个“找不到文件”,没有给我任何其他指示......

根据我的研究人员给出类似的标题,有另一个安装并在 fpm 配置文件中使用“chroot”模式。我发现这对我的安装没有用,因为整个 fpm 都是 chroot 的。

我应该制作一个 TCP 套接字吗? 但它会更不安全......好吧我认为

我应该更改 php-fpm.conf 配置中的监听吗?

php apache debian systemd chroot
© www.soinside.com 2019 - 2024. All rights reserved.