Я тестирую развёртывание Discourse на базе AlmaLinux 9 (производной от CentOS) с включённым SELinux и внешним nginx.
Поскольку контейнер на базе Ubuntu не поддерживает SELinux, при каждом запуске контейнера он заменяет unix-сокет на новый файл без меток безопасности. В результате nginx не может обращаться к нему, пока я не выполню restorecon для файла, чтобы назначить ему контекст безопасности, разрешённый для доступа nginx. Очевидно, что это не подходит как решение для продакшена.
Я не хочу использовать semanage permissive -a httpd_t, так как мне бы хотелось реально использовать возможности SELinux для единственного сервиса, который открыт для внешнего мира. ![]()
Всё работает, если проксировать на сетевой порт вместо unix-сокета:
setsebool -P httpd_can_network_connect 1- не использовать
templates/web.socketed.template.yml expose: - "8008:80"- во внешнем nginx указать
proxy_pass http://127.0.0.1:8008
Есть ли какие-либо недостатки у такого подхода? Стоит ли изменить какие-либо параметры, например, ограничения подключений, в этой конфигурации?
После более тщательного тестирования я подробно опишу это в документации, и если возникнут дополнительные вопросы, я включу их в свой материал.