Я использую 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?
О, хорошо, я рад, что написал все это, потому что я думаю, что это вдохновило на ответ. Пул по умолчанию использовал 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