chroot(2) System Calls Manual chroot(2) BEZEICHNUNG chroot - Wurzelverzeichnis wechseln BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include int chroot(const char *Pfad); Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)): chroot(): Since glibc 2.2.2: _XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L) || /* Seit Glibc 2.20: */ _DEFAULT_SOURCE || /* Glibc <= 2.19: */ _BSD_SOURCE Vor Glibc 2.2.2: none BESCHREIBUNG chroot() wechselt das Wurzelverzeichnis des aufrufenden Prozesses in das durch Pfad angegebene. Dieses Verzeichnis wird fur Pfadnamen verwendet, die mit / beginnen. Das Wurzelverzeichnis wird an alle Kindprozesse des aufrufenden Prozesses vererbt. Nur ein privilegierter Prozess kann chroot() aufrufen (Linux: einer mit der Capability CAP_SYS_CHROOT in seinem Benutzernamensraum). Dieser Aufruf andert nur eine Komponente im Prozess der Auflosung des Pfadnamens. Er ist weder fur irgendwelche Sicherheitsbelange gedacht noch fur das Sandboxing eines Prozesses oder fur die Einschrankung von auf das Dateisystem bezogene Systemaufrufe. Fruher wurde chroot() tatsachlich von Hintergrunddiensten vor der Ubergabe von Pfaden durch nicht vertrauenswurdige Benutzer an Systemaufrufe wie open(2) genutzt. Wie auch immer, wenn ein Verzeichnis an Orte ausserhalb des Chroot-Verzeichnisses verschoben wird, dann kann ein Angreifer dies ausnutzen, um ebenso aus diesem auszubrechen. Der einfachste Weg dahin ist, mit chdir(2) in das zu verschiebende Verzeichnis zu wechseln, auf die Verschiebung zu warten und dann einen Pfad wie ../../../etc/passwd zu offnen. Eine etwas ausgefeiltere Version kann unter bestimmten Umstanden auch funktionieren, wenn die Verwendung von chdir(2) nicht moglich ist. Wenn ein Hintergrunddienst die Angabe eines >>Chroot-Verzeichnisses<< ermoglicht, bedeutet das meist: Wenn Sie entfernte Benutzer daran hindern wollen, auf Dateien ausserhalb des Chroot-Verzeichnisses zuzugreifen, durfen Verzeichnisse niemals an Orte ausserhalb des Wurzelverzeichnisses verschoben werden. Dieser Aufruf andert nicht das aktuelle Arbeitsverzeichnis, so dass sich >>.<< nach dem Aufruf ausserhalb des Baums mit der Wurzel bei >>/<< befinden kann. Insbesondere kann der Superuser dem >>chroot-Gefangnis<< entfliehen wie folgt: mkdir foo; chroot foo; cd .. Dieser Aufruf schliesst keine gesoffneten Datei-Deskriptoren. Solche Datei-Deskriptoren konnten Zugriff auf Dateien ausserhalb des Chroot-Baumes gewahren. RUCKGABEWERT Bei Erfolg wird Null zuruckgegeben. Bei einem Fehler wird -1 zuruckgegeben und errno gesetzt, um den Fehler anzuzeigen. FEHLER In Abhangigkeit vom Dateisystem konnen andere Fehlerwerte zuruckgegeben werden. Die haufigsten Fehler sind hier aufgelistet: EACCES Eine Komponente des Pfad-Prafix darf nicht durchsucht werden. (Siehe auch path_resolution(7).) EFAULT Pfad zeigt aus dem fur Sie zuganglichen Adressraum heraus. EIO Es ist ein E/A-Fehler (engl. I/O) aufgetreten. ELOOP Bei der Auflosung von Pfad wurden zu viele symbolische Links gefunden. ENAMETOOLONG Pfad ist zu lang. ENOENT Die Datei existiert nicht. ENOMEM Es war nicht genugend Kernelspeicher verfugbar. ENOTDIR Eine Komponente von Pfad ist kein Verzeichnis. EPERM Der Aufrufende verfugt nicht uber ausreichende Privilegien. STANDARDS Keine. GESCHICHTE SVr4, 4.4BSD, SUSv2 (als ALTLAST markiert). Diese Funktion ist nicht Teil von POSIX.1-2001. ANMERKUNGEN Ein Kindprozess, der mit fork(2) erstellt wurde, erbt das Wurzelverzeichnis seines Elternprozesses. Das Wurzelverzeichnis wird von execve(2) unverandert gelassen. Der magische symbolische Link /proc/PID/root kann zur Auffindung des magischen Verzeichnisses des Prozesses verwandt werden; siehe proc(5) fur Details. FreeBSD verfugt uber einen starkeren Systemaufruf: jail(). SIEHE AUCH chroot(1), chdir(2), pivot_root(2), path_resolution(7), switch_root(8) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Ralf Demmer , Chris Leick und Mario Blattermann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 chroot(2)