So verwenden Sie den chroot-Befehl unter Linux

Eine Terminal-Eingabeaufforderung auf einem Linux-Laptop

Fatmawati Achmad Zaenuri/Shutterstock.com



Die |_+_| Befehl kann Sie ins Gefängnis schicken, Ihre Entwicklungs- oder Testumgebungen isoliert halten oder einfach nur die Sicherheit Ihres Systems verbessern. Wir zeigen Ihnen, wie Sie es am einfachsten verwenden.

Was ist ein Chroot?

Wenn Sie versuchen, die Nützlichkeit eines Befehls zu messen, müssen Sie seine Funktionalität und seine Benutzerfreundlichkeit berücksichtigen. Wenn es für die Leute zu kompliziert oder zu langatmig ist, um sie dazu zu bringen, es zu benutzen, kann die Funktionalität genauso gut Null sein. Wenn es von niemandem verwendet wird, bietet es keine Funktionalität.





In Diskussionen mit Linux-Benutzern – persönlich und in Foren – scheint es, dass die |_+_| Befehl ist ein Befehl, der als schwierig zu verwenden oder zu umständlich und mühsam einzurichten gilt. Es scheint, dass dieses großartige Dienstprogramm nicht so oft verwendet wird, wie es sein könnte.

10 grundlegende Linux-Befehle für Anfänger VERBUNDEN 10 grundlegende Linux-Befehle für Anfänger

Mit |_+_| du kannst einrichten und Ausführen von Programmen oder interaktiven Shells wie Bash in einem gekapselten Dateisystem, das daran gehindert ist, mit Ihrem regulären Dateisystem zu interagieren. Alles innerhalb der |_+_| Umwelt eingepfercht und eingedämmt. Nichts im |_+_| Umgebung kann über ihr eigenes, spezielles Root-Verzeichnis hinaussehen, ohne zu Root-Rechten zu eskalieren. Das hat dieser Art von Umgebung den Spitznamen eines |_+_| . eingebracht Gefängnis. Der Begriff Gefängnis sollte nicht verwechselt werden mit FreeBSDs |_+_| Befehl, der ein |_+_| . erstellt Umgebung das ist sicherer als das übliche |_+_| Umgebung.



Aber eigentlich gibt es eine sehr einfache Möglichkeit, |_+_| zu verwenden, die wir durchgehen werden. Wir verwenden normale Linux-Befehle, die auf allen Distributionen funktionieren. Einige Linux-Distributionen verfügen über spezielle Tools zum Einrichten von |_+_| Umgebungen, wie z debootstrap für Ubuntu, aber wir sind hier distro-agnostisch.

Wann sollten Sie eine Chroot verwenden?

A |_+_| Umgebung bietet ähnliche Funktionen wie eine virtuelle Maschine, ist jedoch eine einfachere Lösung. Für das Captive-System muss kein Hypervisor installiert und konfiguriert werden, wie z VirtualBox oder Virtual Machine Manager . Es muss auch kein Kernel im Captive-System installiert sein. Das Captive-System teilt Ihren vorhandenen Kernel.

Anzeige

In gewisser Hinsicht ist |_+_| Umgebungen sind näher an Containern wie LXC als bei virtuellen Maschinen. Sie sind leichtgewichtig, schnell bereitzustellen und können automatisiert erstellt und gestartet werden. Wie bei Containern besteht eine bequeme Möglichkeit, sie zu konfigurieren, darin, gerade so viel des Betriebssystems zu installieren, dass Sie die erforderlichen Schritte ausführen können. Die Frage, was erforderlich ist, wird beantwortet, indem Sie sich ansehen, wie Sie Ihr |_+_| . verwenden werden Umgebung.



Einige häufige Verwendungen sind:

Softwareentwicklung und Produktverifizierung . Entwickler schreiben Software und das Product Verification Team (PV) testet sie. Manchmal werden von PV Probleme gefunden, die auf dem Computer des Entwicklers nicht repliziert werden können. Der Entwickler hat alle möglichen Tools und Bibliotheken auf seinem Entwicklungscomputer installiert, die der durchschnittliche Benutzer – und PV – nicht haben wird. Oft stellt sich heraus, dass neue Software, die für den Entwickler funktioniert, aber nicht für andere, eine Ressource auf dem PC des Entwicklers verwendet, die nicht in der Testversion der Software enthalten ist. |_+_| ermöglicht es den Entwicklern, eine einfache, geschützte Umgebung auf ihrem Computer zu haben, in die sie die Software eintauchen können, bevor sie sie an PV weitergeben. Die Captive-Umgebung kann mit den minimalsten Abhängigkeiten konfiguriert werden, die die Software erfordert.

Reduzierung des Entwicklungsrisikos . Der Entwickler kann eine dedizierte Entwicklungsumgebung erstellen, damit nichts, was darin passiert, seinen eigentlichen PC durcheinander bringen kann.

Ausführen veralteter Software . Manchmal muss man einfach eine alte Version von etwas laufen lassen. Wenn die alte Software Anforderungen hat, die mit Ihrer Linux-Version kollidieren oder nicht kompatibel sind, können Sie |_+_| eine Umgebung für die problematische Software.

Anzeige

Wiederherstellung und Dateisystem-Upgrades : Wenn eine Linux-Installation nicht mehr funktioniert, können Sie |_+_| . verwenden um das beschädigte Dateisystem an einem Einhängepunkt auf einer Live-CD zu mounten. Auf diese Weise können Sie in dem beschädigten System arbeiten und versuchen, es zu reparieren, als wäre es normal unter root / gemountet. Dies bedeutet, dass die erwarteten Dateipfade innerhalb des beschädigten Systems vom Stammverzeichnis aus korrekt referenziert werden und nicht vom Einhängepunkt der Live-CD. Eine ähnliche Technik wurde in dem Artikel verwendet, der beschreibt, wie das Linux-Dateisystem von ext2 oder ext3 auf ext4 migriert wird.

Ringfencing-Anwendungen . Ausführen eines FTP-Servers oder einer anderen mit dem Internet verbundenen Appliance in einem |_+_| Umgebung begrenzt den Schaden, den ein externer Angreifer anrichten kann. Dies kann ein wertvoller Schritt zur Erhöhung der Sicherheit Ihres Systems sein.

VERBUNDEN: So migrieren Sie Ext2- oder Ext3-Dateisysteme zu Ext4 unter Linux

Erstellen einer chroot-Umgebung

Wir brauchen ein Verzeichnis, das als Stammverzeichnis des |_+_| . fungiert Umgebung. Damit wir eine Abkürzung für dieses Verzeichnis haben, erstellen wir eine Variable und speichern den Namen des Verzeichnisses darin. Hier richten wir eine Variable ein, um einen Pfad zum testroot-Verzeichnis zu speichern. Es spielt keine Rolle, ob dieses Verzeichnis noch nicht existiert, wir werden es bald erstellen. Wenn das Verzeichnis vorhanden ist, sollte es leer sein.

chroot

Wenn das Verzeichnis nicht existiert, müssen wir es erstellen. Das können wir mit diesem Befehl tun. Die |_+_| (parents) stellt sicher, dass alle fehlenden übergeordneten Verzeichnisse gleichzeitig erstellt werden:

chroot

Wir müssen Verzeichnisse erstellen, um die Teile des Betriebssystems zu speichern unsere |_+_| Umgebung erfordern wird. Wir werden eine minimalistische Linux-Umgebung einrichten, die Bash als interaktive Shell verwendet. Wir werden auch |_+_|, |_+_| und |_+_| . einschließen Befehle. Dadurch können wir alle integrierten Befehle von Bash und |_+_|, |_+_| und |_+_| verwenden. Wir können Dateien erstellen, auflisten und entfernen und Bash verwenden. Und – in diesem einfachen Beispiel – das ist alles.

Listen Sie die Verzeichnisse auf, die Sie innerhalb der |_+_| . erstellen müssen Strebenerweiterung .

chroot

Jetzt ändern wir das Verzeichnis in unser neues Stammverzeichnis.

chroot

Kopieren wir die Binärdateien, die wir in unserer minimalistischen Linux-Umgebung benötigen, aus Ihrem regulären /bin-Verzeichnis in unser |_+_| /bin-Verzeichnis. Die |_+_| (ausführliche) Option macht |_+_| Sagen Sie uns, was es tut, während es jede Kopieraktion durchführt.

chroot

Die Dateien werden für uns einkopiert:

Anzeige

Diese Binärdateien haben Abhängigkeiten. Wir müssen herausfinden, was sie sind und kopieren jene Dateien auch in unsere Umgebung, ansonsten |_+_|, |_+_|, |_+_| und |_+_| wird nicht funktionieren können. Wir müssen dies der Reihe nach für jeden unserer ausgewählten Befehle tun. Wir machen zuerst Bash. Die |_+_| Befehl wird Liste die Abhängigkeiten auf für uns.

chroot

Die Abhängigkeiten werden identifiziert und im Terminalfenster aufgelistet:

Wir müssen diese Dateien in unsere neue Umgebung kopieren. Die Details aus dieser Liste herauszusuchen und sie einzeln zu kopieren, wird zeitaufwändig und fehleranfällig sein.

Zum Glück können wir es halbautomatisieren. Wir werden die Abhängigkeiten erneut auflisten und diesmal eine Liste erstellen. Dann durchlaufen wir die Liste und kopieren die Dateien.

Hier verwenden wir |_+_| um die Abhängigkeiten aufzulisten und die Ergebnisse über eine Pipe in |_+_| einzuspeisen. Verwenden von |_+_| ist dasselbe wie die Verwendung von |_+_| mit dem |_+_| (erweiterte reguläre Ausdrücke) Option. Die |_+_| (nur übereinstimmende) Option beschränkt die Ausgabe auf die übereinstimmenden Teile von Zeilen. Wir suchen nach übereinstimmenden Bibliotheksdateien, die auf eine Zahl |_+_| enden.

jail

Wir können den Inhalt der Liste mit |_+_| überprüfen:

chroot

Jetzt, da wir die Liste haben, können wir sie mit der folgenden Schleife durchgehen und die Dateien nacheinander kopieren. Wir verwenden die Variable |_+_| um durch die Liste zu gehen. Für jedes Mitglied der Liste kopieren wir die Datei in unser |_+_| Root-Verzeichnis, das ist der Wert in |_+_|.

Anzeige

Die |_+_| (ausführliche) Option verursacht |_+_| jede Kopie ankündigen, während sie sie ausführt. Die |_+_| Option stellt sicher, dass alle fehlenden übergeordneten Verzeichnisse im |_+_| . erstellt werden Umgebung.

chroot

Und das ist die Ausgabe:

Wir verwenden diese Technik, um die Abhängigkeiten der anderen Befehle zu erfassen. Und wir verwenden die Loop-Technik, um das eigentliche Kopieren durchzuführen. Die gute Nachricht ist, dass wir nur eine kleine Änderung an dem Befehl vornehmen müssen, der die Abhängigkeiten sammelt.

Wir können den Befehl aus unserem Befehlsverlauf abrufen, indem wir |_+_| . drücken drücken Sie einige Male und nehmen Sie dann die Bearbeitung vor. Der Schleifenkopierbefehl muss sich überhaupt nicht ändern.

Hier haben wir das |_+_| . verwendet -Taste, um den Befehl zu finden, und wir haben ihn so bearbeitet, dass er |_+_| . sagt statt |_+_|.

chroot

Wir können jetzt genau den gleichen Schleifenbefehl wie zuvor wiederholen:

chroot

Und unsere Dateien werden für uns kopiert:

Wir können jetzt die |_+_| . bearbeiten Befehlszeile für |_+_|:

chroot

Anzeige

Auch hier verwenden wir denselben Schleifenbefehl. Es ist egal, welche Dateien sich in der Liste befinden. Es arbeitet sich blind durch die Liste und kopiert die Dateien für uns.

chroot

Und die Abhängigkeiten für |_+_| werden für uns kopiert:

Wir bearbeiten die |_+_| Befehlszeile zum letzten Mal, damit es für |_+_| funktioniert:

chroot

Wir verwenden den Schleifenkopierbefehl ein letztes Mal:

chroot

Die letzten unserer Abhängigkeiten werden in unsere |_+_| . kopiert Umgebung. Wir sind endlich bereit, die |_+_| . zu verwenden Befehl. Dieser Befehl setzt die Wurzel des |_+_| Umgebung und gibt an, welche Anwendung als Shell ausgeführt werden soll.

chroot

Unsere |_+_| Umgebung ist jetzt aktiv. Die Eingabeaufforderung des Terminalfensters hat sich geändert und die interaktive Shell wird von |_+_| . bearbeitet Schale in unserer Umgebung.

Wir können die Befehle, die wir in die Umgebung gebracht haben, ausprobieren.

chroot chroot

Anzeige

Die |_+_| Befehl funktioniert so, wie wir es erwarten würden, wenn wir ihn in der Umgebung verwenden. Wenn wir versuchen, auf ein Verzeichnis außerhalb der Umgebung zuzugreifen, schlägt der Befehl fehl.

Wir können |_+_| . verwenden um eine Datei zu erstellen, |_+_| um es aufzulisten und |_+_| es zu entfernen.

chroot -p chroot touch

Natürlich können wir auch die integrierten Befehle der Bash-Shell verwenden. Wenn Sie |_+_| . eingeben In der Befehlszeile listet Bash sie für Sie auf.

rm

Benutzen Sie den Ausgang, um die |_+_| . zu verlassen Umgebung:

ls

Wenn Sie |_+_| . entfernen möchten Umgebung, können Sie es einfach löschen:

touch

Dadurch werden die Dateien und Verzeichnisse im |_+_| . rekursiv gelöscht Umgebung.

Komfortabel automatisieren

Wenn du denkst, dass |_+_| Umgebungen können für Sie nützlich sein, aber sie sind ein bisschen fummelig einzurichten. Denken Sie daran, dass Sie durch die Verwendung von Aliasen, Funktionen und Skripten immer die Belastung und das Risiko von sich wiederholenden Aufgaben verringern können.

VERBUNDEN: So erstellen Sie Aliase und Shell-Funktionen unter Linux

Linux-Befehle
Dateien Teer · pv · Katze · tac · chmod · Griff · unterschied · sed · Mit · Mann · geschoben · popd · fsck · Testdisk · seq · fd · pandoc · CD · $PFAD · awk · beitreten · jq · falten · einzigartig · Journalctl · Schwanz · Zustand · ls · fstab · rauswerfen · weniger · chgrp · chown · rev · suchen · Saiten · Typ · umbenennen · Postleitzahl · entpacken · montieren · ummount · Installieren · fdisk · mkfs · rm · rmdir · rsync · df · gpg · wir · Nano · mkdir · von · ln · Patch · Konvertieren · rclon · Fetzen · SRM
Prozesse alias · Bildschirm · oben · nett · renice · Fortschritt · strace · System · tmux · chsh · Geschichte · beim · Charge · kostenlos · die · dmesg · Benutzermod · ps · chroot · xargs · tty · kleiner Finger · lsof · vmstat · Auszeit · Mauer · ja · töten · Schlaf · sudo · seine · Zeit · groupadd · Benutzermod · Gruppen · lshw · stilllegen · neu starten · halt · ausschalten · passwd · lscpu · crontab · Datum · bg · fg
Vernetzung netstat · Klingeln · Traceroute · ip · ss · Wer ist · fail2ban · bmon · Sie · Finger · nmap · ftp · Locken · wget · Wer · Wer bin ich · In · iptables · ssh-keygen · ufw

VERBUNDEN: Beste Linux-Laptops für Entwickler und Enthusiasten

WEITER LESEN Profilfoto von Dave McKay Dave McKay
Dave McKay benutzte zum ersten Mal Computer, als Lochstreifen in Mode waren, und programmiert seitdem. Nach über 30 Jahren in der IT-Branche ist er heute hauptberuflich Technologiejournalist. Im Laufe seiner Karriere war er als freiberuflicher Programmierer, Leiter eines internationalen Softwareentwicklungsteams, Projektleiter für IT-Services und zuletzt als Datenschutzbeauftragter tätig. Sein Schreiben wurde von howtogeek.com, cloudavvyit.com, itenterpriser.com und opensource.com veröffentlicht. Dave ist ein Linux-Evangelist und Open-Source-Verfechter.
Vollständige Biografie lesen

Interessante Artikel