FreeBSD Gefängnis - FreeBSD jail

Das Gefängnis Mechanismus ist eine Implementierung von FreeBSD ‚s OS-Level - Virtualisierung , die ermöglicht Systemadministratoren eine partitionieren FreeBSD - abgeleitetes Computersystem in mehrere unabhängige Mini-Systeme genannt Jails , die alle den gleichen Kernel, mit sehr wenig Aufwand zu teilen. Die Implementierung erfolgt über einen Systemaufruf, jail (2), sowie über ein Userland-Dienstprogramm, jail (8), und je nach System über eine Reihe anderer Dienstprogramme. Die Funktionalität wurde 1999 von Poul-Henning Kamp nach einer gewissen Zeit der Produktionsnutzung durch einen Hosting-Anbieter in FreeBSD übernommen und erstmals mit FreeBSD 4.0 veröffentlicht, wodurch sie bis heute von einer Reihe von FreeBSD-Nachkommen, einschließlich DragonFly BSD , unterstützt wird.

Die Notwendigkeit für die FreeBSD-Gefängnisse ergab sich aus dem Wunsch eines kleinen Hosting-Anbieters für gemeinsam genutzte Umgebungen (Derrick T. Woolworth, Eigentümer von R & D Associates, Inc.), eine saubere und klare Trennung zwischen den eigenen Diensten und denen ihrer Kunden herzustellen. hauptsächlich aus Sicherheitsgründen und zur Vereinfachung der Verwaltung ( Gefängnis (8) ). Anstatt eine neue Schicht feinkörniger Konfigurationsoptionen hinzuzufügen, bestand die von Poul-Henning Kamp angenommene Lösung darin, das System - sowohl seine Dateien als auch seine Ressourcen - so zu unterteilen, dass nur die richtigen Personen Zugriff auf die richtigen Fächer erhalten .

Geschichte

Gefängnisse wurden erstmals in FreeBSD Version 4.0 eingeführt, die am 14. März 2000 veröffentlicht wurde . Die meisten der ursprünglichen Funktionen werden von DragonFly unterstützt, und einige der neuen Funktionen wurden ebenfalls portiert.  ( 14.03.2000 )

Tore

FreeBSD-Gefängnisse zielen hauptsächlich auf drei Ziele ab:

  1. Virtualisierung: Jedes Gefängnis ist eine virtuelle Umgebung, die auf dem Hostcomputer mit eigenen Dateien, Prozessen, Benutzer- und Superuserkonten ausgeführt wird . Innerhalb eines inhaftierten Prozesses ist die Umgebung von einem realen System kaum zu unterscheiden.
  2. Sicherheit: Jedes Gefängnis ist gegen die anderen versiegelt, wodurch ein zusätzliches Maß an Sicherheit geboten wird.
  3. Einfache Delegierung: Der begrenzte Umfang eines Gefängnisses ermöglicht es Systemadministratoren, mehrere Aufgaben zu delegieren, für die Superuser-Zugriff erforderlich ist, ohne die vollständige Kontrolle über das System zu übernehmen.

Im Gegensatz zum Chroot-Gefängnis , das Prozesse auf eine bestimmte Ansicht des Dateisystems beschränkt , schränkt der FreeBSD-Gefängnismechanismus die Aktivitäten eines Prozesses in einem Gefängnis in Bezug auf den Rest des Systems ein. In der Tat sind inhaftierte Prozesse in einer Sandbox gespeichert . Sie sind an bestimmte IP-Adressen gebunden , und ein inhaftierter Prozess kann nicht auf Umleitungs- oder Routing-Sockets zugreifen . Raw-Sockets sind ebenfalls standardmäßig deaktiviert, können jedoch durch Festlegen der Option security.jail.allow_raw_sockets sysctl aktiviert werden . Darüber hinaus ist die Interaktion zwischen Prozessen, die nicht im selben Gefängnis ausgeführt werden, eingeschränkt.

Das Dienstprogramm jail (8) und der Systemaufruf jail (2) wurden erstmals in FreeBSD 4.0 angezeigt . In FreeBSD 5.1 wurden neue Dienstprogramme (z. B. jls (8) zum Auflisten von Jails) und Systemaufrufe (z. B. jail_attach (2) zum Anhängen eines neuen Prozesses an ein Jail) hinzugefügt, die die Jail-Verwaltung erheblich vereinfachen. Das Jail-Subsystem erhielt mit FreeBSD 7.2 weitere wichtige Updates, einschließlich der Unterstützung mehrerer IPv4- und IPv6-Adressen pro Jail und der Unterstützung für das Binden von Jails an bestimmte CPUs.

Virtualisierung

Mit dem Gefängnis können verschiedene virtuelle Maschinen erstellt werden , von denen jede ihre eigenen Dienstprogramme und ihre eigene Konfiguration installiert hat. Dies macht es zu einer sicheren Möglichkeit, Software auszuprobieren. Beispielsweise ist es möglich, verschiedene Versionen auszuführen oder verschiedene Konfigurationen eines Webserverpakets in verschiedenen Gefängnissen auszuprobieren . Und da das Gefängnis auf einen engen Bereich beschränkt ist, gefährden die Auswirkungen einer Fehlkonfiguration oder eines Fehlers (selbst wenn dies vom Superuser im Gefängnis durchgeführt wird ) nicht den Rest der Systemintegrität. Da außerhalb des Gefängnisses nichts geändert wurde, können "Änderungen" verworfen werden, indem die Kopie des Verzeichnisbaums des Gefängnisses gelöscht wird.

Die Virtualisierung ist für Dienstanbieter von Nutzen, die ihren Benutzern die Möglichkeit bieten möchten, benutzerdefinierte Konfigurationen vorzunehmen und dennoch die Wartung des Gesamtsystems zu vereinfachen. Beispielsweise könnten zwei verschiedene Kunden unterschiedliche Versionen derselben Software benötigen. Ohne Jails ist es nicht immer möglich oder einfach zu warten, mehrere Softwareversionen in verschiedenen Verzeichnissen zu konfigurieren und sicherzustellen, dass sie nicht ineinander greifen (z. B. ist XFree86 notorisch schwer zu bewegen). Gefängnisse hingegen ermöglichen es Softwarepaketen, das System egoistisch zu betrachten, als ob jedes Paket die Maschine für sich hätte. Gefängnisse können auch ihre eigenen, unabhängigen, inhaftierten Superuser haben.

Das FreeBSD-Gefängnis erreicht jedoch keine echte Virtualisierung. Die virtuellen Maschinen können keine anderen Kernelversionen als die des Basissystems ausführen. Alle virtuellen Server verwenden denselben Kernel und weisen daher dieselben Fehler und potenziellen Sicherheitslücken auf. Clustering oder Prozessmigration werden nicht unterstützt , sodass der Host-Kernel und der Host-Computer für alle virtuellen Server immer noch eine einzige Fehlerquelle darstellen. Es ist möglich, Jails zu verwenden, um neue Software sicher zu testen, jedoch keine neuen Kernel.

Sicherheit

FreeBSD-Jails sind aufgrund der Trennung zwischen der inhaftierten Umgebung und dem Rest des Systems (den anderen Jails und dem Basissystem) eine effektive Möglichkeit, die Sicherheit eines Servers zu erhöhen.

Zum Beispiel in einem nicht ins Gefängnis - System, ein Web - Server als Benutzer ausgeführt wird www dass Leitet eine PHP - umfasst Verwundbarkeit das gesamte System gefährden würde: Der Angreifer würde die Rechte des Benutzer hat www , die typischerweise Dateien auf dem Web - Server ändern können, Gehen Sie im Verzeichnisbaum umher und sammeln Sie Informationen wie die vollständige Benutzerliste, die Shell und das Home-Verzeichnis aus / etc / passwd .

Wenn der Webserver jedoch inhaftiert ist, beschränkt sich der Umfang des Benutzers www auf das Gefängnis, was wiederum minimalistisch genug sein kann, um nicht viel zu verraten. Selbst wenn der Angreifer Zugriff auf das Superuser-Konto des Gefängnisses erhielt, konnte er nur dieses Gefängnis und nicht das gesamte System ändern.

FreeBSD-Gefängnisse sind auf folgende Weise begrenzt:

  • Jailed-Prozesse können nicht mit Prozessen in einem anderen Jail oder auf dem Haupthost interagieren. Beispielsweise zeigt der Befehl ps nur die Prozesse an, die im Gefängnis ausgeführt werden.
  • Das Ändern des laufenden Kernels durch direkten Zugriff und Laden von Modulen ist verboten. Das Ändern der meisten Systeme und der Sicherheitsstufe ist verboten.
  • Das Ändern der Netzwerkkonfiguration, einschließlich Schnittstellen, Schnittstellen- oder IP-Adressen und der Routing-Tabelle , ist untersagt. Der Zugriff auf Umleitungs- und Routing-Sockets ist ebenfalls untersagt. Außerdem sind Raw-Sockets standardmäßig deaktiviert. Ein Gefängnis ist nur an bestimmte IP-Adressen gebunden und Firewall-Regeln können nicht geändert werden. Mit der Einführung von VNET (Virtual Network Stack) können die Jails ihre Netzwerkkonfiguration (einschließlich Schnittstellen, IP-Adressen usw.) ändern, sofern das Vnet für das Gefängnis aktiviert ist.
  • Das Ein- und Aushängen von Dateisystemen ist verboten. Gefängnisse können nicht auf Dateien über ihrem Stammverzeichnis zugreifen (dh ein Gefängnis wird chroot'ed).
  • Jailed-Prozesse können keine Geräteknoten erstellen.

Siehe auch

Verweise

Externe Links