Frage Wie kann ich Docker ohne Sudo verwenden?


Auf den Dokumentationsseiten von Docker werden alle Beispielbefehle ohne angezeigt sudo, wie dieser:

docker ps

Unter Ubuntu wird die Binärdatei aufgerufen docker.io. Es geht auch nicht ohne sudo:

sudo docker.io ps

Wie kann ich Docker so konfigurieren, dass ich nicht jeden Docker-Befehl mit sudo voranstellen muss?


636
2018-06-06 08:17


Ursprung


Vergiss nicht, ufw zu aktivieren;) - Rinzwind
Auf Ubuntu 14.04 es gibt auch 'docker' binär. - anatoly techtonik
@anatolytechtonik Ich habe auch 'docker' anstelle von 'docker.io' in Ubuntu 14.04 LTS verwendet - Nabin
Empfohlene Installation ist nicht  der Docker in den Standard-Ubuntu-Repos; stattdessen, Anweisungen hier ( docs.docker.com/engine/installation/linux/ubuntulinux ), empfehle die Verwendung des Andockers Repo. Entferne alle vorhandenen Docker-Sachen und vergewissere dich, dass du die richtige von der richtigen Quelle bekommst: apt-cache policy docker-engine (apt URL sollte von dockerproject.org stammen) - michael
Wie wäre es mit einem Alias ​​:? Auf diese Weise verwenden Sie immer noch Sudo mit Passwortschutz. Alias ​​docker = "sudo docker" - Andrej Panjkov


Antworten:


Das Docker Handbuch hat dazu folgendes zu sagen:

Geben Sie keinen Root-Zugriff

Der Docker-Dämon wird immer als Root-Benutzer ausgeführt, und seit der Docker-Version 0.5.2 bindet der Docker-Daemon an einen Unix-Socket statt an einen TCP-Port. Standardmäßig gehört der Unix-Socket dem Benutzer root. Daher können Sie standardmäßig auf ihn mit sudo zugreifen.

Ab Version 0.5.3, wenn Sie (oder Ihr Docker-Installer) eine Unix-Gruppe namens docker erstellen und Benutzer hinzufügen, macht der Docker-Dämon die Eigentümerschaft des Unix-Sockets von der Docker-Gruppe beim Starten des Daemons les- und schreibbar . Der Docker-Dämon 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 Version 0.9.0 können Sie angeben, dass eine andere Gruppe als Docker den Unix-Socket mit der Option -G besitzen soll.

Warnung: Die Andockgruppe (oder die mit -G angegebene Gruppe) ist root-äquivalent; sehen Docker Daemon Attack Oberflächendetails und diesen Blogpost auf Warum lassen wir Nicht-Root-Benutzer Docker nicht in CentOS, Fedora oder RHEL laufen?  (Danke, Michael-n).


Wichtig zu lesen: Nachinstallationsschritte für Linux (es verlinkt auch zu Docker Daemon Attack Oberflächendetails).

Verwalten Sie Docker als Nicht-Root-Benutzer

Der Docker-Daemon bindet an einen Unix-Socket statt an einen TCP-Port. Standardmäßig gehört der Unix-Socket dem Benutzer root, und andere Benutzer können nur mit sudo darauf zugreifen. Der Docker-Dämon wird immer als Root-Benutzer ausgeführt.

Wenn Sie bei der Verwendung des Befehls docker nicht sudo verwenden möchten, erstellen Sie eine Unix-Gruppe namens docker und fügen Sie Benutzer hinzu. Wenn der Docker-Daemon gestartet wird, wird die Inhaberschaft des Unix-Sockets von der Docker-Gruppe gelesen / beschrieben.


  • Fügen Sie die Andockgruppe hinzu, falls sie noch nicht existiert:

    sudo groupadd docker
    
  • Fügen Sie der Docker-Gruppe den verbundenen Benutzer "$ USER" 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
    
  • Entweder a newgrp docker oder Abmelden / Ein, um die Änderungen an Gruppen zu aktivieren.

  • Sie können verwenden

    docker run hello-world
    

    um zu überprüfen, ob Docker ohne Sudo ausgeführt werden kann.


952
2018-06-06 08:24



Ist das nicht die unsicherste Architektur für die Produktion? Ich muss etwas verpassen - matt
Ja, aber jeder privilegierte Prozess eröffnet Potenzial für Exploit. Ist Docker so tief in das Betriebssystem eingebunden, dass es wirklich diese Privilegien vorschreibt? - matt
newgrp docker funktionierte nicht für mich, ich musste mich ausloggen. - lolmaus - Andrey Mikhaylov
Es lohnt sich, darauf hinzuweisen, dass dies für den Benutzer gilt uneingeschränkter, nicht passwortgeschützter Root-Zugriff. Siehe Details der Verwundbarkeit hier - Chris Foster
Sie müssen den Docker-Dämon NICHT neu starten, damit diese Änderung stattfindet !! lassen Sie den Benutzer, den Sie gerade hinzugefügt haben, abmelden und dann wieder rein - Tommy


So führen Sie den Andock-Befehl ohne aus sudo, müssen Sie Ihren Benutzer (der über Root-Berechtigungen verfügt) zur Docker-Gruppe hinzufügen. Für diesen Lauf folgenden Befehl:

 sudo usermod -aG docker $USER

Lassen Sie den Benutzer abmelden und loggen Sie sich dann erneut ein. Diese Lösung wird gut erklärt Hier mit dem richtigen Installationsvorgang.


152
2018-02-27 19:57



Führen Sie nach dem Hinzufügen von Benutzer zu Gruppe folgenden Befehl aus: sg Gruppenname -c "bash" - madjardi
brauche das Betriebssystem nicht wirklich neu zu starten. Einfach abmelden und erneut einloggen. - binW
Sie müssen das Betriebssystem nicht neu starten, damit diese Änderung stattfindet! Das wird alle laufenden Container bombardieren! Lassen Sie den Benutzer, den Sie gerade hinzugefügt haben, abmelden. - Tommy
Wie unterscheidet sich dieser Befehl von "sudo gpasswd -a $ {USER} docker" in anderer Antwort? Wenn überhaupt... - Ashley Aitken
Könnten Sie bitte die Warnung der Dokumentation hinzufügen: "Die Docker-Gruppe [...] ist root-äquivalent", so dass die Leute die Möglichkeit haben, darüber nachzudenken - Murmel


Der Mechanismus, mit dem ein Benutzer zur Gruppe hinzugefügt wird docker gewährt Erlaubnis, Andockfenster auszuführen, um Zugriff auf den Socket von Andockfenster zu erhalten /var/run/docker.sock. Wenn das Dateisystem, das enthält /var/run wurde mit ACLs aktiviert, dies kann auch über ACLs erreicht werden.

sudo setfacl -m user:username:rw /var/run/docker.sock

Ich schließe das nur der Vollständigkeit halber mit ein.

Im Allgemeinen empfehle ich, ACLs zu vermeiden, wenn eine gute Alternative auf der Basis von Gruppen verfügbar ist: Es ist besser, wenn die Privilegien in einem System verstanden werden können, indem nur Gruppenmitgliedschaften betrachtet werden. Das Durchsuchen des Dateisystems nach ACL-Einträgen, um Systemberechtigungen zu verstehen, ist eine zusätzliche Belastung für Sicherheitsaudits.


23
2017-12-01 16:08



Es funktionierte am 16.04 - edib
Dies ist, was ich brauchte, andere Antworten, verlangen, dass der Benutzer root Erlaubnis hat. Danke viel! - Mrinal Saurabh
Viel besser imo. Der Gruppendocker ist root-äquivalent und das ist immer ein Zeichen von Gefahr. Und ich sehe keinen Nachteil darin, Besitz von dieser einen Datei zu übernehmen. - Xerus
Können Sie beschreiben, welche Befehle ausgeführt werden sollten, um "bekomme Zugriff auf den Socket von Docker bei /var/run/docker.sock"? - Yuval Atzmon
@Xerus wenn ich das richtig verstehe, Wer auch immer an diesen Socket schreiben kann, kann root-äquivalente Privilegien erhalten. Wenn jemand über die ACL Zugriff auf diesen Socket erhält, hat dies denselben Sicherheitseffekt wie das Hinzufügen dieser Person zur Andockgruppe. - Paŭlo Ebermann