
Ich habe viel über das Chroot-Jail unter Linux gehört/gelesen, es aber noch nie verwendet (ich verwende täglich Fedora). Was ist also ein Chroot-Jail? Wann und warum sollte ich es verwenden/nicht verwenden und gibt es sonst noch etwas, das ich wissen sollte? Wie erstelle ich eines?
Antwort1
Ein Chroot-Jail ist eine Möglichkeit, einen Prozess und seine untergeordneten Prozesse vom Rest des Systems zu isolieren. Es sollte nur für Prozesse verwendet werden, die nicht als Root ausgeführt werden, da Root-Benutzer sehr leicht aus dem Jail ausbrechen können.
Die Idee besteht darin, dass Sie einen Verzeichnisbaum erstellen, in den Sie alle Systemdateien kopieren oder verknüpfen, die für die Ausführung eines Prozesses erforderlich sind. Anschließend verwenden Sie den chroot()
Systemaufruf, um das Stammverzeichnis so zu ändern, dass es sich an der Basis dieses neuen Baums befindet, und starten den Prozess in dieser Chroot-Umgebung. Da er nicht auf Pfade außerhalb des geänderten Stammverzeichnisses verweisen kann, kann er an diesen Speicherorten keine böswilligen Vorgänge (Lesen/Schreiben usw.) ausführen.
/lib
Unter Linux ist die Verwendung von Bind-Mounts eine hervorragende Möglichkeit, den Chroot-Baum zu füllen. Damit können Sie beispielsweise Ordner wie und einbinden, /usr/lib
ohne sie einzubinden /usr
. Binden Sie einfach die gewünschten Verzeichnisbäume an die Verzeichnisse, die Sie im Jail-Verzeichnis erstellen.
Antwort2
„chroot jail“ ist eine falsche Bezeichnung, die eigentlich aussterben sollte, aber die Leute verwenden sie immer noch. chroot
ist ein Tool, mit dem Sie ein Verzeichnis in Ihrem Dateisystem als Stammverzeichnis des Dateisystems simulieren können. Das bedeutet, dass Sie eine Ordnerstruktur wie diese haben können:
-- foo
-- bar
-- baz
-- bazz
Wenn Sie chroot foo
und tun ls /
, werden Sie sehen:
-- bar
-- baz
Soweit es ls
(und alle anderen Tools, die Sie ausführen) betrifft, sind dies die einzigen Verzeichnisse im Dateisystem. Der Grund, warum "Jail" eine falsche Bezeichnung ist, ist chroot
nicht, dass esGewaltein Programm, das in diesem simulierten Dateisystem bleibt; ein Programm, das weiß, dass es sich in einem Chroot-"Gefängnis" befindet, kann relativ leicht entkommen, daher sollten Sie es nicht chroot
als Sicherheitsmaßnahme verwenden, um zu verhindern, dass ein Programm Dateien außerhalb Ihres simulierten Dateisystems ändert
Antwort3
Im Grunde ändern Sie nur das Stammverzeichnis Ihrer Umgebung.
/
wird
/some-jail/ (or whatever directory you want)
Wenn eine Anwendung auf / zugreift, erhält sie /some-jail/. Außerdem kann die Anwendung nicht aus /some-jail/ ausbrechen, sodass Sie wissen, dass sie auf nichts anderes auf Ihrem Computer zugreifen kann. Das ist eine sehr einfache Art zu sagen: „Hey, Sie können nur auf die Dinge zugreifen, die ich Ihnen gebe, und Sie können auf nichts anderes auf dem System zugreifen.“
Antwort4
Chroot ist leicht als modernerer Begriff für virtuelle Umgebung zu verstehen. Der Prozess erhält ein neues, virtuelles Stammverzeichnis, um die Pfadsichtbarkeit herzustellen. Dies ist hauptsächlich eine praktische und einfache Möglichkeit, zu steuern, auf welche Dateien und Bibliotheken der Prozess verweisen kann. Es ist sehr hilfreich, um Dinge zu isolieren, von denen möglicherweise andere Versionen auf dem tatsächlichen Dateisystem verfügbar sind.
Sie können es sich auch als eine Art Filter für das vorstellen, was im Dateisystem sichtbar ist.
Es ist wichtig, auch die Änderung des aktuellen Arbeitsverzeichnisses nach dem Chroot in Betracht zu ziehen, um eine unerwartete Ansicht des Dateisystems zu vermeiden.
Der Begriff Jail ist irreführend. In der Vergangenheit wurde Chroot verwendet, um das zu simulieren, was FreeBSD als Jail bezeichnet, andere nennen es vielleicht Sandbox. Dazu ist auch eine Selbstbeschränkung der Berechtigungen des Prozesses erforderlich. Kein gutes Sicherheitsmodell.
Ein häufiger Anwendungsfall ist das Kompilieren von Software, die auf eine bestimmte Toolchain oder einen Satz von Bibliotheken und Dateien und Tools verweisen muss, die eine Teilmenge dessen darstellen, was das System tatsächlich hat.