Gibt es bemerkenswerte Unterschiede zwischen LXC (Linux-Container) und FreeBSD-Gefängnisse in Bezug auf Sicherheit, Stabilität & Leistung?
Zuerst Schauen Sie, beide Ansätze sehen sehr ähnlich aus.
Kommentare
- LXC ist eine ziemlich neue Technologie, daher würde ich eine bessere Sicherheit und Stabilität mit Gefängnissen erwarten. Nicht Es gibt einige bekannte Sicherheitsprobleme mit LXC, die beispielsweise mit Selinux behoben werden können. Ich persönlich mag LXC jedoch.
- @ PavelŠimerda Ich habe heute gerade von LXC gehört, aber ich war es überrascht, dass sowohl Heroku als auch wahrscheinlich Google App Engine bereits LXC verwenden.
- Wenn Sie ' gerade auf LXC gestoßen sind, sollten Sie sich Docker ansehen verwendet LXC unter der Motorhaube: docker.io/the_whole_story
- Docker tut n lxc wird nicht mehr verwendet.
- @nwildner ' verwendet liblxc nicht mehr, verwendet jedoch genau dieselben Konzepte: Kernel-Namespaces.
Antwort
Unabhängig vom hier verwendeten ausgefallenen Namen sind beide Lösungen für ein bestimmtes Problem: Eine bessere Trennungslösung als klassisches Unix chroot . Virtualisierung auf Betriebssystemebene, Container, Zonen oder sogar „Chroot with Steroids“ sind Namen oder kommerzielle Titel, die dasselbe Konzept der Benutzerraumtrennung definieren, jedoch unterschiedliche Funktionen aufweisen.
Chroot wurde am 18. März 1982 eingeführt Monate vor der Veröffentlichung von 4.2 BSD als Tool zum Testen des Installations- und Build-Systems, aber heute weist es immer noch seine Mängel auf. Da das erste Ziel von chroot nur darin bestand, einen newroot -Pfad bereitzustellen, wurden andere Aspekte des Systems, die isoliert oder gesteuert werden mussten, aufgedeckt (Netzwerk, Prozessansicht, E / A-Durchsatz). Hier wurden die ersten Container (Virtualisierung auf Benutzerebene) angezeigt.
Beide Technologien (FreeBSD Jails und LXC) verwenden die Isolation des Benutzerbereichs, um eine weitere Sicherheitsebene bereitzustellen. Diese Unterteilung stellt sicher, dass ein bestimmter Prozess nur mit anderen Prozessen in demselben Container auf demselben Host kommuniziert. Wenn eine Netzwerkressource verwendet wird, um eine Kommunikation außerhalb der Welt zu erreichen, werden alle an die diesem Container zugewiesene Schnittstelle / den zugewiesenen Kanal weitergeleitet hat.
Funktionen
FreeBSD-Gefängnisse:
- Wird als stabile Technologie angesehen, da es seit 4.0 eine Funktion in FreeBSD ist.
- Es nutzt das Beste aus dem ZFS-Dateisystem an dem Punkt, an dem Sie Jails klonen und Gefängnisvorlagen , um auf einfache Weise mehr Gefängnisse bereitzustellen. Noch mehr ZFS-Wahnsinn ;
- Gut dokumentiert und weiterentwickelt ;
- Hierarchische Gefängnisse ermöglichen es Ihnen, Gefängnisse innerhalb eines Gefängnisses zu erstellen (wir müssen tiefer gehen!). Kombinieren Sie mit
allow.mount.zfs
, um mehr Leistung zu erzielen, und andere Variablen wiechildren.max
definieren maximal Kindergefängnisse. - rctl (8) behandelt Ressourcenbeschränkungen von Jails (Speicher, CPU, Festplatte, …);
- FreeBSD-Jails behandeln Linux Userspace ;
- Netzwerkisolation mit
vnet
, sodass jedes Gefängnis seinen eigenen Netzwerkstapel, Schnittstellen, Adressierungs- und Routing-Tabellen; -
nullfs
, um Ordner mit solchen zu verknüpfen, die sich auf dem realen Server befinden, innerhalb eines Gefängnisses; - ezjail Dienstprogramm zur Unterstützung der Massenbereitstellung und Verwaltung von Jails;
- Viele Kernel-Tunables (
sysctl
).security.jail.allow.*
-Parameter begrenzen die Aktionen des Root-Benutzers dieses Gefängnisses. - Möglicherweise erweitern FreeBSD-Jails einige der VPS-Projektfunktionen wie Live-Migration in naher Zukunft.
- Die Integration von ZFS und Docker erfordert einige Anstrengungen Laufen. Noch experimentell.
- FreeBSD 12 unterstützt bhyve in einem Gefängnis und pf in einem Gefängnis, wodurch diese Tools weiter isoliert werden
- Alternativen: FreeBSD VPS-Projekt
n den letzten Jahren wurden viele interessante Werkzeuge entwickelt. Einige von ihnen sind in dieses Blogposts indiziert.
Linux-Container (LXC):
- Neue „im Kernel“ -Technologie, die jedoch von großen (insbesondere Canonical) unterstützt wird;
- Nicht privilegierte Container ab LXC 1.0 macht einen großen Schritt in Richtung Sicherheit in Containern;
- UID- und GID-Zuordnung in Containern;
- Kernel-Namespaces, um IPC, Mount, PID, Netzwerk und Benutzer zu trennen. Diese Namespaces können getrennt behandelt werden, wobei ein Prozess, der einen unterschiedlichen Netzwerk-Namespace verwendet, nicht unbedingt auf andere Aspekte wie Speicher isoliert wird;
- Kontrollgruppen (cgroups) zum Verwalten und Gruppieren von Ressourcen. CGManager ist der Typ, der dies erreicht.
- Apparmor / SELinux-Profile und Kernel-Funktionen zur besseren Durchsetzung von Kernel-Funktionen, auf die Container zugreifen können. Seccomp ist auch für lxc-Container verfügbar, um Systemaufrufe zu filtern. Weitere Sicherheitsaspekte hier .
-
Live-Migrationsfunktionen werden entwickelt. Es ist wirklich schwer zu sagen, wann es für die Produktion bereit sein wird, da Docker / lxc sich mit der Pause, dem Snapshot, der Migration und der Konsolidierung des User-Space-Prozesses befassen muss – ref1 , ref2 .Live-Migration funktioniert mit Basiscontainern (kein Gerätepassthrough) weder komplexe Netzwerkdienste noch spezielle Speicherkonfigurationen). - APIs-Bindungen, um die Entwicklung in Python3 und 2, Lua, Go, Ruby und Haskell zu ermöglichen.
- Zentralisierter Bereich „Was ist neu?“. Ziemlich nützlich, wenn Sie überprüfen müssen, ob ein Fehler behoben wurde oder eine neue Funktion festgeschrieben wurde. Hier .
- Eine interessante Alternative könnte lxd , das unter der Haube mit lxc funktioniert, aber einige nette Funktionen wie eine REST-API, OpenStack-Integration usw. hat.
- Ein weiteres interessantes Die Sache ist, dass Ubuntu zfs als Standarddateisystem für Container auf 16.04 . Um die Ausrichtung der Projekte zu gewährleisten, hat lxd die Version 2.0 gestartet. Einige der Funktionen sind zfs related .
- Alternativen : OpenVZ , Docker
- Docker . Beachten Sie hier, dass Docker Namespaces verwendet und Gruppen „pro App“ / „pro Software“ isoliert Hauptunterschiede hier Während LXC Container mit mehreren Prozessen erstellt, reduziert Docker einen Container so weit wie möglich auf einen einzelnen Prozess und verwaltet diesen dann über Docker.
- Bemühungen um die Integration von Docker in SELinux und die Reduzierung der Funktionen in einem Container, um ihn sicherer zu machen – Docker und SELinux, Dan Walsh
li> Was ist der Unterschied zwischen Docker, LXD und LXC?
Docker verwendet lxc nicht mehr. Sie haben jetzt eine spezifische Bibliothek namens runc , das die Integration in Kernel-Namespace- und cgroups-Funktionen auf niedriger Ebene direkt übernimmt.
Keine der beiden Technologien ist ein Allheilmittel für die Sicherheit, aber beide sind ziemlich gute Möglichkeiten, eine zu isolieren Umgebung, die aufgrund der Infrastruktur gemischter Betriebssysteme keine vollständige Virtualisierung erfordert. Die Sicherheit wird durch viel Lesen und Implementieren der Dokumentation von Kernel-Tunables, MACs und Isolationen erreicht, die Ihnen diese Virt auf Betriebssystemebene bieten.
Siehe auch:
- Handgefertigte Behälter
- BSD Now: Alles, was Sie über Jails wissen müssen
- ezjail – Jail Administration Framework
- Eine kurze Geschichte der Container: Von den 1970er Jahren bis 2017
- Docker als schädlich eingestuft – Guter Artikel über den Sicherheitszirkus rund um Containertechnologien.
Kommentare
- Erwähnenswert ist, dass lxc keine Anstrengungen unternimmt, um eine ordnungsgemäße Isolation der Gäste zu gewährleisten. lxd versucht jedoch, eine Isolation wie BSD-Jails oder Solaris-Zonen bereitzustellen.
- lxd ist eine " bessere Erfahrung " von LXC, wobei andere Funktionen hinzugefügt werden. Es scheint jedoch schön, diesen kleinen Kerl hier zu zitieren.
- @allquixotic Sie meinen, wenn Sie eine unveränderte Konfiguration verwenden, die aus Vorlagen erstellt wurde? Echte, aber nicht privilegierte (userns-fähige) Container waren mit LXC 1.x verfügbar und konnten sogar beim Systemstart automatisch gestartet werden, sofern sie
root
gehörten (und sich somit befanden) am systemweiten Speicherort für Container).