So verwenden Sie den chroot-Befehl unter Linux

Die chroot 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 chroot 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.

Mit chroot 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 chroot Umwelt eingepfercht und eingedämmt. Nichts im chroot Umgebung kann über ihr eigenes, spezielles Root-Verzeichnis hinaussehen, ohne zu Root-Rechten zu eskalieren. Das hat dieser Art von Umgebung den Spitznamen a . eingebracht chroot Gefängnis. Der Begriff „Gefängnis“ sollte nicht verwechselt werden mit FreeBSDs jail Befehl, der a . erstellt chroot Umgebung das ist sicherer als das übliche chroot Umgebung.

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

Wann sollten Sie eine Chroot verwenden?

EIN chroot 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.


In gewisser Hinsicht, chroot 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 ist erforderlich” wird beantwortet, indem Sie sich ansehen, wie Sie Ihr . verwenden werden chroot 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. chroot 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 chroot eine Umgebung für die problematische Software.


Wiederherstellung und Dateisystem-Upgrades: Wenn eine Linux-Installation funktionsunfähig wird, können Sie chroot 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 ob es normal unter root / gemountet wäre. 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 chroot Umgebung begrenzt den Schaden, den ein externer Angreifer anrichten kann. Dies kann ein wertvoller Schritt zur Erhöhung der Sicherheit Ihres Systems sein.

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

Erstellen einer chroot-Umgebung

Wir benötigen ein Verzeichnis, das als Stammverzeichnis des chroot 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 Verzeichnis „testroot“ 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.

chr=/home/dave/testroot

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

mkdir -p $chr

Wir müssen Verzeichnisse erstellen, um die Teile des Betriebssystems zu speichern chroot Umgebung erfordern wird. Wir werden eine minimalistische Linux-Umgebung einrichten, die Bash als interaktive Shell verwendet. Wir werden auch die touch, rm, und ls Befehle. Dadurch können wir alle integrierten Befehle von Bash verwenden und touch, rm, und ls. Wir werden in der Lage sein, Dateien zu erstellen, aufzulisten und zu entfernen und Bash zu verwenden. Und – auf diese einfache Weise example-das ist alles.

Listen Sie die Verzeichnisse auf, die Sie innerhalb der . erstellen müssen {} Strebenerweiterung.

mkdir -p $chr/{bin,lib,lib64}

Jetzt ändern wir das Verzeichnis in unser neues Stammverzeichnis.

cd $chr

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

cp -v /bin/{bash,touch,ls,rm} $chr/bin

Die Dateien werden für uns einkopiert:


Diese Binärdateien haben Abhängigkeiten. Wir müssen herausfinden, was sie sind, und diese Dateien auch in unsere Umgebung kopieren, sonst bash, touch, rm, und ls 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 ldd Befehl wird Liste die Abhängigkeiten auf für uns.

ldd /bin/bash

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 listen die Abhängigkeiten erneut auf, und diesmal erstellen wir eine Liste. Dann durchlaufen wir die Liste und kopieren die Dateien.

Hier verwenden wir ldd um die Abhängigkeiten aufzulisten und die Ergebnisse über eine Pipe in . einzugeben egrep. Verwenden von egrep ist das gleiche wie verwenden grep mit dem -E (erweiterte reguläre Ausdrücke) Option. Die -o (nur übereinstimmende) Option beschränkt die Ausgabe auf die übereinstimmenden Teile von Zeilen. Wir suchen nach passenden Bibliotheksdateien, die auf eine Zahl enden [0-9].

list="$(ldd /bin/bash | egrep -o '/lib.*.[0-9]')"

Wir können den Inhalt der Liste überprüfen mit echo:

echo $list

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


Die -v (ausführliche) Option verursacht cp jede Kopie ankündigen, während sie sie ausführt. Die --parents Option stellt sicher, dass alle fehlenden übergeordneten Verzeichnisse im . erstellt werden chroot Umgebung.

for i in $list; do cp -v --parents "$i" "${chr}"; done

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 auf drücken Up Arrow drücken Sie einige Male und nehmen Sie dann die Bearbeitung vor. Der Schleifenkopierbefehl muss sich überhaupt nicht ändern.

Hier haben wir die . verwendet Up Arrow Taste, um den Befehl zu finden, und wir haben ihn so bearbeitet, dass er sagt: touch Anstatt von bash.

list="$(ldd /bin/touch | egrep -o '/lib.*.[0-9]')"

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

for i in $list; do cp -v --parents "$i" "${chr}"; done

Und unsere Dateien werden für uns kopiert:

Wir können jetzt die bearbeiten list Befehlszeile für ls:

list="$(ldd /bin/ls | egrep -o '/lib.*.[0-9]')"


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.

for i in $list; do cp -v --parents "$i" "${chr}"; done

Und die Abhängigkeiten für ls werden für uns kopiert:

Wir bearbeiten die list Befehlszeile zum letzten Mal, damit es funktioniert für rm:

list="$(ldd /bin/ls | egrep -o '/lib.*.[0-9]')"

Wir verwenden den Schleifenkopierbefehl ein letztes Mal:

for i in $list; do cp -v --parents "$i" "${chr}"; done

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

sudo chroot $chr /bin/bash

Unsere chroot Umgebung ist jetzt aktiv. Die Eingabeaufforderung des Terminalfensters hat sich geändert, und die interaktive Shell wird vom bash Schale in unserer Umgebung.

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

ls
ls /home/dave/Documents


Die ls 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 benutzen touch um eine Datei zu erstellen, ls um es aufzulisten, und rm es zu entfernen.

touch sample_file.txt
ls
rm sample_file.txt
ls

Natürlich können wir auch die integrierten Befehle der Bash-Shell verwenden. Wenn du tippst help In der Befehlszeile listet Bash sie für Sie auf.

help

Benutze exit, um die zu verlassen chroot Umgebung:

exit

Wenn Sie das entfernen möchten chroot Umgebung, können Sie es einfach löschen:

rm -r testroot/

Dadurch werden die Dateien und Verzeichnisse in der Datei rekursiv gelöscht chroot Umgebung.

Komfortabel automatisieren

Wenn du das denkst chroot Umgebungen können für Sie nützlich sein, aber sie sind etwas 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.

So erstellen Sie Aliase und Shell-Funktionen unter Linux

Linux-Befehle
DateienTeer · pv · Katze · tac · chmod · grep · unterschied · sed · Mit · Mann · geschoben · popd · fsck · Testdisk · seq · fd · pandoc · CD · $PFAD · awk · beitreten · jq · falten · einzigartig · journalctl · Schwanz · stat · ls · fstab · Echo · weniger · chgrp · chown · Rev · aussehen · 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
Prozessealias · Bildschirm · oben · nett · renice · Fortschritt · strace · System · tmux · chsh · Geschichte · bei · Charge · kostenlos · welcher · dmesg · chfn · Benutzermod · ps · chroot · xargs · tty · kleiner Finger · lsof · vmstat · Auszeit · Mauer · Jawohl · töten · Schlaf · sudo · es ist · Zeit · groupadd · Benutzermod · Gruppen · lshw · abschalten · neustarten · Halt · ausschalten · passwd · lscpu · crontab · Datum · bg · fg
Vernetzungnetstat · Klingeln · Traceroute · ip · ss · Wer ist · fail2ban · bmon · Sie · Finger · nmap · ftp · curl · wget · Wer · Wer bin ich · w · iptables · ssh-keygen · ufw

Beste Linux-Laptops für Entwickler und Enthusiasten

Related Posts