Rootless Docker unter Debian – ausprobiert und doch bei Rootful geblieben

  Lars Müller   Lesezeit: 4 Minuten Auf Mastodon ansehen

Rootless Docker verspricht zusätzliche Sicherheit, weil der Docker-Daemon ohne Root-Rechte läuft. Ich wollte damit meinen Debian-Server weiter absichern, habe die Umstellung aber schließlich abgebrochen.

rootless docker unter debian – ausprobiert und doch bei rootful geblieben

Auf meinem Debian-Server laufen mittlerweile zahlreiche Dienste in Docker-Containern. Darunter Nextcloud, Datenbanken und verschiedene selbst gehostete Anwendungen. Da ich meinen Server möglichst gut absichern möchte, beschäftige ich mich regelmäßig mit zusätzlichen Sicherheitsmaßnahmen.

So bin ich auch beim Thema Rootless Docker gelandet. Die Idee dahinter fand ich interessant: Docker betreiben, ohne dass der Docker-Daemon mit Root-Rechten auf dem Hostsystem läuft.

Also habe ich mich an die Einrichtung gemacht. Irgendwann habe ich das Vorhaben allerdings wieder aufgegeben. Nicht, weil Rootless Docker schlecht wäre, sondern weil die Umstellung meiner bestehenden Docker-Umgebung doch aufwendiger wurde, als ich ursprünglich gedacht hatte. Ich würde das Ganze nur auf einem frischen System noch einmal ausprobieren, auf dem bisher kein Docker läuft. Sonst gibt es schnell hausgemachte Verwirrung auf dem Server. :-)

Was unterscheidet Rootless von Rootful Docker?

Bei einer gewöhnlichen Docker-Installation läuft der Docker-Daemon mit Root-Rechten. Bei Rootless Docker werden dagegen sowohl der Daemon als auch die Container innerhalb eines User-Namespace ohne Root-Rechte auf dem Host betrieben.

Damit lassen sich die möglichen Auswirkungen bestimmter Sicherheitslücken reduzieren.

Bereits im Dezember 2024 erschien auf diesem Blog der Beitrag Docker rootless auf Fedora Silverblue. Dort wird beschrieben, wie sich die Mitgliedschaft in der Docker-Gruppe unter Fedora Silverblue einrichten lässt.

Hier gibt es allerdings einen wichtigen Unterschied: Wer Mitglied der Docker-Gruppe ist, kann Docker zwar ohne sudo bedienen, verwendet dadurch aber noch keinen echten Rootless-Daemon. Der gewöhnliche Docker-Daemon läuft weiterhin mit Root-Rechten und gewährt Mitgliedern dieser Gruppe praktisch Root-äquivalenten Zugriff.

Rootless Docker unter Debian und Ubuntu einrichten

Die Einrichtung ist grundsätzlich recht überschaubar. Voraussetzung ist eine bereits installierte Docker Engine aus dem offiziellen Docker-Repository.

Zunächst installieren wir die benötigten Pakete:

sudo apt update
sudo apt install -y \
  uidmap \
  dbus-user-session \
  slirp4netns \
  fuse-overlayfs \
  docker-ce-rootless-extras

Anschließend prüfen wir, ob unserem Benutzer mindestens 65.536 zusätzliche Benutzer- und Gruppenkennungen zugewiesen wurden:

grep "^$(whoami):" /etc/subuid
grep "^$(whoami):" /etc/subgid

Fehlen diese Einträge, müssen entsprechende freie Bereiche eingerichtet werden. Diese dürfen sich nicht mit bereits vergebenen Bereichen überschneiden.

Jetzt starten wir die eigentliche Installation als normaler Benutzer, also ohne sudo:

dockerd-rootless-setuptool.sh install

Wer bereits einen laufenden Rootful-Daemon betreibt und diesen für einen ersten Test nicht abschalten möchte, kann Rootless Docker zunächst parallel installieren:

dockerd-rootless-setuptool.sh install --force

Beide Installationen verwenden getrennte Container, Images und Volumes.

Damit der Rootless-Dienst auch ohne aktive Benutzeranmeldung weiterläuft, aktivieren wir den systemd-Benutzerdienst:

systemctl --user enable --now docker
sudo loginctl enable-linger "$(whoami)"

Anschließend wechseln wir in den Rootless-Kontext und kontrollieren die Installation:

docker context use rootless
docker info

Unter Security Options sollte jetzt rootless erscheinen.

Zum Abschluss können wir einen Testcontainer starten:

docker run --rm hello-world

Funktioniert dieser Aufruf, läuft der Docker-Daemon grundsätzlich im Rootless-Modus.

Wo liegen die Schwierigkeiten?

Die eigentliche Installation ist meist nicht das Problem. Schwieriger wird es bei bereits vorhandenen Diensten.

Rootless Docker besitzt eine eigene Umgebung mit getrennten Daten und bringt einige Einschränkungen mit sich. Beispielsweise können normale Benutzer standardmäßig keine Ports unterhalb von 1024 öffnen. Auch bei Netzwerkfunktionen, eingebundenen Verzeichnissen und Containern mit erweiterten Berechtigungen gibt es Unterschiede.

Gerade bei Anwendungen, die auf bestimmte Funktionen des Hostsystems angewiesen sind, muss man genauer hinschauen.

Auf meinem Server hätte ich daher zahlreiche Compose-Dateien, Netzwerke und Datenverzeichnisse einzeln überprüfen und gegebenenfalls anpassen müssen.

Warum ich bei Rootful Docker bleibe

Irgendwann habe ich für mich entschieden, dass ich die Umstellung nicht weiterverfolge. Der eine Grund ist das 2 Docker Installationen auf einem System für unnötige Verwirrung sorgt, wie eingangs des Artikels erwähnt, andererseits ist meine bestehende Docker-Umgebung bereits durch verschiedene Maßnahmen abgesichert. Dazu gehören restriktive Firewall-Regeln, SSH-Zugriff ausschließlich über Schlüssel, regelmäßige Updates, Datensicherungen und möglichst wenige zusätzliche Container-Berechtigungen.

Auch den Docker-Socket gebe ich nicht unnötig an andere Container weiter.

Das bedeutet natürlich nicht, dass Rootful Docker genauso sicher wie Rootless Docker ist. Der Docker-Daemon läuft weiterhin mit Root-Rechten. Der zusätzliche Schutz durch Rootless Docker ist durchaus sinnvoll.

Für meine bestehende Serverumgebung war mir der Aufwand einer vollständigen Migration am Ende allerdings zu groß.

Bei einem neuen Server würde ich Rootless Docker durchaus wieder in Betracht ziehen. Dort könnte ich von Anfang an darauf achten, welche Anwendungen sich dafür eignen.

Wer die Einrichtung selbst ausprobieren möchte, findet in der offiziellen Docker-Dokumentation sowie auf meinem Blog weitere Informationen zu den Voraussetzungen und Einschränkungen.

Für mich bleibt Rootless Docker jedenfalls ein interessantes Konzept, auch wenn ich vorerst bei meiner bisherigen Installation bleibe. Nutzt ihr so ein Setup bei euren Servern, daheim oder bei einem Hoster?

Quellen: im Text
Titelbild: Foto von Prometheus 🔥 auf Unsplash

Tags

Docker, Rootless Container

Es wurden noch keine Kommentare verfasst, sei der erste!