Проблема с разрешениями: почему в моем втором пуле php-fpm никому не нужен пользователь?

Я использую FreeBSD 10. 2 с помощью специально скомпилированного Apache 2.4.17 с php-fpm. Пул по умолчанию ( [www] , почти стандартная установка php-fpm) выполнялся для пользователя / группы никто / никто . Apache работает на демоне пользователя / группы / демона . Он отлично работает при подключении к сокету с несколькими разными сайтами, работающими в пуле запасов. Это сайты с низким приоритетом, использующие PHP для таких вещей, как отображение времени.

В конечном итоге я хочу разработать более эффективное разделение привилегий. Я создал пул для установки roundcube на отдельном виртуальном хосте, принадлежащем пользователю rcuser , группе rcuser (в основном обычная учетная запись оболочки FreeBSD). По привычке я размещаю веб-хосты в / usr / vhosts / , поэтому этот сайт переходит в / usr / vhosts / webmail / , а само приложение хранится в / usr / vhosts / webmail / htdocs / . Все дерево веб-почты принадлежит пользователю и группе rcuser. Все каталоги в этом дереве имеют 750, а файлы - 640 разрешений. Пул выглядит так:

[rcuser]
user = rcuser
group = rcuser
listen = /var/run/php5-fpm-rcuser.sock
listen.owner = rcuser
listen.group = rcuser
listen.mode = 0666
pm = dynamic
pm.max_children = 5
pm.min_spare_servers = 1
pm.start_servers = 2
pm.max_spare_servers = 3

Чтобы Apache мог получить к нему доступ, я создал ACL для каждого файла и каталога, предоставляя демону эквивалентный доступ к / usr / vhosts / webmail / и его подкаталоги. По сути, это означало выполнение find / usr / vhosts / webmail / -type d -exec setfacl -m user: daemon: rwx {} \; и find webmail / -type f -exec setfacl - m user: daemon: rw {} \; Подумал, что это сработает, но это не сработало, и я получил ошибку «файл не найден» при попытке загрузить Roundcube.

Следующее, что я попробовал, - это предоставить другому биту разрешения доступ на чтение к файлам и доступ rx к каталогам. Это сработало. Roundcube отлично работал, но это, очевидно, означает, что другие пользователи могут читать в нем файлы и находить конфиденциальную информацию, например пароли MySQL. Не очень хочу хочу.

Итак, следующее, что я сделал, было find / usr / vhosts / webmail / -exec chmod o-rwx {} \; , чтобы удалить либеральные разрешения, но сохранить исходный rcuser разрешения и демон ACL без изменений. для других пользователей и попытайтесь выяснить, в чем проблема. Поработав немного, я вспомнил, что первый созданный мной пул запускается от имени пользователя nobody , и нашел / usr / vhosts / webmail / -exec -exec setfacl -m user: nobody: rx {} \ ; . Это сработало. По какой-то причине php-fpm хочет, чтобы пользователь nobody имел доступ на чтение и выполнение в каталогах этого второго пула.

Итак, ps -maux показывает, что php-fpm запускает этот пул под правым пользователем rcuser . Для меня это не самая большая проблема в мире, но я не совсем уверен, какие последствия для безопасности это может иметь, когда я начну развертывать эту установку php-fpm на сайтах клиентов. Кроме того, раздражает лишний и, казалось бы, посторонний ACL, о котором нужно беспокоиться.

Могу ли я что-нибудь сделать, чтобы пользователю никто не понадобился этот ACL?

1
задан 12 November 2015 в 00:01
1 ответ

О, хорошо, я рад, что написал все это, потому что я думаю, что это вдохновило на ответ. Пул по умолчанию использовал TCP, и я хотел, чтобы мой новый использовал сокеты домена UNIX. Итак, у меня возникла небольшая синтаксическая проблема. Я случайно добавил лишнюю хрень в строку настройки прокси в Apache.

ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php5-fpm-rcuser.sock|fcgi://localhost:9000/usr/vhosts/webmail/htdocs/$1"

должен был быть

ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php5-fpm-rcuser.sock|fcgi://localhost/usr/vhosts/webmail/htdocs/"

Он подключался к первому пулу, хотя второй пул работал правильно. Это : обозначение порта 9000 и часть $ 1 в конце строки должны были перейти к.

Итак, я исправил Apache и запустил:

find webmail / - exec setfacl -b {} \; , чтобы очистить разрешения ACL, а затем запустить find webmail / -type d -exec setfacl -m user: daemon: rwx {} \ ;; найдите webmail / -type f -exec setfacl -m user: daemon: rw {} \; , чтобы настроить их так, как я хотел.

Настройка кажется хорошей, так что надеюсь, что это поможет кому-нибудь когда-нибудь бороться с разрешениями Apache vhost.

Моя долгосрочная цель - избавиться от необходимости запускать FTPS-сервер или использовать php_admin_value open_basedir

0
ответ дан 4 December 2019 в 06:52

Теги

Похожие вопросы