Was sind die Vor- und Nachteile von nichtprivilegierten Containern?
16
Die technische Erklärung für den nichtprivilegierten Container ist recht gut. Es ist jedoch nicht für gewöhnliche PC-Benutzer. Gibt es eine einfache Antwort, wann und warum Menschen unprivilegierte Container verwenden sollten, und welche Vor- und Nachteile haben sie?
Das Ausführen von nicht privilegierten Containern ist die sicherste Möglichkeit, Container in einer Produktionsumgebung auszuführen. Container werden in Bezug auf die Sicherheit schlecht publiziert, und einer der Gründe ist, dass einige Benutzer festgestellt haben, dass es auch auf dem Host möglich ist, Root zu werden, wenn ein Benutzer Root in einem Container erhält. Grundsätzlich maskiert ein nicht privilegierter Container die Benutzer-ID vom Host. Bei nichtprivilegierten Containern können Nicht-Root-Benutzer Container erstellen und werden im Container als Root angezeigt, sie werden jedoch beispielsweise auf dem Host als Benutzer-ID 10000 angezeigt (unabhängig davon, wie Sie die Benutzer-IDs zuordnen). Ich habe kürzlich einen Blog-Beitrag dazu geschrieben, der auf Stephane Grabers Blog- Serie über LXC basiert (einer der brillanten Köpfe / Hauptentwickler von LXC und jemand, dem man definitiv folgen sollte). Ich sage es noch einmal, extrem brillant.
Wie Sie sehen, werden im Container Prozesse als Root ausgeführt, die jedoch nicht als Root, sondern als 100000 vom Host angezeigt werden.
Fazit: Vorteile - Mehr Sicherheit und mehr Isolation für mehr Sicherheit. Nachteil - Es ist etwas verwirrend, zuerst den Kopf herumzureißen, nicht für Anfänger.
Wenn ich das richtig verstehe, sind Container für sich genommen nicht 100% sicher. Egal in welchem Container Sie sich befinden, es besteht die Möglichkeit, dass das Tier entkommt. Und nur hier, wenn der Behältertyp wichtig wird. Für privilegierte Container läuft das Biest wild unter root, pflanzt Rootkits und kaut wertvolle SSL-Schlüssel. Für Unprivilegierte ist es nur auf das Benutzerkonto beschränkt, das den Container erstellt hat, oder? Diebstahl seiner SSH-Schlüssel usw. Ist das wirklich sicherer? Kann man das mit einem Bild von vier verschachtelten Kästen erklären?
anatoly techtonik
2
Kurz gesagt, Container selbst sind für den produktiven Einsatz nicht sicher. Behandeln Sie Ihre LXC-Umgebung wie jede andere Linux-Umgebung. Sie würden Ihre Linux-Box auch nicht offen lassen, oder ?! Ja, Ihr Container ist nur auf den beschränkt, dem das Benutzerkonto zugeordnet ist. Schauen Sie sich Grabers Beitrag zu nicht-gedruckten Containern an: Ich denke, das größte Problem ist die Möglichkeit, den Kernel und die Systemaufrufe auszunutzen, da jeder Container denselben Kernel verwendet. Es gibt verschiedene Möglichkeiten, die Sicherheit durch Cgroups und andere Anwendungen wie Selinux, Apparmor und Seccomp zu verbessern.
Erstellen Sie daher einen separaten eingeschränkten Benutzer zum Ausführen von Containern. Scheint fair zu sein. Ich akzeptiere das als Antwort. Vielen Dank.
anatoly techtonik
4
Sie sind sehr wertvolle Werkzeuge zum Testen, Sandboxen und Einkapseln. Möchten Sie, dass ein Webserver sicher in seiner eigenen Arbeitsumgebung gesperrt ist und nicht auf vertrauliche private Dateien zugreifen kann? Verwenden Sie einen Behälter. Sie haben eine Anwendung, für die alte Bibliotheksversionen und bestimmte Konfigurationsdateien erforderlich sind, die nicht mit anderen Anwendungen kompatibel sind? Auch ein Container. Es ist im Grunde chroot richtig gemacht. Auf diese Weise können Sie die Dienste so weit voneinander trennen, dass die Wartung erheblich vereinfacht wird. Sie können auf einen anderen Computer verschoben oder kopiert werden, ohne dass das vorhandene System gestört werden muss.
Der Nachteil ist, dass Sie sich den Namespace merken müssen, da fast alles lokal für den Container ist. Sie müssen wissen, wo Sie sich befinden, und die Kommunikation zwischen Containern ist nicht trivial. Dies ist eine gute Idee, wenn Sie Modularität benötigen, aber nicht den Overhead virtueller Maschinen möchten und die Dinge, die Sie in Containern aufbewahren, nicht viel miteinander zu tun haben.
Für einen "normalen" Benutzer können Sie Container verwenden, um eine einzelne Maschine für zwei Personen zu verwenden, während Sie diese so aufbewahren, als befänden sie sich auf völlig unterschiedlichen Maschinen. Zum Beispiel Mitbewohner.
Eine gute menschliche Beschreibung dessen, wofür Container gedacht sind, erklärt den Unterschied zwischen privilegierten und nichtprivilegierten Containern nicht.
anatoly techtonik
1
Nun, mit einem gemeinsam genutzten Kernel sind ungeachtet dessen, dass die Anforderungen des Gegners, sich in gewisser Weise zu befreien (oder besser gesagt, die Angriffsfläche zu begrenzen), erhöht werden, nicht alle nicht privilegierten Container vollständig von geraden Hacks isoliert, die Host-Root-Status erlangen .
Aus diesem Grund ist es eine falsche Annahme / Behauptung. Das Niveau der technischen Eignung vieler Benutzer im Internet wird jedoch weiterhin inet-Dienste auf eine Vielzahl von Wegen ausführen, zu denen sie technisch nicht in der Lage sind, also hey. :)
Sie sind sehr wertvolle Werkzeuge zum Testen, Sandboxen und Einkapseln. Möchten Sie, dass ein Webserver sicher in seiner eigenen Arbeitsumgebung gesperrt ist und nicht auf vertrauliche private Dateien zugreifen kann? Verwenden Sie einen Behälter. Sie haben eine Anwendung, für die alte Bibliotheksversionen und bestimmte Konfigurationsdateien erforderlich sind, die nicht mit anderen Anwendungen kompatibel sind? Auch ein Container. Es ist im Grunde chroot richtig gemacht. Auf diese Weise können Sie die Dienste so weit voneinander trennen, dass die Wartung erheblich vereinfacht wird. Sie können auf einen anderen Computer verschoben oder kopiert werden, ohne dass das vorhandene System gestört werden muss.
Der Nachteil ist, dass Sie sich den Namespace merken müssen, da fast alles lokal für den Container ist. Sie müssen wissen, wo Sie sich befinden, und die Kommunikation zwischen Containern ist nicht trivial. Dies ist eine gute Idee, wenn Sie Modularität benötigen, aber nicht den Overhead virtueller Maschinen möchten und die Dinge, die Sie in Containern aufbewahren, nicht viel miteinander zu tun haben.
Für einen "normalen" Benutzer können Sie Container verwenden, um eine einzelne Maschine für zwei Personen zu verwenden, während Sie diese so aufbewahren, als befänden sie sich auf völlig unterschiedlichen Maschinen. Zum Beispiel Mitbewohner.
quelle
Nun, mit einem gemeinsam genutzten Kernel sind ungeachtet dessen, dass die Anforderungen des Gegners, sich in gewisser Weise zu befreien (oder besser gesagt, die Angriffsfläche zu begrenzen), erhöht werden, nicht alle nicht privilegierten Container vollständig von geraden Hacks isoliert, die Host-Root-Status erlangen .
Aus diesem Grund ist es eine falsche Annahme / Behauptung. Das Niveau der technischen Eignung vieler Benutzer im Internet wird jedoch weiterhin inet-Dienste auf eine Vielzahl von Wegen ausführen, zu denen sie technisch nicht in der Lage sind, also hey. :)
quelle