Ho un’istanza di Discourse gestita tramite proxy Apache e che comunica tramite un socket, come descritto qui.
Ho SELinux abilitato, quindi per concedere a httpd il permesso di utilizzare il socket, ho assegnato al socket un contesto in cui httpd ha permessi di lettura e scrittura, come consigliato:
semanage fcontext -a -t httpd_sys_rw_content_t /var/discourse/shared/standalone/nginx.http.sock
restorecon /var/discourse/shared/standalone/nginx.http.sock
Questo funziona. È ottimo!
(Nota a margine: sarebbe più appropriato un contesto httpd_var_run_t, dato che il socket stesso non è contenuto e questo è il contesto utilizzato da httpd per altre infrastrutture di runtime?)
Tuttavia, ogni volta che il container di Discourse viene riavviato, il file socket viene ricreato con il suo contesto originale, non con quello nuovo; di conseguenza devo eseguire restorecon su di esso prima che Apache possa comunicare con Discourse. È facile dimenticare di farlo e ritrovarsi con un forum inaccessibile. Mi è venuto in mente che potrei utilizzare uno script cron per eseguire restorecon periodicamente, così non devo ricordarmi di farlo manualmente, ma è un workaround poco elegante.
Come posso assicurarmi che il file socket ottenga il contesto corretto alla creazione (o almeno che il suo contesto venga resettato come parte del processo di creazione)?