Проблема с разрешениями: зачем пользователю никто не нужен во втором пуле php-fpm?
Я использую FreeBSD 10.2 со скомпилированным Apache 2.4.17 с php-fpm. Пул по умолчанию ([www]
, почти стандартная настройка php-fpm) работала на пользователя / группу nobody
/nobody
, Apache работает от пользователя / группы daemon
/daemon
, Он отлично работает при подключении к сокету с несколькими различными сайтами, работающими в пуле. Это сайты с низким приоритетом, использующие PHP для отображения времени.
В конце концов, я хочу выработать лучшее разделение привилегий. Я создал пул для установки круглого куба на отдельном хосте, принадлежащем пользователю 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 для каждого файла и каталога, давая daemon
эквивалентный доступ к /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 у меня возникла ошибка "файл не найден".
Следующее, что я попробовал, дало other
бит доступа для чтения файлов и доступа к каталогам. Это сработало. Roundcube работал отлично, но это, очевидно, означает, что другие пользователи могут читать файлы в нем и находить конфиденциальную информацию, такую как пароли MySQL. Не очень хочу, хочу.
Итак, следующее, что я сделал, было find /usr/vhosts/webmail/ -exec chmod o-rwx {} \;
удалить либеральные разрешения, но сохранить оригинал rcuser
разрешения и daemon
ACL не повреждены. для других пользователей и попробуйте решить, где проблема. После некоторого перебора я вспомнил первый созданный пул, который запускается как пользователь nobody
и сделал find /usr/vhosts/webmail/ -exec -exec setfacl -m user:nobody:r-x {} \;
, Это сработало. По какой-то причине php-fpm хочет пользователя nobody
иметь права на чтение и выполнение в каталогах этого второго пула.
Так, ps -maux
показывает, что php-fpm запускает этот пул под нужным пользователем rcuser
, Для меня это не самая большая проблема в мире, но я не совсем уверен, как это может повлиять на безопасность, когда я начну развертывать эту установку php-fpm на сайтах клиентов. Кроме того, раздражает дополнительный и, казалось бы, посторонний ACL.
Есть ли что-нибудь, что я могу сделать, чтобы сделать пользователя nobody
не нужен этот ACL?
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 {} \;; find webmail/ -type f -exec setfacl -m user:daemon:rw {} \;
чтобы установить их, как я хотел их все время.
Кажется, что установка хороша, но надеюсь, что это поможет кому-то бороться с разрешениями Apache vhost.
Моя долгосрочная цель - больше не запускать сервер FTPS или использовать php_admin_value open_basedir