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

99

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


quelle
Die Antworten hier scheinen kurz zu sein: "Wie verwende ich diese Kategorie?" :(
Alexander Mills

Antworten:

88

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 chroot()Systemaufruf, um das Stammverzeichnis als Basis für diesen neuen Baum zu ändern und den Prozess zu starten, der in dieser Chroot-Umgebung ausgeführt wird. Da nicht auf Pfade außerhalb des geänderten Stammverzeichnisses verwiesen werden kann, können auf diesen Speicherorten keine böswilligen Operationen (Lesen / Schreiben usw.) ausgeführt werden.

Unter Linux ist die Verwendung eines Bind-Mounts eine gute Möglichkeit, den Chroot-Baum zu füllen. Mit , dass Sie in Ordnern wie ziehen können /libund /usr/libzwar nicht in ziehen /usr, zum Beispiel. Binden Sie einfach die Verzeichnisbäume, die Sie möchten, an Verzeichnisse, die Sie im Gefängnisverzeichnis erstellt haben.

Ben Combee
quelle
10
Ihre Antwort ist großartig. Eines ist jedoch zu erwähnen: Chroot ist kein sicherer Mechanismus (ein Prozess kann aus dem Gefängnis ausbrechen, wenn er root wird, und manchmal sogar, wenn nicht). Echte Gefängnisse können mit FreeBSD-Gefängnissen und dergleichen durchgesetzt werden. Siehe dies en.wikipedia.org/wiki/FreeBSD_jail#Similar_technologies
nc3b
3
Der Gentoo-Installationsprozess verwendet eine Chroot, sodass Sie Ihr neues Betriebssystem einrichten können, bevor Sie GRUB, den Linux-Kernel usw. installiert haben.
Chris Huang-Leaver
3
Schauen Sie sich firejail an, um eine vollständige Jailed- Shell mit allen Linux-Namespaces zu erhalten. Es gibt Deb- und RPM-Pakete. Im Allgemeinen würde ich empfehlen Kernel 3.18 oder später aber aufgrund eines bekannten Problem mit nicht in der Lage zu sein , neue Software zu installieren oder Benutzerverwaltung tun , wenn firejailausgeführt wird .
CivFan
Tolle Antwort! - Einige grundlegende Beispiele wären jedoch schön zu sehen.
Gabriel Staples
Kann ein Benutzer im chroot-Gefängnis Binärdateien aufrufen, die sich darunter /binbefinden und vom Root-Benutzer installiert wurden? @ Ben Combee
alper
50

"chroot jail" ist eine falsche Bezeichnung, die eigentlich aussterben sollte, aber die Leute benutzen sie weiterhin. chrootist ein Tool, mit dem Sie ein Verzeichnis auf Ihrem Dateisystem als Root des Dateisystems simulieren können. Das heißt, Sie können eine Ordnerstruktur wie folgt haben:

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

Wenn Sie chroot foound tun ls /, werden Sie sehen:

-- bar
-- baz

Für ls(und alle anderen von Ihnen ausgeführten) Tools sind dies die einzigen Verzeichnisse im Dateisystem. Der Grund, warum "Jail" eine falsche Bezeichnung ist, chrootist nicht dafür gedacht, ein Programm dazu zu zwingen , 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 es nicht chrootals Sicherheitsmaßnahme verwenden, um zu verhindern, dass ein Programm Dateien außerhalb Ihres simulierten Dateisystems ändert

Michael Mrozek
quelle
16
Es wäre hilfreich, ein Beispiel dafür zu haben, wie man einem chroot"Gefängnis" entkommt . Der Fall, den ich gesehen habe, erfordert die Eskalation zu Root-Rechten. Ist es schwierig zu verhindern, dass ein Prozess zu Root-Rechten eskaliert?
CivFan
4
Es ist immer noch "Haft", also ist "Gefängnis" eine gute Abkürzung. Wäre "Level 3 Containment Field" besser ?!
MikeW
4
Der Begriff stammt aus FreeBSD-Jails. Gefängnisse sind auf Chroot aufgebaut. Gefängnisse sollten die Sicherheitsprobleme chrootnicht lösen . Aus diesem Grund vermischen sich die Leute oft chrootund jailsmeinen dasselbe. Sie tun es nicht. Der Begriff "Gefängnis" soll von Bill Cheswick geprägt worden sein, als er einen Honigtopf aufstellte, um einen Cracker zu fangen: csrc.nist.gov/publications/secpubs/berferd.pdf
BugHunterUK
Also, was meinst du, ist das nicht chroot jaileine gute Idee in meinem Fall ?
Shafizadeh
10

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 zugreift. 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.

jacksonh
quelle
6

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

Eine Verwendung ist das Testen von Skripten (Startzeit und andere), die absolute Pfadreferenzen enthalten, oder das Ausführen von Befehlen, die Sie möglicherweise abfangen und protokollieren möchten (und möglicherweise nicht ausführen möchten) - in einer Umgebung, in der Sie dies nicht möchten arbeiten tatsächlich auf Ihrer laufenden Umgebung.

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

Außerdem können Sie dann feststellen, welche Befehle oder anderen Skriptdateien verwendet werden, da die Ausführung immer dann mit einem Fehler beendet wird, wenn versucht wird, ein Befehls- oder Shell-Skript auszuführen, das nicht im "chroot-Gefängnis" vorhanden ist.

(Natürlich könnte man das ganze Schwein über in QEMU oder Docker oder einer VM laufen, aber dazu müsste man ein VM-Image usw. erstellen - viel mehr Arbeit)

MikeW
quelle