Linux LXC vs FreeBSD Gefängnis


62

Gibt es bemerkenswerte Unterschiede zwischen LXC (Linux-Container) und FreeBSD-Jails in Bezug auf Sicherheit, Stabilität und Leistung?

Auf den ersten Blick sehen beide Ansätze sehr ähnlich aus.


1
LXC ist eine ziemlich neue Technologie, daher würde ich mit Gefängnissen eine bessere Sicherheit und Stabilität erwarten. Nicht einmal eine Vermutung über die Leistung. Es gibt einige bekannte Sicherheitsprobleme mit LXC, die beispielsweise mit Selinux behoben werden können. Ich persönlich mag jedoch LXC.
Pavel Šimerda

1
@ PavelŠimerda Ich habe gerade von LXC gehört, war aber überrascht, dass sowohl Heroku als auch wahrscheinlich Google App Engine bereits LXC verwenden.
Philipp Claßen

3
Wenn Sie gerade auf LXC gestoßen sind, sollten Sie sich Docker anschauen, das LXC unter der Haube verwendet: docker.io/the_whole_story
Kev

1
Docker verwendet kein LXC mehr.

1
@nwildner liblxc wird nicht mehr verwendet, es werden jedoch genau dieselben Konzepte verwendet: Kernel-Namespaces.
0xC0000022L

Antworten:


101

Unabhängig von dem hier verwendeten ausgefallenen Namen sind beide Lösungen für ein bestimmtes Problem: Eine bessere Lösung für die Trennung als die klassische Unix- Chroot . Virtualisierung auf Betriebssystemebene, Container, Zonen oder sogar "chroot with steroids" sind Namen oder kommerzielle Titel, die dasselbe Konzept der Benutzerbereichstrennung definieren, jedoch unterschiedliche Funktionen aufweisen.

Chroot wurde am 18. März 1982, Monate vor der Veröffentlichung von 4.2 BSD , als Tool zum Testen seines Installations- und Build-Systems eingeführt, weist aber auch heute noch Mängel auf. Da das erste Ziel von chroot darin bestand, nur einen Newroot- Pfad bereitzustellen , wurden andere Aspekte des Systems, die isoliert oder gesteuert werden mussten, aufgedeckt (Netzwerk, Prozessansicht, E / A-Durchsatz). Hier erschienen die ersten Container (Virtualisierung auf Benutzerebene).

Beide Technologien (FreeBSD Jails und LXC) nutzen die Userspace-Isolation, um eine weitere Sicherheitsebene bereitzustellen. Durch diese Unterteilung wird sichergestellt, dass ein bestimmter Prozess nur mit anderen Prozessen im selben Container auf demselben Host kommuniziert. Wenn eine Netzwerkressource für die Kommunikation "außerhalb der Welt" verwendet wird, werden alle an die diesem Container zugewiesene Schnittstelle / den zugewiesenen Kanal weitergeleitet hat.

Eigenschaften

FreeBSD-Jails:

  • Wird als stabile Technologie angesehen, da sie in FreeBSD seit 4.0 enthalten ist.
  • Ab dem Zeitpunkt, an dem Sie Jails klonen und Jail-Vorlagen erstellen können, um auf einfache Weise mehr Jails bereitzustellen, wird das Beste aus dem ZFS-Dateisystem herausgefordert . 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 dies mit allow.mount.zfs, um mehr Leistung zu erzielen, und andere Variablen children.maxdefinieren beispielsweise die maximale Anzahl an Kindergefängnissen.
  • Mit rctl (8) werden Ressourcenbeschränkungen von Jails (Speicher, CPU, Festplatte, ...) behandelt.
  • FreeBSD-Jails verwalten den Linux- Benutzerraum .
  • Netzwerkisolation mit vnet, wodurch jedem Gefängnis ein eigener Netzwerkstapel, Schnittstellen, Adressierungs- und Routingtabellen zugewiesen werden können;
  • nullfs um das Verknüpfen von Ordnern mit Ordnern zu unterstützen, die sich auf dem realen Server in einem Gefängnis befinden;
  • ezjail- Dienstprogramm zur Unterstützung der Massenbereitstellung und Verwaltung von Gefängnissen;
  • Viele Kernel-Tunables ( sysctl). security.jail.allow.*Parameter begrenzen die Aktionen des Root-Benutzers dieses Gefängnisses.
  • Vielleicht werden FreeBSD-Jails in naher Zukunft einige der Funktionen des VPS-Projekts erweitern, beispielsweise die Live-Migration .
  • Die Integration von ZFS und Docker erfordert einige Anstrengungen . Immer noch experimentell.
  • FreeBSD 12 unterstützt bhyve in einem Gefängnis und pf in einem Gefängnis, wodurch eine weitere Isolierung für diese Tools entsteht
  • In den letzten Jahren wurden viele interessante Tools entwickelt. Einige von ihnen sind in diesem Blogbeitrag indiziert .
  • Alternativen: FreeBSD VPS-Projekt

Linux-Container (LXC):

  • Neue "in Kernel" -Technologie, die jedoch von großen Unternehmen (insbesondere Canonical) empfohlen wird;
  • Unprivilegierte Container ab LXC 1.0 machen einen großen Schritt in Richtung Sicherheit in Containern.
  • UID- und GID-Zuordnung in Containern;
  • Kernel-Namespaces zur Trennung von IPC, Mount, PID, Netzwerk und Benutzern. Diese Namespaces können getrennt behandelt werden, wobei ein Prozess, der einen anderen Netzwerknamespace verwendet , nicht unbedingt unter anderen Aspekten wie dem Speicher isoliert wird.
  • Kontrollgruppen (cgroups), um Ressourcen zu verwalten und zu gruppieren. CGManager ist der Typ, der das schafft .
  • Apparmor / SELinux-Profile und Kernelfunktionen zur besseren Durchsetzung von Kernelfunktionen, auf die Container zugreifen können. Seccomp ist auch für lxc-Container verfügbar, um Systemaufrufe zu filtern. Weitere Sicherheitsaspekte hier .
  • Live-Migrationsfunktionalität wird entwickelt. Es ist wirklich schwer zu sagen, wann es für den produktiven Einsatz bereit sein wird, da Docker / LXC sich mit Prozesspause, Snapshot, Migration und Konsolidierung des Userspace befassen muss - ref1 , ref2 .Die Livemigration funktioniert mit Basiscontainern (kein Gerät durchläuft weder komplexe Netzwerkdienste noch spezielle Speicherkonfigurationen).
  • API-Bindungen für die Entwicklung in Python3 und 2, Lua, Go, Ruby und Haskell
  • Zentraler Bereich "Was gibt's Neues". 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 sein , das unter der Haube mit lxc funktioniert, aber es hat einige nette Funktionen wie eine REST-API, OpenStack-Integration usw.
  • Eine weitere interessante Sache ist, dass Ubuntu anscheinend zfs als Standard-Dateisystem für Container am 16.04 ausliefert . Um die Ausrichtung der Projekte zu gewährleisten, hat lxd die Version 2.0 gestartet, und einige der Funktionen stehen in Beziehung zu zfs .
  • Alternativen : OpenVZ , Docker
  • Docker . Beachten Sie hier, dass Docker Namespaces verwendet und cgroups "per app" / "per software" -Isolation erstellt. Hauptunterschiede hier . Während LXC Container mit mehreren Prozessen erstellt, reduziert Docker einen Container so weit wie möglich auf einen einzigen 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 die Sicherheit zu erhöhen - Docker und SELinux, Dan Walsh
  • Was ist der Unterschied zwischen Docker, LXD und LXC?

Docker verwendet lxc nicht mehr. Sie haben jetzt eine spezifische Bibliothek namens libcontainer , die die Integration mit Kernel-Namespace- und cgroups-Funktionen auf niedriger Ebene direkt verwaltet.

Keine der beiden Technologien ist ein Allheilmittel für die Sicherheit, aber beide bieten eine gute Möglichkeit, eine Umgebung zu isolieren, die aufgrund der gemischten Betriebssysteminfrastruktur keine vollständige Virtualisierung erfordert. Die Sicherheit wird nach dem Lesen der Dokumentation und der Implementierung von Kernel-Tunables, MACs und Isolationen, die Ihnen diese virtuellen Betriebssysteme bieten, erreicht.

Siehe auch:


1
Erwähnenswert ist, dass lxc keine Anstrengungen unternimmt, um eine ordnungsgemäße Isolierung der Gäste zu gewährleisten. lxd versucht jedoch, Isolationen wie BSD-Jails oder Solaris-Zonen bereitzustellen.
Allquixotic

lxd ist eine "bessere Erfahrung" von LXC, indem andere Funktionen hinzugefügt werden. Es scheint jedoch nett zu sein, diesen kleinen Kerl hier zu zitieren

@allquixotic meinst du wenn du unveränderte konfigurationen verwendest die aus vorlagen erstellt wurden? Echte, aber nicht privilegierte (für Benutzer aktivierte) Container waren mit LXC 1.x verfügbar und konnten sogar beim Systemstart automatisch gestartet werden, sofern sie Eigentum der Container waren root(und sich somit am systemweiten Speicherort für Container befanden).
0xC0000022L
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.