Wie kann ich docker ohne sudo benutzen?


Zur akzeptierten Antwort gehen


Auf den Dokumentationsseiten von Docker werden alle Beispielbefehle ohne Folgendes angezeigt sudo :

 docker ps
 

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

 sudo docker.io ps
 

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


789





2014-06-06




Anzahl der Antworten: 3


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.


1164


2014-06-06

Um den Docker-Befehl ohne auszuführen sudo , müssen Sie Ihren Benutzer (der über Root-Berechtigungen verfügt) zur Docker-Gruppe hinzufügen. Führen Sie dazu folgenden Befehl aus:

  sudo usermod -aG docker $USER
 

Jetzt muss sich der Benutzer abmelden und erneut anmelden. Diese Lösung wird hier anhand des richtigen Installationsprozesses ausführlich erläutert .


217


2016-02-27

Der Mechanismus, durch den das Hinzufügen eines Benutzers zur Gruppe docker die Berechtigung zum Ausführen von Docker erteilt, besteht darin, auf den Socket von Docker unter zuzugreifen /var/run/docker.sock . Wenn das darin enthaltene Dateisystem /var/run mit aktivierten ACLs bereitgestellt wurde, kann dies auch über ACLs erfolgen.

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

Ich beziehe dies nur der Vollständigkeit halber ein.

Im Allgemeinen empfehle ich, ACLs zu vermeiden, wenn eine gute Alternative basierend auf Gruppen verfügbar ist: Es ist besser, wenn die Berechtigungen in einem System nur anhand von Gruppenmitgliedschaften verstanden werden können. Das Dateisystem nach ACL-Einträgen durchsuchen zu müssen, um die Systemberechtigungen zu verstehen, ist eine zusätzliche Belastung für Sicherheitsüberprüfungen.

Warnung 1 : Dies root entspricht dem Hinzufügen username zur docker Gruppe. Sie können einen Container weiterhin so starten, dass er root Zugriff auf das Host-Dateisystem hat.

Warnung 2 : ACLs sind für Sicherheitsüberprüfungen wesentlich schwieriger als gruppenbasierte Sicherheit. Vermeiden Sie wahrscheinlich nach Möglichkeit ACLs, wenn Sie stattdessen Gruppen verwenden können, zumindest in auditrelevanten Umgebungen.


62


2017-12-01