Безопасно настроить apache2 с mpm_event и php-fpm

Вопрос или проблема

Я запускаю небольшой веб-сервер apache2, предоставляющий различные независимые PHP веб-приложения, такие как nextcloud, личные PHP проекты и т. д. У меня работает несколько экземпляров PHP-fpm (разные версии PHP и пулы). Я недавно решил переключиться с модуля mpm_prefork apache2 на mpm_event, чтобы поддерживать HTTP2. До этого момента я запускал разные виртуальные хосты под разными пользователями, чтобы предотвратить взаимный доступ между ними. Однако это больше невозможно с mpm_event.

Теперь возможно запускать каждый пул PHP-fpm под разным пользователем (как указано в этом вопросе на Stack Overflow). Однако для этого сокет php-fpm должен быть доступен пользователю www-data:
srw-rw—- 1 www-data www-data 0 10 окт 12:31 /var/run/php/php8.1-fpm-cloud.sock

Насколько я понимаю, это означает, что процесс, работающий под www-data, может просто подключиться к этому сокету, чтобы выполнять код от имени пользователя cloud, которого я создал, чтобы изолировать виртуальные хосты друг от друга. Это означает, что такая конфигурация не предоставляет никакой Sicherheitsvorteil по сравнению с решением одного пользователя.

Подводя итог, мой вопрос таков:

обеспечивает ли эта конфигурация какие-либо преимущества в безопасности? Я чего-то не понимаю?
есть ли лучший способ изолировать виртуальные хосты друг от друга с mpm_event?
может ли правильная конфигурация PHP open_basedir предотвратить эту проблему? Действительно ли open_basedir безопасен для этой цели?

Спасибо заранее!

Ответ или решение

Настройка Apache2 с mpm_event и PHP-FPM: Вопросы Безопасности

Ваша конфигурация Apache2 с использованием mpm_event и PHP-FPM действительно представляет собой шаг вперед с точки зрения производительности и поддержки HTTP/2. Однако, вы правы в том, что использование разных пользователей для вируальных хостов в mpm_event потребует другого подхода по сравнению с mpm_prefork. Рассмотрим ваши вопросы более подробно.

1. Обеспечивает ли такая конфигурация какие-либо преимущества с точки зрения безопасности?

Конфигурация, при которой каждый PHP-FPM пул работает под отдельным пользователем, действительно может обеспечить уровень изоляции. Однако, как вы правильно заметили, сокет должен быть доступен пользователю www-data, что создает уязвимость. В случае, если кто-то сможет выполнить код под пользователем www-data, он сможет взаимодействовать с сокетом и иметь доступ к процессам других пулов.

Таким образом, в настоящее время такая конфигурация не предлагает значительного преимущества в плане безопасности по сравнению с единственным пользователем. Чтобы минимизировать риски, необходимо использовать дополнительные механизмы безопасности.

2. Существует ли лучший способ изоляции виртуальных хостов с использованием mpm_event?

Существует несколько стратегий, которые можно использовать для повышения безопасности:

  • Использование отдельного пользователю для каждого домена: Это требует дополнительных настроек, таких как управление правами доступа к сокетам. Вы можете создать группу для пользователей, которым необходим доступ к сокетам, и разрешить только этой группе доступ к ним.

  • Использование UNIX-политик безопасности (AppArmor или SELinux): Эти технологии позволяют назначать профили безопасности для процессов, ограничивая их доступ к ресурсам и файловой системе.

  • Настройки конфигурации сервера: Вы можете использовать настройки на уровне Apache, такие как AllowOverride, чтобы ограничить доступ к конфиденциальной информации и обеспечить более строгие параметры безопасности.

  • Изоляция на уровне контейнеров: Использование Легких контейнеров, таких как Docker или LXC, для запуска изолированных экземпляров PHP-FPM под различными пользователями, может обеспечить более высокую степень изоляции.

3. Может ли корректная настройка open_basedir решить эту проблему? Насколько надежен open_basedir для этой цели?

Параметр open_basedir позволяет ограничивать доступ PHP к определенным директориям, и он может быть полезен для изоляции файловой системы между пользователями. Однако он не обеспечивает полной изоляции процессов и может не дать 100% защиты от уязвимостей.

Важно помнить, что open_basedir можно обойти различными способами, особенно если не настроены другие параметры безопасности. Поэтому лучше использовать его в сочетании с другими механизмами, такими как доступ к сокетам и политикам безопасности.

Заключение

Конфигурация Apache2 с mpm_event и PHP-FPM предлагает определенные преимущества, но требует более тщательной настройки для достижения безопасности. Чтобы изолировать виртуальные хосты друг от друга и обеспечить их безопасность, рассмотрите возможность использования AppArmor или SELinux, а также настройку прав доступа к сокетам.

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

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

Оцените материал
Добавить комментарий

Капча загружается...