Назад | Перейти на главную страницу

указать виртуальным хостам apache для подключения к сокетам php-fpm, используя для каждого другого пользователя / группу

Я читал php-fpm документация и выяснил, что я могу предоставить каждому сокету своего пользователя, группу и режим, но как я могу сказать apache (я имею в виду для каждого vhost) использовать пользователя x и группу y ​​для подключения к сокетам?

Я хочу добиться, чтобы пулы не читали файлы друг друга, в случае нарушения утечки будут только файлы для этого домена и ничего больше. Я знаю, как это сделать для пулов fpm, используя user и group настройки, а затем присвоить файловой структуре соответствующие разрешения. Но как насчет того же пользователя http, который может получить доступ ко всем сокетам fpm? Стоит мне об этом беспокоиться или нет?

pool1.conf (php-fpm)

[pool1]
user = domain1
group = domain1
listen = /run/php-fpm/www.domain1.sock
listen.owner = http
listen.group = http
listen.mode = 0660

domain1.conf (виртуальный хост apache)

<VirtualHost *:443>
    ServerAdmin webmaster@domain1.com
    ServerName www.domain1.com

    DocumentRoot "/srv/http/domain1.com/www"
    <Directory "/srv/http/domain1.com/www">
        <IfModule dir_module>
            DirectoryIndex index.php
        </IfModule>

        <Files "index.php">
            SetHandler "proxy:unix:/run/php-fpm/www.domain1.sock|fcgi://localhost/"
        </Files>

        <IfModule mod_rewrite.c>
            RewriteEngine On
            RewriteRule ^index\.php$ - [L]
            RewriteRule . index.php [L]
        </IfModule>
    </Directory>

    SSLEngine On
    SSLCertificateFile "/etc/letsencrypt/live/domain1.com/fullchain.pem"
    SSLCertificateKeyFile "/etc/letsencrypt/live/domain1.com/privkey.pem"
    Protocols h2 h2c
    Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains;"
    ErrorLog "/srv/protected/sites/domain1.com/logs/www-error_log"
    CustomLog "/srv/protected/sites/domain1.com/logs/www-access_log" common
</VirtualHost>

Я также пытаюсь понять, почему значение по умолчанию для listen.mode является 0660? Зачем группе http нужны разрешения на чтение и запись?

Я не эксперт, но вот как я понимаю, чтобы это работало. Каждый процесс запускается как системный (сервисный) пользователь. Apache - это процесс, работающий от имени его пользователя (http в вашем примере). Я думаю, что для достижения того, чего вы хотите, вам нужно будет создать отдельный процесс apache с собственным пользователем.

Однако для этого вам также необходимо разместить каждого пользователя / сайт на своем собственном порту, а затем иметь обратный прокси на том же компьютере, который прослушивает порт 80/443 и соответственно обращается к соответствующим сайтам.

На самом деле это неплохая установка, поскольку она также дает вам возможность добавить mod_security на прокси-сервер и охватить все сайты сразу.

Короче говоря, PHP-FPM - это не то решение, которое вы ищете (если я правильно понял ваш вопрос). В listen.user Директива должна быть такой же, как и пользователь, от имени которого запущен apache.