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.max
definieren 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: