Chroot

Chroot
Chroot-command-example.png
Beispiel Verwendung von Chroot in Raspberry Pi OS Interaktive Shell mit einem speziellen Root -Verzeichnis ausführen
Originalautor (en) Bill Joy, AT & T Bell Laboratories
Entwickler (en) Verschiedene Open Source und kommerziell Entwickler
Erstveröffentlichung 1979; Vor 43 Jahren
Betriebssystem Unix, Unix-artig, Plan 9, Inferno
Plattform Plattformübergreifend
Typ Befehl

A Chroot an Unix und Unix-artig Betriebssysteme ist eine Operation, die den scheinbaren ändert Wurzelverzeichnis Für den aktuellen Laufprozess und der sein Kinder. Ein Programm, das in einer solchen modifizierten Umgebung ausgeführt wird, kann keine Dateien außerhalb des bestimmten Verzeichnisbaums benennen (und daher normalerweise nicht zugreifen). Der Begriff "chroot" kann sich auf die beziehen Chroot (2) Systemanruf oder der Chroot (8) Wrapper -Programm. Die modifizierte Umgebung wird als a genannt Chroot Gefängnis.

Geschichte

Der Chroot -Systemaufruf wurde während der Entwicklung von eingeführt Version 7 Unix 1979. Eine Quelle schlägt das vor Bill Joy fügte es am 18. März 1982 - 17 Monate zuvor hinzu 4.2bsd wurde freigegeben - um das Installation und das Aufbausystem zu testen.[1] Alle Versionen von BSD, die einen Kernel hatten, haben Chroot (2).[2][3] Eine frühzeitige Verwendung des Begriffs "Gefängnis", der auf Chroot angewendet wird Bill Cheswick ein ... Erstellen Honigtopf zu überwachen a Hacker 1991.[4]

Der erste Artikel über einen Jailbreak wurde in der Security -Spalte von Sunworld Online erörtert, die von Carole Fennelly geschrieben wurde. Die Ausgaben im August 1999 und Januar 1999 behandeln die meisten Themen Chroot ().[5]

Um es nützlich zu machen für Virtualisierung, Freebsd erweiterte das Konzept und führte in seiner Veröffentlichung von 4.0 im Jahr 2000 das vor die Gefängnis Befehl.[6]

Bis 2002 beschrieben ein Artikel von Nicolas Boiteux, wie man ein Gefängnis unter Linux erstellt [7]

Bis 2003 bieten erste Internet -Microservices -Anbieter mit Linux -Gefängnissen SaaS/PaaS -Dienste (Shell Container, Proxy, IRCD, Bots, ...) an[8]

Bis 2005, Sonne veröffentlicht Solaris -Behälter (auch als Solaris -Zonen bekannt), beschrieben als "Chroot auf Steroiden".[9]

Bis 2008, LXC (worauf Docker wurde später gebaut) die Terminologie "Container" übernommen[10] und 2013 aufgrund der Aufnahme in die Beliebtheit in die Popularität gewonnen Linux Kernel 3.8 von Benutzernamenspaces.[11]

Verwendet

Eine Chroot -Umgebung kann verwendet werden, um eine separate zu erstellen und zu hosten virtualisiert Kopie des Softwaresystems. Dies kann nützlich sein für:

Test und Entwicklung
Eine Testumgebung kann in der Chroot für Software eingerichtet werden, die ansonsten zu riskant wären, um in einem Produktionssystem bereitzustellen.
Abhängigkeitskontrolle
Software kann in einem Chroot entwickelt, gebaut und getestet werden, der nur mit den erwarteten Abhängigkeiten besiedelt ist. Dies kann einige Arten von Verknüpfungen verhindern, die sich aus Entwicklern ergeben können, die Projekte mit unterschiedlichen Sätzen von Programmbibliotheken erstellen.
Kompatibilität
Legacy -Software oder -Software mit einem anderen Abi Muss manchmal in einem Chroot ausgeführt werden, da ihre unterstützenden Bibliotheken oder Datendateien sonst in Namen oder Verknüpfung mit denen des Host -Systems zusammenhängen.
Wiederherstellung
Sollte ein System unbootbar gemacht werden, kann ein Chroot verwendet werden, um nach dem Bootstrapping aus einem alternativen Root -Dateisystem zurückzukehren (z. B. aus Installationsmedien oder einem Live -CD).
Privilegentrennung
Programme dürfen offen tragen Dateideskriptoren (für Dateien, Pipelines und Netzwerkverbindungen) in den Chroot, das das Gefängnisdesign vereinfachen kann, indem es unnötig wird, Arbeitsdateien im Chroot -Verzeichnis zu hinterlassen. Dies vereinfacht auch die gemeinsame Anordnung, die potenziell gefährdeten Teile eines privilegierten Programms in einem Sandkasten auszuführen, um präventiv eine Sicherheitsverletzung einzudämmen. Beachten Sie, dass Chroot nicht unbedingt ausreicht, um einen Prozess mit Wurzelberechtigten zu enthalten.

Einschränkungen

Der Chroot -Mechanismus soll nicht gegen absichtliche Manipulationen durch privilegierte (root) -Nutzer verteidigen. In den meisten Systemen stapeln sich Chroot -Kontexte nicht ordnungsgemäß und chroted -Programme mit ausreichenden Privilegien können a Zweiter Chroot ausbrechen. Um das Risiko dieser Sicherheitsschwäche zu mildern, sollten chrotedierte Programme die Wurzelprivilegien so schnell wie praktisch nach dem Chrootieren oder anderen Mechanismen aufgeben - wie z. FreeBSD Gefängnis - sollte stattdessen verwendet werden. Beachten Sie, dass einige Systeme wie z. FreebsdTreffen Sie Vorsichtsmaßnahmen, um den zweiten Chroot -Angriff zu verhindern.[12]

Auf Systemen, die Geräteknoten in gewöhnlichen Dateisystemen unterstützen, ein Chroted Root -Benutzer kann weiterhin Geräteknoten erstellen und die Dateisysteme darauf montieren. Daher soll der Chroot-Mechanismus nicht für sich genutzt werden, um durch privilegierte Benutzer den Zugriff auf niedrige Ebene auf Systemgeräte zu blockieren. Es ist nicht beabsichtigt, die Verwendung von Ressourcen wie einzuschränken I/o, Bandbreite, Speicherplatz oder CPU -Zeit. Die meisten Unixe sind nicht vollständig systemorientiert und hinterlassen potenziell störende Funktionen wie Netzwerke und Prozesssteuerung, die über die System-Call-Schnittstelle zu einem Chroted-Programm verfügbar sind.

Bei Startup erwarten Programme zu finden Kratzerraum, Konfigurationsdateien, Geräteknoten und gemeinsame Bibliotheken an bestimmten voreingestellten Orten. Damit ein chrotedes Programm erfolgreich gestartet werden kann, muss das Chroot -Verzeichnis mit einem Mindestsatz dieser Dateien bevölkert werden. Dies kann Chroot erschweren, als ein allgemeiner Sandbox -Mechanismus zu verwenden. Werkzeuge wie Jailkit Kann diesen Prozess erleichtern und automatisieren.

Nur der Root -Benutzer kann einen chroot ausführen. Dies soll verhindern, dass Benutzer a einsetzen setUid Programm in einem speziell gefertigten Chroot -Gefängnis (zum Beispiel mit einer Fälschung /etc/passwd und /etc/Shadow Datei) das würde es zu einem täuschen Privilegienkalation.

Einige Unixe bieten Erweiterungen des Chroot -Mechanismus, um zumindest einige dieser Einschränkungen zu behandeln (siehe Implementierungen der Virtualisierungstechnologie auf Betriebssystemebene).

Grafische Anwendungen auf Chroot

Es ist möglich, grafische Anwendungen in einer chrootenden Umgebung auszuführen, wobei Methoden wie:[13][14]

  • Verwenden XHOST (oder kopieren Sie das Geheimnis von .XAuthority)
  • Verschachtelte X -Server wie Xnest oder das modernere Xephyr (oder starten Sie einen echten X -Server aus dem Gefängnis)
  • Zugriff auf den Chroot über Ssh Verwenden der X11 -Weiterleitungsfunktion (SSH -X)
  • Xchroot Eine erweiterte Version von Chroot für Benutzer und XORG/X11 (SOCAT/Mount)
  • Ein x11 VNC Server und Verbindung a VNC Kunde außerhalb der Umgebung.

Bemerkenswerte Anwendungen

Das Postfix Der Mail -Transfer -Agent arbeitet als Pipeline von individuell chromartigen Helferprogrammen.

Wie bei 4.2bsd zuvor verwenden die internen Paketbetriebe von Debian und Ubuntu Chroots ausgiebig, um unbeabsichtigte Build-Abhängigkeiten zwischen Paketen zu fangen. Suse verwendet eine ähnliche Methode mit seiner bauen Programm. Fedora, Red Hat und verschiedene RPM-basierte Verteilungen bauen alle auf Drehzahl Verwenden eines Chroot -Tools wie z. spotten.

Viele FTP -Server Für POSIX -Systeme verwenden Sie den Chroot -Mechanismus, um nicht vertrauenswürdige FTP -Clients zu sandkasten. Dies kann durch Abgegenteil eines Prozesses zur Verarbeitung einer eingehenden Verbindung und Chrootieren des Kindes erfolgen (um zu vermeiden, dass die Chroot mit Bibliotheken gepopulieren muss, die für das Programmstart erforderlich sind).

Wenn die Trennung der Privilegien aktiviert ist, die OpenSSH Daemon wird einen nicht privilegierten Helferprozess in ein leeres Verzeichnis haben, um für jeden Client den Datenverkehr vor dem Authentifizierungsnetzwerk zu bewältigen. Der Daemon kann auch sandbox SFTP- und Shell -Sitzungen in einem Chroot (ab Version 4.9p1).[15]

Chrome OS kann mit einem Chroot eine Linux -Instanz mithilfe verwenden Crouton,[16] Bereitstellung eines ansonsten dünnen Betriebssystems mit Zugriff auf Hardware -Ressourcen. Die in diesem Artikel verwandten Sicherheitsauswirkungen gelten hier.

Virtuelle Dateisysteme und Konfigurationsdateien von Linux Host -Kernel -Kernel

Um eine funktionale Chroot -Umgebung unter Linux zu haben, müssen auch die virtuellen Kern -Dateisysteme und Konfigurationsdateien vom Host zu Chroot montiert/kopiert werden.

# Virtuelle Dateisysteme von Mount Kernel Targetdir="/mnt/chroot" Mount -t -Proc Proc $ Targetdir/Proc Mount -t sysfs sysfs $ Targetdir/sys montage -t devtmpfs devtmpfs $ Targetdir/dev mont -t tmpfs tmpfs $ Targetdir/Dev/SHM Mount -t Devpts Devpts $ Targetdir/dev/pts# Kopie /etc /hosts /bin/cp -f/etc/hosts $ Targetdir/etc/# Copy /etc/resolv.conf  /bin/cp -f /etc/resolv.conf $ Targetdir/etc/resolv.conf# Link /etc /mtab Chroot $ Targetdir RM /etc /mtab 2> /dev /null chalt $ Targetdir ln -S /proc /montiert /etc /mtab

Siehe auch

Verweise

  1. ^ "Gefängnis, Abschnitt 9". docs.freebsd.org.
  2. ^ Losh, Warner (2. Februar 2000). "Warners zufälliger Hacking -Blog: Wohin Chroot?".
  3. ^ "Dateninfrastrukturen für den Rest von uns - III - Software".
  4. ^ Cheswick, Bill (1991). "Ein Abend mit Berferd: in dem ein Cracker gelockt, ertragen und studiert wird" (PDF). Usenix Summer Conference Proceedings, Band 1. Usenix. San Francisco, Kalifornien: Die Vereinigung. p. 163.
  5. ^ Carole, Fennelly. "Sommertime Potluck". Sunworld online. Carole Fennelly. Archiviert Aus dem Original am 18. September 2021.
  6. ^ Riondato, Matteo. "FreeBSD -Handbuch" Jails "Kapitel". FreeBSD.org. Das FreeBSD -Projekt. Abgerufen 2018-10-30.
  7. ^ Nicolas, Boiteux. "Chroot Shell". lycos.fr. Nicolas Boiteux. Archiviert von das Original Am 2002-10-14. Abgerufen 24. März 2018.
  8. ^ "Girafon". girafon.org. Girafon. Archiviert von das Original Am 2004-06-12. Abgerufen 24. März 2018.
  9. ^ Schmidt, Klaus (2006-09-02). Hohe Verfügbarkeit und Katastrophenrecount: Konzepte, Design, Implementierung. Springer Science & Business Media. p. 186. ISBN 9783540345824. Abgerufen 2014-08-21.
  10. ^ "Sourceforge LXC Download -Dateien". SourceForge.net. Abgerufen 2014-08-21.
  11. ^ Rosen, Rami (2014-03-26). "Linux -Container und die zukünftige Cloud" (PDF). Abgerufen 2014-08-21.
  12. ^ "Chroot (2)". www.freebsd.org.
  13. ^ "Entwicklung/Howto/Chroot". Mandriva Wiki. 25. Juli 2011. archiviert von das Original Am 2014-03-26.
  14. ^ "Howto to starten in einem chroot". Gentoo Wiki. Archiviert von das Original Am 2011-08-31. Abgerufen 2011-10-13.
  15. ^ "SSHD_CONfig (5) Manuelle Seite". 2017-10-26. Abgerufen 2018-02-04.
  16. ^ "Chrom OS Universal Chroot Umgebung (auf Github)". Abgerufen 2016-12-17.

Externe Links