У меня есть экземпляр Discourse, проксированный через Apache и общающийся через сокет, как описано здесь.
У меня включен SELinux, поэтому, чтобы предоставить httpd разрешение на использование сокета, я назначил сокету контекст, в котором у httpd есть права на чтение и запись, как рекомендовано:
semanage fcontext -a -t httpd_sys_rw_content_t /var/discourse/shared/standalone/nginx.http.sock
restorecon /var/discourse/shared/standalone/nginx.http.sock
Это работает. Отлично!
(Кстати: не будет ли более подходящим контекстом httpd_var_run_t, поскольку сам сокет не является контентом, и именно этот контекст используется httpd для другой инфраструктуры времени выполнения?)
Однако при каждом перезапуске контейнера Discourse файл сокета создается заново с его исходным контекстом, а не с новым — поэтому мне приходится выполнять restorecon перед тем, как Apache сможет связаться с Discourse. Легко забыть сделать это и в итоге получить недоступный форум. Мне пришло в голову, что я мог бы использовать скрипт cron для периодического запуска restorecon, чтобы не помнить об этом вручную, но это некрасивый хак.
Как можно гарантировать, что файл сокета получит правильный контекст при создании (или хотя бы чтобы его контекст сбрасывался в процессе создания)?