Chroot: Unterschied zwischen den Versionen
Dirk (Diskussion | Beiträge) Änderung 14043 von 87.176.103.132 (Diskussion) rückgängig gemacht. /dev/pts ist IMMER NOCH für das chrooten unnötig. |
Dirk (Diskussion | Beiträge) K Verschiebung community -> extra |
||
(5 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{SEITENTITEL:chroot}} | {{SEITENTITEL:chroot}} | ||
Das Programm ''chroot'' ermöglicht es, das Wurzelverzeichnis eines Programms zu bestimmen. Standardmäßig ist | Das Programm ''chroot'' ermöglicht es, das Wurzelverzeichnis eines Programms zu bestimmen. Standardmäßig ist {{ic|/}} 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 | Ein geändertes Wurzelverzeichnis (''Chroot'') wird unter Linux gemeinhin nicht als Sicherheitsfunktion angesehen, zumal in der Dokumentation von {{ic|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 == | == 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. | 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 | Was man verwendet, ist nicht wichtig, da {{ic|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. | ||
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 {{ic|chroot}}. | |||
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 | |||
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. | 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 | Nun kann man sich mittels {{ic|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 [[mounten|gemountet]] werden, auf dem sich das Wurzelverzeichnis ({{ic|/}}) des installierten Systems befindet. | ||
mkdir /mnt/root | mkdir /mnt/root | ||
mount /dev/sda1 /mnt/root | mount /dev/sda1 /mnt/root | ||
Hier wird | Hier wird {{ic|/dev/sda1}} als {{ic|/mnt/root}} gemountet. {{ic|/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 {{ic|/bin}} in einem eigenem Dateisystem, so muss man dieses entsprechend mounten. | ||
mount /dev/sda2 /mnt/root/bin/ | mount /dev/sda2 /mnt/root/bin/ | ||
Hier wird | Hier wird {{ic|/dev/sda2}} als {{ic|/mnt/root/bin}} gemountet. {{ic|/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 | Nachdem das System soweit gemountet wurde, müssen noch die temporären Dateisysteme {{ic|proc}} und {{ic|sysfs}} sowie {{ic|/dev}} gemountet werden, damit das System, in das gewechselt wird, vollständig ist. | ||
mount -t proc proc /mnt/root/proc/ | mount -t proc proc /mnt/root/proc/ | ||
Zeile 32: | Zeile 30: | ||
mount -o bind /dev /mnt/root/dev/ | 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 | 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 {{ic|cp /etc/resolv.conf /mnt/root/etc/}} die [[resolv.conf]] des Live-Systems kopieren. | ||
== Chrooten == | == Chrooten == | ||
Zeile 39: | Zeile 37: | ||
chroot /mnt/root/ /bin/bash | chroot /mnt/root/ /bin/bash | ||
Der erste Parameter für | Der erste Parameter für {{ic|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 | 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 {{ic|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 | Sollte man in der globalen Konfigurationsdatei der [[bash]] Dinge stehen haben, die man verwenden will, sollte man diese mittels {{ic|source /etc/profile}} laden. Auch sollte man sich zur besseren Unterscheidbarkeit mittels {{ic|1=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. | Es können nun alle nötigen Arbeiten am System vorgenommen werden, um das System wieder lauffähig zu bekommen. | ||
Zeile 54: | Zeile 52: | ||
umount /mnt/root/sys/ | umount /mnt/root/sys/ | ||
umount /mnt/root/dev/ | umount /mnt/root/dev/ | ||
umount … | umount … | ||
cd | cd | ||
umount /mnt/root/ | 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 | 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 {{ic|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 | Wenn alle Dateisysteme des installierten Systems mittels {{ic|umount}} erfolgreich ausgehangen wurden, kann der Computer heruntergefahren oder neu gestartet werden. | ||
== Weblinks == | == Weblinks == | ||
* [http://www.archlinux.org/packages/?q=schroot schroot] {{sprache|en}} – | * [http://www.archlinux.org/packages/?q=schroot schroot] {{sprache|en}} – {{ic|chroot}} ohne root-Rechte haben zu müssen (in ''[extra]'') | ||
* [http://linuxwiki.de/chroot chroot im LinuxWiki] {{sprache|de}} | * [http://linuxwiki.de/chroot chroot im LinuxWiki] {{sprache|de}} | ||
* [http://hp.kairaven.de/scpsftp/ssh-rssh-sftp.html SSH (scp) im Chroot] {{sprache|de}} | * [http://hp.kairaven.de/scpsftp/ssh-rssh-sftp.html SSH (scp) im Chroot] {{sprache|de}} | ||
Zeile 71: | Zeile 68: | ||
[[Kategorie:Systemverwaltung]] | [[Kategorie:Systemverwaltung]] | ||
[[Kategorie:Konsole]] | [[Kategorie:Konsole]] | ||
[[en: | [[Kategorie:Befehle]] | ||
[[en:Chroot]] |
Aktuelle Version vom 24. Mai 2023, 18:32 Uhr
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.
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 … 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 [extra]) - chroot im LinuxWiki
- SSH (scp) im Chroot