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

chroot php-fpm процесс на дом пользователя

Я занимаюсь перемещением каждого из моих веб-сайтов, находящихся на одном сервере, с одного экземпляра PHP (при этом все файлы на всех веб-сайтах принадлежали apache, и только библиотека php по умолчанию была установлена ​​без php-fpm) ... и я устанавливаю пул php-fpm для каждого отдельного веб-сайта.

Моя цель - лучшая безопасность и разделение веб-сайтов, самая большая цель состоит в том, чтобы сценарии PHP на одном веб-сайте не могли получить доступ к сценариям PHP с другого веб-сайта.

Я видимо что-то не так делаю.

Моя среда:

Вот пример файла конфигурации пула php-fpm:

[root@host]# cat /etc/php-fpm.d/website1.com.conf 
    [website1.com]
    user = user1
    group = user1
    listen = /var/run/php-fpm/website1.com.sock
    listen.owner = user1
    listen.group = user1
    php_admin_value[disable_functions] = exec,passthru,shell_exec,system
    php_admin_flag[allow_url_fopen] = on
    php_admin_value[short_open_tag] = On
    pm = ondemand
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    chdir = /home/www/website1.com/

А вот соответствующий ему файл vhost в Apache:

[root@host]# cat /etc/httpd/conf.d/website1.com.conf 
        <VirtualHost *:80>
                ServerAdmin admin@my-host.com
                ServerName website1.com
        ServerAlias www.website1.com
        DocumentRoot /home/www/website1.com/www
                <Directory "/home/www/website1.com/www">
                        Options Includes FollowSymLinks
                        AllowOverride All
                        Order allow,deny
                        Allow from all
                </Directory>
        ErrorLog /home/www/website1.com/logs/errors
        CustomLog /home/www/website1.com/logs/access_log common
                <FilesMatch "\.php$">
                        SetHandler "proxy:unix:///var/run/php-fpm/website1.com.sock|fcgi://website1.com/"
                </FilesMatch>

        </VirtualHost>

Все файлы и папки принадлежат исключительно пользователю user1 (группа также имеет значение user1).

У меня есть PHP-скрипт внутри "website2", который все еще может получить доступ к содержимому "website1". Параметры в файле конфигурации пула php-fpm для "website2" и настройки в "website2" конфигурационном файле Apache vhost идентичны веб-сайту 1 (за исключением различных путей к папкам, домашнего каталога, chroot и т. Д.).

Это мой тестовый сценарий, расположенный в / home / www / website2 / www / и доступный через доменное имя website2.com:

<?php
$test = file_get_contents('/home/www/website1.com/www/wp-config.php');
echo $test;
#$files = scandir('/home/www');
#print_r($files);
?>

Однако вывод этого сценария несколько неожидан. Я не вижу полного содержимого wp-config.php. Вместо этого я вижу все, что находится за пределами определенного места в файле (если вы знакомы с wp-config.php, я вижу все после define('SECURE_AUTH_KEY','foo') запись).

Почему этот тестовый сценарий, работающий с правами «user2», может вывести часть содержимого wp-config.php из каталога «user1»? Я думал, что chdir = /home/www/website1.com/ директива предотвратит подобные вещи.

Похоже, вы установили chdir вместо того chroot в конфигурации пула php-fpm.

В chdir директива просто изменяет рабочий каталог для процессов php для этого пула; он не запускает процессы в chroot.

Видеть этот вопрос.