Podman: Linux-Container einfach gemacht, Teil 1

Seite 2: Podman ohne Root

Inhaltsverzeichnis

Für das Ausführen der Container rückt das Podman-Team das rootless-Feature besonders in den Vordergrund, also das Ausführen eines Containers ohne root-Rechte auf dem Host. Das dient vor allem der Sicherheit, da ein Container nur die Rechte erhält, die er zur Ausführung tatsächlich benötigt. Das folgende Beispiel illustriert das Vorgehen. Zunächst führt man einen Container mit dem zuvor heruntergeladenen Alpine Linux aus:

$ podman run -d alpine top
5f421b01faa1b81db0da2678adc3537a66897c2f3f97417c6295afecdcd67486

Nun können Anwender überprüfen, welcher Benutzer top im Container ausführt:

$ podman exec 5f421b01faa ps -ef
PID USER TIME COMMAND
1 root 0:00 top
16 root 0:00 ps -ef

Wie man sieht, läuft top als root und besitzt damit root-Rechte innerhalb des Containers. Nun sollte man sichergehen, dass der Container keine root-Rechte auf dem Host hat:

$ ps -ef | grep top
valentin 31332 31321 0 14:03 ? 00:00:00 top

Tatsächlich läuft der Prozess nur innerhalb des Containers als root, auf dem Host jedoch als normaler Nutzer. Podman verwendet dafür einen besonderen Mechanismus des Linux-Kernels, nämlich User Namespaces. Prozesse haben darin andere Rechte und User IDs als außerhalb des Namespace. Dadurch soll rootless-Podman portabel sein, da viele Programme innerhalb eines Containers root-Rechte benötigen und Entwickler sie somit weiterhin ausführen können können, ohne ihnen das Recht auf dem Host zu erteilen.

Das schützt den Host vor Angriffen durch bösartige Container-Images, wie in einem kürzlich veröffentlichten Angriff geschehen. In diesem Angriffsszenario kann es Angreifern durch Ausführen der Container-Images gelingen, aus dem Container auszubrechen und beliebigen Code auf dem Host auszuführen. Der Angriff funktioniert dank User Namespaces jedoch nicht mit rootless Podman.