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?
99
Antworten:
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
/lib
und/usr/lib
zwar 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.quelle
firejail
ausgeführt wird ./bin
befinden und vom Root-Benutzer installiert wurden? @ Ben Combee"chroot jail" ist eine falsche Bezeichnung, die eigentlich aussterben sollte, aber die Leute benutzen sie weiterhin.
chroot
ist 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:Wenn Sie
chroot foo
und tunls /
, werden Sie sehen: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,chroot
ist 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 nichtchroot
als Sicherheitsmaßnahme verwenden, um zu verhindern, dass ein Programm Dateien außerhalb Ihres simulierten Dateisystems ändertquelle
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?chroot
nicht lösen . Aus diesem Grund vermischen sich die Leute oftchroot
undjails
meinen 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.pdfchroot jail
eine gute Idee in meinem Fall ?Grundsätzlich ändern Sie nur das Stammverzeichnis Ihrer Umgebung. Damit
wird
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.
quelle
"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)
quelle