Я читал 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.