it-swarm.com.de

chroot "Gefängnis" - was ist das und wie benutze ich es?

Ich habe viel über das Chroot-Gefängnis unter Linux gehört/gelesen, es aber noch nie benutzt (ich benutze Fedora täglich). Was ist also ein Chroot-Gefängnis? Wann und warum darf ich es verwenden/nicht verwenden und gibt es noch etwas, das ich wissen sollte? Wie würde ich vorgehen, um eine zu erstellen?

107
user119

Ein Chroot-Gefängnis ist eine Möglichkeit, einen Prozess und seine Kinder 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 Gefängnis ausbrechen können.

Die Idee ist, 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 Systemaufruf chroot(), um das Stammverzeichnis so zu ändern, dass es sich an der Basis dieses neuen Baums befindet, und starten den Prozess, der in dieser chroot'd-Umgebung ausgeführt wird. Da es nicht auf Pfade außerhalb des geänderten Stammverzeichnisses verweisen kann, kann es keine böswilligen Vorgänge (Lesen/Schreiben usw.) an diesen Speicherorten ausführen.

Unter Linux ist die Verwendung von Bind-Mounts eine großartige Möglichkeit, den Chroot-Baum zu füllen. Damit können Sie Ordner wie /lib und /usr/lib ohne zu ziehen /usr, beispielsweise. Binden Sie einfach die Verzeichnisbäume, die Sie möchten, an Verzeichnisse, die Sie im Gefängnisverzeichnis erstellen.

97
Ben Combee

"Chroot Jail" ist eine Fehlbezeichnung, die eigentlich aussterben sollte, aber die Leute benutzen sie weiter. chroot ist ein Tool, mit dem Sie ein Verzeichnis in Ihrem Dateisystem als Stamm des Dateisystems simulieren können. Das heißt, Sie können eine Ordnerstruktur haben wie:

-- foo
    -- bar
    -- baz
-- bazz

Wenn du chroot foo und TU ls /, du wirst sehen:

-- bar
-- baz

Für ls (und alle anderen von Ihnen ausgeführten Tools) sind dies die einzigen Verzeichnisse im Dateisystem. Der Grund, warum "Gefängnis" eine falsche Bezeichnung ist, ist, dass chroot nicht dazu gedacht ist, erzwingen ein Programm, um in diesem simulierten Dateisystem zu bleiben; Ein Programm, das weiß, dass es sich in einem Chroot- "Gefängnis" befindet, kann ziemlich leicht entkommen. Daher sollten Sie chroot nicht als Sicherheitsmaßnahme verwenden, um zu verhindern, dass ein Programm Dateien außerhalb Ihres simulierten Dateisystems ändert

53
Michael Mrozek

Grundsätzlich ändern Sie nur das Stammverzeichnis Ihrer Umgebung. Damit

/

wird

/some-jail/ (or whatever directory you want)

Wenn eine Anwendung auf/zugreift, erhalten 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. Es ist eine sehr einfache Art zu sagen: „Hey, du kannst nur auf diese Dinge zugreifen, die ich dir gebe, und du kannst auf nichts anderes im System zugreifen.

12
jacksonh

"Wann und warum könnte ich es benutzen?"

Eine Verwendung besteht darin, Skripte (Startzeit und andere) zu testen, die absolute Pfadreferenzen erstellen oder Befehle ausführen, die Sie möglicherweise abfangen und protokollieren möchten (und möglicherweise nicht öffnen) - in einer Umgebung, in der Sie diese Befehle nicht möchten arbeiten Sie tatsächlich in Ihrer Laufumgebung.

Zum Beispiel habe ich ein eingebettetes Gerät unter Linux. Ich möchte den Betrieb einer Bash überprüfen, ohne a) sie auf dem realen Gerät auszuführen (da ich bessere Tools auf meinem Desktop habe und das Gerät nicht blockieren möchte). B) ausgeführt wird es wirklich auf meinem Desktop (da ich nicht möchte, dass mein Desktop-System durcheinander kommt)

Außerdem können Sie dann feststellen, welche Befehle oder anderen Skriptdateien verwendet werden, da der Lauf mit einem Fehler beendet wird, wenn versucht wird, einen Befehl oder ein Shell-Skript auszuführen, das nicht im "Chroot-Gefängnis" vorhanden ist.

(Natürlich könnten Sie, um das ganze Schwein zu erledigen, in QEMU oder Docker oder einer VM laufen, aber dazu müsste ein VM Image usw. - viel mehr Arbeit) erstellt werden.)

6
MikeW