chroot

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

chroot steht für „change root“ und ist eine Funktion unter Unix-Systemen, um das Rootverzeichnis zu ändern. Sie wirkt sich nur auf den aktuellen Prozess und seine Kindprozesse aus. „chroot“ selbst kann sich sowohl auf den Systemaufruf chroot(2) als auch auf das Dienstprogramm chroot(8) beziehen.

Ein Programm, das auf ein Verzeichnis „gerootet“ wurde und keine offenen Dateideskriptoren in den Bereich außerhalb des virtuellen Root-Verzeichnisses besitzt, kann (bei korrekter Implementierung des Betriebssystemkerns) nicht mehr auf Dateien außerhalb dieses Verzeichnisses zugreifen. chroot bietet somit eine einfache Möglichkeit, nicht vertrauenswürdige, Test- oder sonstwie gefährliche Programme in eine Sandbox zu versetzen. Es ist ein einfacher Jail-Mechanismus, aus dem aber durchaus leicht wieder ausgebrochen werden kann.

chroot wurde nicht als Sicherheitsfeature entworfen, sondern primär für das Aufsetzen virtueller Umgebungen verwendet. Die erste größere bekannte Anwendung war in Network Software Engineering (NSE) auf SunOS im Jahr 1986. Dort war ein Verlassen der Umgebung mit fchroot(1) möglich und dokumentiert.

In der Praxis wird „Chrooting“ dadurch erschwert, dass Programme beim Start erwarten, Platz für temporäre Dateien, Konfigurationsdateien, Gerätedateien und Programmbibliotheken an bestimmten festen Orten vorzufinden. Um diese Programme innerhalb des chroot-Verzeichnisses laufen zu lassen, muss das Verzeichnis mit diesen notwendigen Dateien ausgestattet werden.

Sicherheitsfeature oder nicht?[Bearbeiten]

Ob chroot-Umgebungen ein Sicherheitsfeature sind, um einzelne Programme gegenüber dem Gesamtrechner abzuschotten, hängt stark von der Ansicht der Schöpfer des Betriebssystems ab:

  • In Solaris wurde chroot vor Solaris 10 nicht als Sicherheitsfeature bezeichnet und deshalb auch kein Problem darin gesehen, wenn sich ein Programm aus dieser Umgebung „befreien“ kann. Das Ausbrechen ist sogar explizit dokumentiert. Um Prozesse gegeneinander abzuschotten, gibt es seit Solaris 10 das Konzept der Zonen, das auf chroot(2) aufbaut. In Solaris 10 und späteren Versionen wurden jedoch viele weitere Eigenschaften hinzugefügt und auch Dateisysteme (wie das proc-Filesystem) explizit gegen chroot gesichert.[1]
  • Unter Linux wird chroot nicht als Sicherheitsfeature bezeichnet. Wie der Benutzer root eine chroot-Umgebung verlassen kann, ist in der chroot(2)-Manpage dokumentiert.
  • Viele BSD-Systeme versuchen dagegen, einen Prozess, der einmal in einer chroot-Umgebung läuft, nicht wieder heraus zu lassen. Unter NetBSD ist es sehr schwierig. [2] FreeBSD bietet das Konzept der Jails, um Prozesse voneinander abzuschotten.

Einsatz[Bearbeiten]

Rechtetrennung
Ein chroot kann als Vorsorgemaßnahme gegen einen Sicherheitsbruch eingesetzt werden, indem es einen potentiellen Angreifer daran hindert, mit einem kompromittierten Programm Schaden anzurichten oder das System zu sondieren. Beispielsweise kann ein Dateiserver im Netzwerk das Verzeichnis, aus dem er einen Client bedient, direkt nach der Verbindungsaufnahme chrooten. Einen ähnlichen Ansatz verfolgt der Mail Transfer Agent Postfix, der seine Aufgabe auf mehrere kleine, hintereinander geschaltete Programme aufteilt, die jedes für sich in eigenen Chroots laufen. Ein guter Einsatz ist chroot auch für FTP-Server, damit FTP-User nicht aus ihrem „home“-Verzeichnis in ein anderes Verzeichnis wechseln können.
Honeypot
Ein chroot-Verzeichnis kann so bestückt werden, dass ein echtes System mit Netzwerkdiensten simuliert wird. Der chroot-Mechanismus kann dann Angreifer daran hindern, zu erkennen, dass sie sich in einer künstlichen Umgebung befinden, oder in das echte System auszubrechen.
Testen
Die durch den chroot-Mechanismus erreichte Isolation ist auch zu Testzwecken nützlich. In ein solches Verzeichnis kann eine eigene Kopie des Betriebssystems installiert werden und als Testumgebung für Software dienen, deren Einsatz in einem Produktivsystem zu riskant wäre.
Reparatur
Um ein Linux-/Unix-System mit Hilfe einer Boot-CD zu reparieren, kann chroot genutzt werden, um auf dem eingemounteten System zu arbeiten. So kann beispielsweise ein vergessenes Root-Passwort wiederhergestellt werden.
Installation eines Betriebssystems
Die Installation einiger Linux-Distributionen ist nur über die Kommandozeile möglich. Deswegen ist es nötig, nach dem Entpacken des Distributionsarchives in eine neue Partition mit chroot die neue Systemumgebung zu betreten.[3]

Nachteile[Bearbeiten]

Nur der Benutzer root kann chroot ausführen. Dies soll normale Benutzer davon abhalten, ein setuid-Programm innerhalb einer speziell angefertigten Chroot-Umgebung zu platzieren (z. B. mit einer falschen /etc/passwd Datei), welche es dazu bringen würde, Rechte zu vergeben. Es hindert jedoch auch Nicht-Root-Benutzer an der Verwendung des chroot-Mechanismus, um eine eigene Sandbox zu erstellen.

„schroot“ erlaubt Nutzern ein chroot, „openroot“ stellt viele erweiterte Funktionen zur Verfügung wie etwa X11 Forwarding für GUI-Programme.

Der chroot-Mechanismus selbst ist nicht gänzlich sicher. Wenn ein Programm in einer chroot-Umgebung Root-Rechte besitzt, kann es (unter Linux oder Solaris) eine verschachtelte chroot-Umgebung verwenden, um aus der ersten auszubrechen.[4]

Da die meisten Unix-Systeme nicht komplett dateisystemorientiert sind, bleiben potenziell gefährliche Funktionalitäten wie die Kontrolle über Netzwerk und Prozesse durch Systemaufrufe einem gechrooteten Programm verfügbar.

Der chroot-Mechanismus selbst verhängt auch keine Einschränkungen über Ressourcen wie I/O-Bandbreite, Plattenplatz oder CPU-Zeit.

Siehe auch[Bearbeiten]

  • OpenVZ – Eine Virtualisierungslösung, die ähnlich wie chroot arbeitet, aber besser abschottet[5]

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. vgl. dazu chroot(1m), chroot(2), fchroot(2) und gchroot(1); abgerufen am 10. April 2014
  2. http://web.archive.org/web/20081210042915/http://wiki.netbsd.se/How_to_break_out_of_a_chroot_environment
  3. http://www.gentoo.de/doc/de/handbook/handbook-x86.xml?part=1&chap=6#doc_chap1_sect4
  4. http://www.bpfh.net/simes/computing/chroot-break.html
  5. http://blog.robertalks.com/index.php/2009/04/03/xen-vs-openvz/