chroot
Das Programm chroot ermöglicht es, das Wurzelverzeichnis eines Programms zu bestimmen. Standardmäßig ist /
das Wurzelverzeichnis, von dem aus alle weiteren Verzeichnisse referenziert werden können. Das Ändern des Wurzelverzeichnisses (chrooten) ist zum Beispiel nötig, wenn man ein verlorenes root-Passwort wiederherstellen muss, oder wenn man einen Prozess getrennt von anderen Prozessen laufen lassen will.
Ein geändertes Wurzelverzeichnis (Chroot) wird unter Linux gemeinhin nicht als Sicherheitsfunktion angesehen, zumal in der Dokumentation von chroot
das „Ausbrechen“ aus einem Chroot beschrieben wird. Dieser Wiki-Artikel beschäftigt sich daher mit dem Einrichten und Auflösen eines Chroot zu Wartungszwecken.
Einrichten
Das Einrichten eines Chroot bedarf lediglich eines lauffähigen Systems, auf dem man root-Rechte erlangen kann. Dies kann zum Beispiel eine andere Installation oder eine Live-CD sein.
Was man verwendet, ist nicht wichtig, da chroot
zum Standard-Funktionsumfang von GNU/Linux gehört. Man muss lediglich darauf achten, dass man ein System verwendet, das auf die selbe Architektur ausgelegt ist, auf die auch die installierte Distribution ausgelegt ist.
Wenn man zum Beispiel eine x86_64-Distribution installiert hat, sollte man keine i686-Live-CD verwenden, sondern zu einer x86_64-Live-CD greifen.
Man sollte auch darauf achten, dass der verwendete Kernel der Live-CD aktuell ist. Ansonsten kommt es zu folgender Fehlermeldung: 'FATAL: kernel too old' beim Aufruf von chroot
.
Selbstverständlich sollte man nach dem Booten der Live-CD root-Rechte haben, oder diese durch entsprechende Befehle (siehe Dokumentation der jeweiligen Live-CD) erlangen. Sollte man spezielle Kernelmodule verwenden wollen/müssen, sollte man diese vor dem Chrooten laden. Auch kann man seine swap-Partition aktivieren.
Nun kann man sich mittels fdisk -l
anzeigen lassen, welche Partitionen vom System der Live-CD erkannt wurden. Da das Chroot einen Wechsel in das installierte System ermöglichen soll, muss das Dateisystem gemountet werden, auf dem sich das Wurzelverzeichnis (/
) des installierten Systems befindet.
mkdir /mnt/root mount /dev/sda1 /mnt/root
Hier wird /dev/sda1
als /mnt/root
gemountet. /dev/sda1
ist dabei natürlich an die tatsächlich vorhandene Situation anzupassen. Sollte man sein System weiter unterteilt haben, sollte man die entsprechenden Dateisysteme ebenfalls mounten. Hat man zum Beispiel /bin
in einem eigenem Dateisystem, so muss man dieses entsprechend mounten.
mount /dev/sda2 /mnt/root/bin/
Hier wird /dev/sda2
als /mnt/root/bin
gemountet. /dev/sda2
ist dabei natürlich an die tatsächlich vorhandene Situation anzupassen. So verfährt man mit allen weiteren, für den Systemstart nötigen Dateisystemen.
Nachdem das System soweit gemountet wurde, müssen noch die temporären Dateisysteme proc
und sysfs
sowie /dev
gemountet werden, damit das System, in das gewechselt wird, vollständig ist.
mount -t proc proc /mnt/root/proc/ mount -t sysfs sys /mnt/root/sys/ mount -o bind /dev /mnt/root/dev/
Sofern man innerhalb der Live-CD das Netzwerk eingerichtet hat, und man dieses auch im Chroot verwenden will, und man nicht weiß, ob das installierte System über eine funktionierende Netzwerkkonfiguration bezüglich der Namensauflösung verfügt, kann man mittels cp /etc/resolv.conf /mnt/root/etc/
die resolv.conf des Live-Systems kopieren.
Chrooten
Nachdem nun alle Dateisysteme des Systems, und alle temporären Dateisysteme gemountet wurden, und man sich um die Netzwerkverbindung gekümmert hat, kann man nun in das installierte System wechseln.
chroot /mnt/root/ /bin/bash
Der erste Parameter für chroot
bestimmt das neue Wurzelverzeichnis des Prozesses der Zweite Parameter bestimmt den Befehl, der in dem System, in das gewechselt wird, ausgeführt werden soll, (im Falle der Live-CD wird das eine Shell sein).
Man befindet sich jetzt in dem installierten System. Alle Befehle, die man nun ausführt, werden nicht mehr in der Umgebung der Live-CD ausgeführt, sondern durch das installierte System. Ein cd /
wechselt zum Beispiel nicht in das Wurzelverzeichnis des Systems der Live-CD, sondern in das Wurzelverzeichnis des installierten Systems.
Sollte man in der globalen Konfigurationsdatei der bash Dinge stehen haben, die man verwenden will, sollte man diese mittels source /etc/profile
laden. Auch sollte man sich zur besseren Unterscheidbarkeit mittels export PS1="(chroot) $PS1"
das Promt im Chroot anpassen.
Es können nun alle nötigen Arbeiten am System vorgenommen werden, um das System wieder lauffähig zu bekommen.
Chroot verlassen
Wenn man mit den Arbeiten am installierten System fertig ist, sollte man es wieder „sauber“ verlassen.
exit umount /mnt/root/proc/ umount /mnt/root/sys/ umount /mnt/root/dev/ umount /mnt/root/bin/ umount … cd umount /mnt/root/
Sollte man beim unmounten der Dateisysteme eine Fehlermeldung darüber bekommen, dass das jeweilige Dateisystem noch beschäftigt sei, liegt es daran, dass im Chroot noch ein Prozess auf eines der Dateisysteme zugreift. Man sollte dann mittels chroot /mnt/root/ /bin/bash
nochmals in das System hineingehen, und prüfen, ob wirklich alle Prozesse beendet wurden.
Wenn alle Dateisysteme des installierten Systems mittels umount
erfolgreich ausgehangen wurden, kann der Computer heruntergefahren oder neu gestartet werden.
Weblinks
- schroot –
chroot
ohne root-Rechte haben zu müssen (in [community]) - chroot im LinuxWiki
- SSH (scp) im Chroot