2017-02-01 3 views
3

Wenn ich einen Container als normaler Benutzer ausführen kann ich zuordnen und Verzeichnisse im Besitz von Root auf meinem Host-Dateisystem ändern. Dies scheint ein großes Sicherheitsloch zu sein. Zum Beispiel kann ich folgendes tun:Docker Root-Zugriff auf Host-System

$ docker run -it --rm -v /bin:/tmp/a debian 
[email protected]:/# cd /tmp/a 
[email protected]:/tmp/a# mv df df.orig 
[email protected]:/tmp/a# cp ls df 
[email protected]:/tmp/a# exit 

Jetzt ist mein Host-Dateisystem führen Sie den Befehl ls wenn df eingegeben wird (meist harmlos Beispiel). Ich kann nicht glauben, dass dies das gewünschte Verhalten ist, aber es passiert in meinem System (Debian Stretch). Der Befehl docker hat normale Berechtigungen (755, nicht setuid).

Was fehlt mir?

Vielleicht ist es gut, ein bisschen mehr zu klären. Ich bin im Moment nicht daran interessiert, was der Container selbst macht oder tun kann, und ich mache mir auch keine Gedanken über den Root-Zugriff innerhalb des Containers.

Vielmehr merke ich, dass jemand auf meinem System, das einen Docker Container es Root-Zugriff auf mein Host System erlangen können ausgeführt werden können und/schreiben als root lesen, was sie wollen: effektiv alle Zugang Benutzer root geben. Das ist offensichtlich nicht das, was ich will. Wie kann man das verhindern?

Antwort

4

Es gibt viele Docker-Sicherheitsfunktionen, die bei Docker-Sicherheitsproblemen helfen können. Die spezifische, die Ihnen helfen wird, ist User Namespaces.

Grundsätzlich müssen Sie Benutzernamespaces auf dem Host-Rechner mit dem Docker Dämon gestoppt vorher aktivieren:

dockerd --userns-remap=default & 

Hinweis dies verbietet den Behälter vom Laufen im privilegierten Modus (eine gute Sache vom Sicherheitsstandpunkt) und Starten Sie den Docker-Daemon neu (er sollte vor dem Ausführen dieses Befehls gestoppt werden). Wenn Sie den Docker Behälter eingeben, können Sie es auf die aktuelle nicht-privilegierten Benutzer beschränken:

docker run -it --rm -v /bin:/tmp/a --user UID:GID debian 

Egal, versuchen Sie den Docker Behälter anschließend mit Ihrem Standard-Befehl von

docker run -it --rm -v /bin:/tmp/a debian 

eingeben Wenn Sie versuchen, Um das Host-Dateisystem zu bearbeiten, das einem Docker-Volume zugeordnet wurde (in diesem Fall /bin), in dem sich Dateien und Verzeichnisse im Besitz von root befinden, erhalten Sie einen Fehler Permission denied. Dies beweist, dass Benutzernamespaces die gesuchte Sicherheitsfunktionalität bieten.

Ich empfehle, das Docker-Labor auf diese Sicherheitsfunktion bei https://github.com/docker/labs/tree/master/security/userns zu gehen. Ich habe alle Labs gemacht und dort Issues und PRs eingerichtet, um die Integrität der Labore dort zu gewährleisten und für sie bürgen zu können.

+1

Aber einen normalen Benutzer auf meinem Rechner-System, I ** kann ** zum Beispiel das Standard-Debian-Image laufen lassen und ** bekomme ** Root-Zugriff auf den ** Host **. Das Labor sagt: "Es birgt jedoch auch potentielle Sicherheitsrisiken." Das ist eher eine Untertreibung Sollte es nicht heißen: niemals docker auf diese Weise ausführen, da es allen Benutzern Root-Zugriff auf das Host-System gibt –

+0

Danke Es ist jetzt klar, dass ich keinen normalen Benutzer docker ausführen lassen sollte, sondern das tun für sie.Der Laborzeiger ist auch nützlich. –

0

Sie vermissen, dass Container standardmäßig intern als uid 0 ausgeführt werden. Das wird also erwartet. Wenn Sie die Berechtigung innerhalb des Containers einschränken möchten, erstellen Sie sie mit einer USER-Anweisung in Dockerfile. Dies wird zur Laufzeit auf den benannten Benutzer festgelegt, anstatt als root ausgeführt zu werden.

Beachten Sie, dass die UID dieses Benutzers nicht unbedingt vorhersehbar ist, da sie innerhalb des von Ihnen erstellten Image zugewiesen wird und nicht notwendigerweise auf dem externen System zugeordnet wird. Der Punkt ist jedoch, es wird nicht root sein.

Weitere Informationen finden Sie unter Dockerfile reference.

+0

Ich weiß, dass im Inneren des Behälters betreibe ich als uid 0 ist das in Ordnung. Aber wenn ich/bin (oder sogar /) vom Host-System auf ein Verzeichnis im Container abbilde, habe ich Root-Zugriff auf das Host-Dateisystem und kann auf alles zugreifen und alles ändern. Also ändern meine Befehle innerhalb des Containers das externe Dateisystem als root. –

+1

@SjaakDalens I "m nicht sicher, was Ihr Ziel ist es, aber Sie verschiedene Optionen haben. Ordnen Sie das Volumen als nur lesen, baut das Bild einen unprivilegierten Benutzer zu verwenden ... –

2

Zugriff auf diesem Host Docker Befehle auf einem Host ist der Zugang zu root ausführen. Dies ist der Entwurf des Tools, da die Funktionalität zum Bereitstellen von Dateisystemen und zum Isolieren einer Anwendung Root-Funktionen unter Linux benötigt. Die Sicherheitslücke hier ist ein beliebiger Sysadmin, der Benutzern den Zugriff auf Dockerbefehle gewährt, denen sie sonst nicht mit dem Root-Zugriff auf diesem Host vertrauen würden. Das Hinzufügen von Benutzern zur Andockgruppe sollte daher vorsichtig erfolgen.

Ich sehe noch Docker als Verbesserung der Sicherheit, wenn sie richtig eingesetzt, da Anwendungen in einem Container laufen beschränkt sind von dem, was sie an den Host zu tun. Die Möglichkeit, Schaden anzurichten, wird mit expliziten Optionen zum Ausführen des Containers gegeben, wie das Mounten des Root-Dateisystems als RW-Volume, direkter Zugriff auf Geräte oder das Hinzufügen von Funktionen zu root, die den Namespace umgehen können. Abgesehen von der expliziten Erstellung dieser Sicherheitslücken hat eine Anwendung, die innerhalb eines Containers ausgeführt wird, viel weniger Zugriff als wenn sie außerhalb des Containers ausgeführt würde.

Wenn Sie noch Benutzer versuchen, Sperren mit Zugang zu Docker, gibt es einige zusätzliche Sicherheitsmerkmale. Der Benutzer-Namespace ist einer von denen, die verhindern, dass root innerhalb des Containers Root-Zugriff auf den Host hat. Es gibt auch interlock, mit dem Sie die verfügbaren Befehle pro Benutzer einschränken können.

+0

Es ist eindeutig mein Missverständnis des Konzepts. Danke. –

Verwandte Themen