Проблема с разрешениями: зачем пользователю никто не нужен во втором пуле 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

Другие вопросы по тегам