Was ist rootless Docker?
Wenn Sie Docker installieren, benötigt es normalerweise volle Berechtigungen (root) auf dem Hostsystem. Dies schafft ein potenzielles Sicherheitsproblem, da sowohl Container als auch der (Daemon-)Docker-Dienst als Root arbeiten. Bei der Rootless-Installation von Docker wird nur der Docker-Daemon als Root ausgeführt, während die Container als normale Benutzer ausgeführt werden.
Warum spielt es eine Rolle? Denn ist der in einem Container laufende Dienst kompromittiert, kann der Angreifer auch auf die Systemdateien zugreifen. Es gibt keine wirkliche Isolation der Container.
Das Open-Source-Podman-Projekt wurde erstellt, um Container hauptsächlich ohne Root auszuführen. Dies setzte Docker unter Druck, eine ähnliche Funktion zu unterstützen, sodass Container als normale Benutzer ausgeführt werden, der Docker-Dienst (Daemon) jedoch als Root arbeitet.
Diese wurzellose Installation ist jetzt von Docker selbst verfügbar und Sie müssen Podman nicht nur für diese Funktion verwenden.
In diesem Artikel werde ich erklären, wie man Docker ohne Root-Zugriff installiert. Aber bevor ich Ihnen diese Schritte zeige, wollen wir zuerst die Nachteile dieses Modus besprechen.
Nachteil der Ausführung von Docker im Rootless-Modus
Der größte Nachteil dieses Modus ist das Netzwerk, und diese Probleme sind auch in Podman vorhanden.
Standardmäßig verwendet Docker ein wurzelloses Netzwerk.
Weil es mit bis zu 30 Gbit/s am schnellsten ist und IPv4 und IPv6 unterstützt.
Aber es hat Probleme.
Container haben nicht die externe IP der Anfrage und alle Anfragen werden von 127.0.0.1 angezeigt.
Dies ist ein großes Problem, insbesondere wenn Sie einen Schutz einrichten möchten, der DDOS-Angriffe (Distributed Denial-of-Service) einschränkt, da alle Anfragen von derselben Adresse zu stammen scheinen.
Die Verwendung des Slirp4netns-Modus löst dieses Problem und zeigt die ursprüngliche Adresse der Anfrage an. Aber es hat auch zwei Probleme.
- IPv6 wird nicht unterstützt.
- Die Geschwindigkeit ist viel langsamer (ca. 7 Gbit/s).
Voraussetzungen
Der Rootless-Modus verwendet keine Sticky Bits. Sie brauchen newuidmap und newgidmap .
Aus diesem Grund sollten Sie sicherstellen, dass die Pakete newuidmap und newgidmap installiert sind (über das Paket uidmap) und dass es 65.536 untergeordnete IDs gibt.
newuidmap überprüft, ob der Aufrufer der Eigentümer des Prozesses ist, der durch pid angegeben wird .
id -u
1001
whoami
testuser
Überprüfen Sie als Nächstes, ob der Benutzer 65.536 Unter-UIDs hat:
grep ^$(whoami): /etc/subuid
testuser:231072:65536
grep ^$(whoami): /etc/subgid
testuser:231072:65536
Was bedeuten diese Zahlen? Die erste Zahl ist die erste ID, die verwendet werden darf, und die nächste gibt an, wie viele IDs Sie haben. Zum Beispiel beginnt es mit 231072, ID 0 bedeutet 231072 und ID 1000 bedeutet 241072.
Installieren Sie die dbus-user-session und Sicherungsüberlagerungen Pakete.
Verwenden Sie für Debian den Befehl zum Installieren von dbus-user-session:
sudo apt install -y dbus-user-session
Und installieren Sie dann fuse-overlayfs:
sudo apt install -y fuse-overlayfs
Es wird empfohlen, Kernel 5.11 oder höher zu verwenden.
Installation von Docker im Rootless-Modus
Jetzt kommen Sie zum Hauptteil. Der erste Teil ist die normale Docker-Installation und dann der Rootless-Teil.
Ich zeige die Schritte für Ubuntu.
Installieren Sie die üblichen Docker-Pakete
Deinstallieren Sie zuerst alle vorhandenen Docker-Pakete:
sudo apt remove docker docker-engine docker.io containerd runc
Und dann Docker auf Ubuntu installieren:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
Vergewissern Sie sich, dass Docker Engine korrekt installiert ist, indem Sie das hello-world-Image ausführen.
sudo docker run hello-world
Da der Docker-Daemon bereits läuft, deaktivieren Sie ihn zuerst.
sudo systemctl disable --now docker.service docker.socket
Installieren Sie das Rootless-Paket
Installieren Sie nun das Paket docker-ce-rootless-extras, indem Sie das offizielle Skript mit dem Curl-Befehl herunterladen:
curl -fsSL https://get.docker.com/rootless | sh
Folgen Sie den Vorschlägen auf dem Bildschirm und Sie haben Docker ohne Root installiert.
Am Ende dieses Installationsbildschirms werden zwei Dinge geschrieben:export=xxx
Kopieren Sie sie und fügen Sie sie in die letzte .bashrc-Datei oder, wenn Sie ZSH verwenden, die .zshrc-Datei ein. Geben Sie die soeben geänderten rc-Dateien ein.
Führen Sie nach Abschluss der Installation den Daemon Docker rootless aus:
systemctl --user start docker
Rootless Docker automatisch bei jedem Start ausführen:
systemctl --user enable docker
sudo loginctl enable-linger $(whoami)
Genießen Sie es.
Autoreninfo:Mead Naji ist Webentwickler und Linux-Entwickler der alten Schule.