Gute Nachricht: Der neue Docker (Version 19.03 (derzeit experimentell)) kann ohne Root-Zugriff ausgeführt werden, um die Probleme zu beseitigen, die bei der Verwendung eines Root-Benutzers auftreten können. Keine Probleme mehr mit erhöhten Berechtigungen, Root-Rechten und allem, was Ihren Computer öffnen könnte, wenn Sie es nicht wollten.
Video dazu aus [DockerCon 2019] Docker-Daemon mit Rootless-Modus härten
Ein paar Vorsichtsmaßnahmen für den rootless Docker-Modus
Die Docker-Ingenieure sagen, dass der rootless-Modus nicht als Ersatz für die gesamte Suite der Docker-Engine-Funktionen angesehen werden kann. Einige Einschränkungen für den rootless-Modus sind:
- cgroups-Ressourcensteuerungen, Apparmor-Sicherheitsprofile, Checkpoint / Restore, Overlay-Netzwerke usw. funktionieren nicht im rootless-Modus.
- Das Freilegen von Ports aus Containern erfordert derzeit einen manuellen Socat-Hilfsprozess.
- Nur Ubuntu-basierte Distributionen unterstützen Overlay-Dateisysteme im rootlosen Modus.
- Der Rootless-Modus ist derzeit nur für nächtliche Builds verfügbar, die möglicherweise nicht so stabil sind, wie Sie es gewohnt sind.
Ab Docker 19.3 ist dies veraltet (und gefährlicher als nötig):
Im Docker-Handbuch heißt es dazu:
Nicht-Root-Zugriff gewähren
Der Docker-Daemon wird immer als Root-Benutzer ausgeführt, und seit Docker Version 0.5.2 wird der Docker-Daemon nicht mehr an einen TCP-Port, sondern an einen Unix-Socket gebunden. Standardmäßig gehört dieser Unix-Socket dem Benutzer root, sodass Sie standardmäßig mit sudo darauf zugreifen können.
Wenn Sie (oder Ihr Docker-Installationsprogramm) ab Version 0.5.3 eine Unix-Gruppe namens docker erstellen und Benutzer hinzufügen, macht der Docker-Daemon den Besitz des Unix-Sockets für die Docker-Gruppe lesbar / beschreibbar, wenn der Daemon gestartet wird . Der Docker-Daemon muss immer als Root-Benutzer ausgeführt werden. Wenn Sie den Docker-Client jedoch als Benutzer in der Docker-Gruppe ausführen, müssen Sie nicht allen Client-Befehlen sudo hinzufügen. Ab 0.9.0 können Sie festlegen, dass eine andere Gruppe als docker den Unix-Socket mit der Option -G besitzen soll.
Warnung: Die Docker-Gruppe (oder die mit -G angegebene Gruppe) ist root-äquivalent. siehe Docker Daemon Angriffsfläche Details und diese Blogpost auf Warum lassen wir nicht Nicht-Root - Benutzer ausführen Docker in CentOS, Fedora oder RHEL (dank michael-n).
In der jüngsten Version des experimentellen rootless-Modus auf GitHub erwähnen Ingenieure, dass der rootless-Modus das Ausführen von dockerd als nichtprivilegierter Benutzer unter Verwendung von user_namespaces (7), mount_namespaces (7) und network_namespaces (7) ermöglicht.
Benutzer müssen dockerd-rootless.sh anstelle von dockerd ausführen.
$ dockerd-rootless.sh --experimental
Da der Rootless-Modus experimentell ist, müssen Benutzer dockerd-rootless.sh immer mit –experimental ausführen.
Wichtig zu lesen: Schritte nach der Installation für Linux (enthält auch Links zu den Details zu Docker Daemon Attack Surface ).
Verwalten Sie Docker als Nicht-Root-Benutzer
Der Docker-Dämon wird an einen Unix-Socket anstelle eines TCP-Ports gebunden. Standardmäßig gehört der Unix-Socket dem Benutzer root und andere Benutzer können nur mit sudo darauf zugreifen. Der Docker-Daemon wird immer als Root-Benutzer ausgeführt.
Wenn Sie sudo nicht verwenden möchten, wenn Sie den Befehl docker verwenden, erstellen Sie eine Unix-Gruppe mit dem Namen docker und fügen Sie Benutzer hinzu. Wenn der Docker-Dämon gestartet wird, kann die Docker-Gruppe den Besitz des Unix-Sockets lesen / schreiben.
Fügen Sie die Andockgruppe hinzu, falls sie noch nicht vorhanden ist:
sudo groupadd docker
Fügen Sie den verbundenen Benutzer "$ USER" zur Docker-Gruppe hinzu. Ändern Sie den Benutzernamen so, dass er Ihrem bevorzugten Benutzer entspricht, wenn Sie Ihren aktuellen Benutzer nicht verwenden möchten:
sudo gpasswd -a $USER docker
Führen Sie entweder eine newgrp docker
oder eine Abmeldung / Anmeldung aus, um die Änderungen an Gruppen zu aktivieren.
Sie können verwenden
docker run hello-world
um zu überprüfen, ob Sie docker ohne sudo ausführen können.