Nginx.http.sock neu erstellt mit falschem selinux context

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)?

Ich würde ein Neustart-Skript erstellen, das den Container startet und die Berechtigungen ändert (und ein weiteres, das einen Rebuild durchführt).

Das, was ein Neustart-Skript nicht erkennt, ist das Durchführen von Upgrades über das Web aus dem Admin-Bereich – genau das ist mir beim letzten Mal passiert und hat mich dazu veranlasst, zu überlegen, ob es eine Lösung für alle Fälle gibt.

Ich sollte auch sagen: Ich verstehe nicht, warum der Socket beim Erstellen nicht den korrekten Kontext erhält. SELinux weiß offensichtlich, was der Standardkontext für den Socket sein sollte, wie der Aufruf von restorecon zeigt. (Außerdem kann ich den Eintrag für den Socket, der durch die Ausführung von semanage fcontext erstellt wurde, in /etc/selinux/targeted/contexts/files/file_contexts.local sehen.)