2013-09-27 11 views
19

A Docker blog post zeigt:Sicherheit Docker wie es läuft als Root

Docker Behälter sind, die standardmäßig recht sicher; vor allem, wenn Sie in den Containern Pflege Ihre Prozesse laufen als nicht-privilegierte Benutzer (dh nicht root).“

Also, was ist das Sicherheitsproblem, wenn ich als root unter dem Docker renne nehmen ? Ich meine, es ist ziemlich sicher, wenn ich mich um meine Prozesse als nicht-privilegierte Benutzer kümmere, also, wie kann ich schädlich sein, in einem Container als root-Benutzer zu hosten? Ich frage nur, um es zu verstehen, wie kann es isoliert werden, wenn es nicht sicher ist, wenn es als root läuft? Welche Systemaufrufe können das Host-System dann freilegen?

Antwort

16

Wenn Sie als root ausführen, können Sie auf eine breitere Palette von Kernel-Dienste zugreifen.Zum Beispiel können Sie:

  • manipulieren von Netzwerkschnittstellen, Routing-Tabellen, Netfilter-Regeln;
  • erstellen rohe Sockets (und allgemein gesprochen, "exotische" Sockets, Ausübung von Code, der weniger Überprüfung als gute alte TCP und UDP erhalten hat);
  • mounten/unmounten/remounten von Dateisystemen;
  • Dateibesitz ändern, Berechtigungen, erweiterte Attribute, überschreiben reguläre Berechtigungen (d. H. Mit leicht unterschiedlichen Code-Pfaden);
  • usw.

(Es ist interessant festzustellen, dass alle diese Beispiele von capabilities geschützt sind.)

Der entscheidende Punkt ist, dass als root können Sie mehr Kernel-Code auszuüben; Wenn dieser Code eine Sicherheitslücke aufweist, können Sie ihn als Root auslösen, aber nicht als normaler Benutzer.

Wenn jemand einen Weg findet, aus einem Container auszubrechen, wenn Sie als root ausbrechen, können Sie natürlich viel mehr Schaden anrichten als bei einem normalen Benutzer.

+0

Also würde man fast sicher sein, wenn die Docker Sie einen Benutzer nicht-root läuft laufen – Mustafa

+1

beliebiges Material auszuführen Ich mag Wurzel haben Zugriff in den Container, aber stellen Sie sicher, dass es das Host-System nicht ausbrechen konnte. Dies macht es einfacher, die Single-App-Single-Container-Philosophie zu machen. – CMCDragonkai

+1

Der letzte Satz bezüglich des Ausbrechens eines Containers ist ein wenig irreführend. Wenn Sie aus einem Container ausbrechen können, unabhängig davon, wer Sie in dem Container waren, würden Sie ausbrechen, wie der LXC-Prozess selbst ausgeführt wird, wie auf dem Host-Betriebssystem. Dies ist oft root. Allerdings ist es immer noch eine gute Idee, Containerprozesse als nicht-privilegierter Benutzer auszuführen, da es dadurch (zumindest theoretisch) schwieriger wird, aus dem Container auszubrechen. – nateware

5

Sie können den Host-Computer neu starten, indem Sie im Andockfenster auf /proc/sysrq-trigger zurückgeben. Prozesse, die im Andockfenster als root ausgeführt werden, können dies tun.

Dies scheint ziemlich guten Grund, nicht Prozesse als root in Docker zu laufen;)

+6

Ich bekomme 'bash:/proc/sysrq-trigger: schreibgeschütztes Dateisystem' –

+2

Nun ... nach zwei Jahren haben sie endlich etwas behoben? – wrzasa

+0

Yeah Entschuldigung, ich habe das Datum nicht gesehen :) –

Verwandte Themen