Chroot
aus Wikipedia, der freien Enzyklopädie
Der korrekte Titel dieses Artikels lautet „chroot“. Diese Schreibweise ist aufgrund technischer Einschränkungen nicht möglich. |
chroot steht für „change root“ und ist eine Funktion auf Unix-Systemen um das Rootverzeichnis zu ändern. Sie wirkt sich nur auf den aktuellen Prozess und seine Kindprozesse aus. „chroot“ selbst kann sich auf den Systemaufruf chroot(2) als auch das Dienstprogramm chroot(8) beziehen.
Ein Programm, das auf ein Verzeichnis re-rooted wurde, kann nicht mehr auf Dateien außerhalb dieses Verzeichnisses zugreifen. Chrooting bietet somit eine einfache Möglichkeit, nicht vertrauenswürdige, Test- oder sonstwie gefährliche Programme in eine Sandbox zu versetzen. Es ist auch ein einfacher Jail-Mechanismus.
In der Praxis wird Chrooting dadurch erschwert, dass Programme beim Start erwarten, Platz für temporäre Dateien, Konfigurationsdateien, Gerätedateien und shared Libraries an bestimmten festen Orten zu finden. Um Programme also innerhalb des chroot-Verzeichnisses laufen lassen zu können, muss das Verzeichnis mit diesen notwendigen Dateien ausgestattet werden. Dabei ist vorsichtig vorzugehen um über sie nicht versehentlich Zugriff auf das restliche System zu ermöglichen.
[Bearbeiten] Einsatz
- 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, hintereinandergeschaltete Programme aufteilt, die jedes für sich in eigenen Chroots laufen.
- Honeypot
- Ein chroot-Verzeichnis kann so bestückt werden, dass ein echtes System mit Netzwerkdiensten simuliert wird. Der chroot-Mechanismus kann dann dieses System kompromittierende 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 Produktionssystem zu riskant wäre.
[Bearbeiten] Nachteile
Nur der Benutzer root kann chroot ausführen. Dies soll normale Benutzer davon abhalten, ein setuid-Programm innerhalb einer speziell angefertigten Chroot-Jail zu platzieren (z. B mit einer falschen /etc/passwd), 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.
Der chroot-Mechanismus selbst ist nicht gänzlich sicher. Wenn ein gechrootetes Programm Rootrechte besitzt, kann es eine zweite chroot verwenden um auszubrechen. Das funktioniert, weil einige Unix-Kernel chroot-Kontexte nicht sauber schachteln können.
Da die meisten Unices nicht komplett dateisystemorientiert sind, bleiben potentiell 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.