Задать вопрос
@paper_castle
Фрилансер

Как правильно настроить права для веб-сервере apache2+php-fpm?

Есть установленные httpd+php-fpm:
- кроме рута, создана группа `http`, куда входят юзеры `http` (от него запускается apache) и `devops` (реальный юзер, который должен иметь право редактирования и выполнения)
- домашняя папка юзера `http` находится в `/home/http/`, там же в `/home/http/sites/` лежат директории нескольких сайтов, они же виртуальные хосты апача;
- все файлы в директории `/home/http/` имеют группу `http` и пользователя `http` и права `775` для директорий + `664` для файлов (вместо привычных 755 и 644 - для того чтобы `devops` мог вносить изменения).
- php-fpm со следующими настройками пула;

[http]
user = http
group = http
listen.owner = http
listen.group = http
listen.mode = 0660
listen.allowed_clients = 127.0.0.1
listen = /run/php-fpm/php-fpm-httpd.sock
pm = dynamic
pm.max_children = 4
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 2
catch_workers_output = yes


- для `httpd` есть соотв. секция с указанием сокета.
Если указана в общем конфиге - апач отдает файлы без выполнения.
Если добавить в соотв. вирутальный хост - получаем 403.

<IfModule proxy_fcgi_module>
    <FilesMatch "\.(php)$">
        SetHandler "proxy:unix:/run/php-fpm/php-fpm-httpd.sock"
    </FilesMatch>
</IfModule>


httpd 2.4.62, php (fpm-fcgi) 8.2.27, страртует всё через systemd

После апдейта ПО - конфиги не изменились, но апач перестал обрабатывать php (access denied, HTTP 403).
В логах апача:

AH01071: Got error 'PHP message: PHP Warning:  PHP Request Startup: Failed to open stream: Permission denied in Unknown on line 0; Unable to open primary script:


1. На что ещё можно посмотреть, где искать корень проблемы?
гугл и чатгпт опрошены, пока что ни одно из потенциальный решений проблемы не помогло.
2. Как было бы правильнее в принципе?
3. Есть ли смысл запускать php-fpm от других user:group?
  • Вопрос задан
  • 50 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Самое первое, что стоит проверять в таких случаях - это selinux.
Самое второе - что все папки в цепочке от корня читаемы для пользователя пхп.

А если говорить в целом, запускать пхп от пользователя хттп довольно бессмысленно. Пользователь фпм должен совпадать с владельцем файлов. То есть запускать надо от девопса.

Лично я делаю так: веб-сервер работает под своими группой/пользователем, а пхп - под SSH логином пользователя сайта. У вас это может быть видимо этот девопс.
Чтобы их поженить, просто добавляем пользователя веб-сервера в группу пользователя, usermod -a -G devops www-data, а папочке веб-сервера соответственно выставляются права 750. Веб-серверу нужно только чтение, и он его имеет через группу. Таким образом можно соорудить такой мини-хостинг, разные ползователи не могут ходить в папки друг друга, и при этом нет обычной чехарды, когда пользователь ssh/ftp и пользователь пхп-фпм разные.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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