Problembeschreibung:
Ich habe einen Webservice, der Docker verwendet, um nginx und haproxy (unter anderem Container) auszuführen. Ich möchte diese Docker-Images über ein privates Docker-Hub-Register bereitstellen und daher kein TLS-Zertifikat in die Images einbauen, damit jeder Kunde sein eigenes Zertifikat in den Container (nginx und haproxy) einbinden kann.
Um den Haproxy-Container zu sichern, führe ich ihn ohne Root-Rechte aus (Port über 1000 wird in Docker-Compose einem Port unter 1000 zugeordnet). Der Nginx-Container basiert auf dem offiziellen Nginx-Image und verwendet daher nur Root, wenn der Dienst gestartet wird, und wechselt danach zum Nginx-Benutzer.
Um die Container weiter zu sichern, habe ich Docker-Remapping eingerichtet (Standard-Setup mit dem Standard-Dockremap-Benutzer).
Problem:
Der öffentliche und private Schlüssel des TLS-Zertifikats werden in den Containern als Benutzer „nobody“ gemountet und daher können die Haproxy- und Nginx-Container diese Dateien nicht lesen, weil sie zum Lesen der Dateien unterschiedliche (nicht-Root-)Benutzer verwenden.
Lösungen (bisher):
Ich kann die TLS-Dateien für alle lesbar machen, z. B. 644. Das funktioniert, ist aber eine furchtbar unsichere Lösung.
Ich könnte mein eigenes Nginx-Image erstellen, genau wie ich es mit dem Haproxy-Image gemacht habe, und die Containerbenutzer zur Gruppe „Nobody“ hinzufügen, damit ich die Zertifikatsberechtigungen auf 640 ändern kann. Das ist ein hässlicher Hack.
Docker-Remapping löschen, damit ich Zertifikatsdateien mit derselben UID wie der Benutzer in den nginx- und haproxy-Containern mounten kann. Dies würde bedeuten, dass ich die Sicherheit von Docker-Remapping verliere und die Zertifikatsdateien dieselbe UID wie der Benutzer in den haproxy- und nginx-Containern benötigen.
Erstellen Sie während der Installation (und beim Aktualisieren der Basisimages oder der Zertifikatsdateien) neue Images auf dem Server meines Kunden mit meinen vorhandenen Images aus meinem privaten Docker-Repository als Basisimages. Die Docker-Build-Dateien auf dem Server meines Kunden sind sehr einfach und dienen nur dazu, die SSL-Zertifikatsdateien mit den richtigen Berechtigungen in die Container zu kopieren.
Frage:
Gibt es eine Möglichkeit, die Host-UID der UID des Benutzers innerhalb des Containers zuzuordnen, sodass gemountete Dateien die richtige UID haben?