Ich habe eine Discourse-Instanz, die hinter Apache als Proxy läuft und über einen Socket kommuniziert, wie hier beschrieben: hier.
SELinux ist aktiviert. Um dem httpd die Berechtigung zur Nutzung des Sockets zu erteilen, habe ich dem Socket wie empfohlen einen Kontext zugewiesen, bei dem httpd Lese- und Schreibrechte hat:
semanage fcontext -a -t httpd_sys_rw_content_t /var/discourse/shared/standalone/nginx.http.sock
restorecon /var/discourse/shared/standalone/nginx.http.sock
Das funktioniert. Super!
(Nebenbemerkung: Wäre ein passenderer Kontext nicht httpd_var_run_t, da der Socket selbst keine Inhalte sind und httpd diesen Kontext für andere Laufzeitinfrastrukturen verwendet?)
Jedoch wird die Socket-Datei bei jedem Neustart des Discourse-Containers mit ihrem ursprünglichen Kontext neu erstellt, nicht mit dem neuen – daher muss ich vor der Kommunikation zwischen Apache und Discourse erneut restorecon ausführen. Es ist leicht, das zu vergessen, und dann ist das Forum unzugänglich. Mir kam die Idee, ein Cron-Skript zu verwenden, das regelmäßig restorecon ausführt, damit ich das nicht manuell machen muss, aber das ist ein unordentlicher Hack.
Wie kann ich sicherstellen, dass die Socket-Datei beim Erstellen den korrekten Kontext erhält (oder zumindest im Rahmen des Erstellungsprozesses ihr Kontext zurückgesetzt wird)?