chroot

chroot` ist ein GNU Utility und daher auf den meisten GNU + Linux Distributionen bereits vorinstalliert.

chroot ist ein Programm, mit dem man seinen Linux-Root von einem bereits laufenden System in einer Session (einem Terminal oder TTY) auf ein anderes lokales Dateisystem/Ordner verschieben kann. Man hat dann ein Terminalinterface, als ob man von dem Ordner gebootet hätte, in den man den root verschoben hat (-> change root).

Warum?

Das kann aus verschiedenen Gründen nützlich sein. Da man nur auf die Dateien zugreift und sich nicht über eine echte Sitzung auf dem Zielsystem anmeldet, umgeht man einfach Sperren, wie z.B. den Schutz eines Benutzers durch ein Passwort. Da man auf dem Zielsystem root-Rechte hat (man ändert ja nur die Dateien vom Hostsystem aus, auf dem man auch root-Rechte hat), kann man z.B. vergessene Passwörter zurücksetzen, ohne alles neu installieren zu müssen. Eine andere Anwendung wäre das “Retten” einer Installation. Wenn z.B. ein Update den Neustart verhindert, kann man chrooten und einfach über den Paketmanager des Zielsystems das Paket zurückrollen. Gleiches gilt für andere Änderungen am System, die das Booten verhindern. Aber auch technischere Anwendungen erfordern chroot. Wenn man LFS (Linux from Scratch) bauen will, muss man auch als root in das Projekt wechseln, um die Binaries zu kompilieren. Außerdem ist es eine einfachere Alternative zu virtuellen Maschinen.

Wie?

Bevor man eine Partition oder etwas anderes als root anlegen kann, muss man es auf dem Hostsystem mounten. Wenn dann das Zielverzeichnis eine gültige Struktur hat (z.B. eine ausführbare Shell im richtigen Pfad), kann man einfach mit chroot seinen root ändern.

um ein System zu “retten”.

Um eine bestehende Installation wie oben beschrieben zu bearbeiten, ohne sie zu booten, benötigt man einen Linux-Bootable USB-Stick. Das ist auch das Medium, mit dem man Linux installiert hat. Die Distribution spielt hier keine Rolle, es muss nur gebootet und das chroot-Paket installiert werden.

Dann kann man in der Live-Umgebung (nicht die Installation ausführen!) ein Terminal öffnen, die Partition/Disk mounten und dann chrooten.

Verschlüsselte Partition

lsblk
# find the target partition 
sudo cryptsetup open target-partition hostnameOfDevice 
sudo mount /dev/mapper/hostnameOfDevice /mnt
sudo chroot /mnt

52posts

Dieser Beitrag ist Teil meines Plans, in 2023 jede Woche einen Post zu erstellen, mit Dingen, die ich gelernt habe. (Das sind dann 52 Posts).

#52posts