it-swarm.com.de

"Docker-Compose Up" als Root-Benutzer oder Nicht-Root-Benutzer?

Nach dem Lesen einiger Artikel bin ich mir immer noch nicht sicher, welchen Benutzer ich zum Ausführen eines Docker-Containers verwenden soll. Gibt es Sicherheitsbedenken beim Ausführen eines Docker-Containers als Root-Benutzer? Ist es in Ordnung, Docker-Container als Root-Benutzer auszuführen? OR sollte ich meinen normalen Benutzer verwenden, ihn zur Gruppe "Docker" hinzufügen und dann meine Container ausführen OR) sollte ich einen zusätzlichen Benutzer nur zum Verwalten/Erstellen von Docker-Containern erstellen?

root @ myDockerHost:/opt/myDockerContainer # docker-compose up -d

VS

chris @ myDockerHost:/opt/myDockerContainer # docker-compose up -d

VS

dockerusr @ myDockerHost:/opt/myDockerContainer # docker-compose up -d

(Ich spreche über die Benutzer auf meinem Docker-Host - nicht über den Benutzer in einem Container!)

5
r00tusr

r00tusr!

Ich stimme dafür, dass Container immer als reguläre Benutzer ausgeführt werden.

In einem Produktionssystem werden Ihre Container nicht als Root ausgeführt. Selbst in Nicht-Produktionssystemen dürfen die Benutzer, die Ihren Container ausführen, möglicherweise keine Programme als Root ausführen.

Deshalb möchte ich, dass sie als nicht privilegierte Benutzer ordnungsgemäß funktionieren, auch wenn es schwierig ist.

Es gibt auch die Sicherheitsüberlegung. Die allgemeine Regel, der professionelle Sysadmins folgen, lautet, niemals etwas als Root auszuführen, es sei denn, es muss wirklich, wirklich. Sobald ein Programm als Root ausgeführt wird, hat es die volle Kontrolle über den Computer und kann mit dem Computer, den es ausführen soll, alles tun. Ob es sich nun um die guten Werke handelt, die der Autor beabsichtigt hat, oder um schändliche Werke eines Neer-do-Well, der durch eine Sicherheitslücke, die der Autor nicht zu schließen glaubte, in das Programm des Autors eindringt.

Da wir endlich erfahren haben, dass wir wirklich, wirklich nicht vorhersagen können, welche Programme Fehler aufweisen, gehen wir einfach kein Risiko mehr ein.

Vielen Dank! Mike

2
Mike Diehn

Es macht wenig Unterschied. Das docker-compose Befehl stellt eine Verbindung zur Datei docker.sock her, auch bekannt als Docker-API, um alle Containerbefehle auszuführen. Standardmäßig ist diese API nur für den Root-Benutzer unter Linux zugänglich, sodass häufig Benutzer Befehle mit Sudo ausführen.

Sie können Docker so konfigurieren, dass Nicht-Root-Benutzer auf diese API zugreifen können. Stellen Sie jedoch sicher, dass Sie diesen Benutzern den Root-Zugriff auf Ihrem Host anvertrauen, da die API diese Zugriffsebene bietet. Siehe diese Antwort für Details darüber, wie Benutzer diesen Zugriff erhalten. Der Dockerd-Daemon ist normalerweise so konfiguriert, dass er als Root ausgeführt wird. Der Benutzer, der auf diese API zugreift, macht kaum einen Unterschied (der Rootless-Modus befindet sich derzeit im experimentellen Modus).

Das wichtige Detail besteht darin, Anwendungen in Ihrem Container als Nicht-Root-Benutzer auszuführen. Dies entspricht systemd, das als Root ausgeführt wird und ein Programm als Nicht-Root-Benutzer startet. Sie konfigurieren diesen Benutzer in der Docker-Datei, in docker-compose.yml oder in Ihrem docker run -u CLI.

Der Grund, warum ich "kleiner Unterschied" sage, ist, dass eine Compose-Datei Host-Mounts konfigurieren kann, die einen relativen Pfad haben. Wenn du läufst docker-compose Befehl als root oder ein anderer Benutzer, diese Host-Mounts können ein anderer Pfad sein, und die Dateien können einer anderen UID gehören, die möglicherweise der UID Ihrer Anwendung im Container zugeordnet ist oder nicht. Darüber hinaus fällt mir kein Unterschied zwischen docker-compose als Benutzer oder Root.

1
BMitch