Chroot: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
(→‎Chroot verlassen: gibt es oben auch nicht)
(6 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 <code>/</code> 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.
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 <code>chroot</code> das „Ausbrechen“ aus einem Chroot beschrieben wird. Dieser Wiki-Artikel beschäftigt sich daher mit dem Einrichten und Auflösen eines Chroot zu Wartungszwecken.
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 <code>chroot</code> 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.
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.


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.
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 <code>chroot</code>.
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}}.


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 <code>fdisk -l</code> 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 (<code>/</code>) des installierten Systems befindet.
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 <code>/dev/sda1</code> als <code>/mnt/root</code> gemountet. <code>/dev/sda1</code> 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 <code>/bin</code> in einem eigenem Dateisystem, so muss man dieses entsprechend mounten.
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 <code>/dev/sda2</code> als <code>/mnt/root/bin</code> gemountet. <code>/dev/sda2</code> 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.
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 <code>proc</code> und <code>sysfs</code> sowie <code>/dev</code> gemountet werden, damit das System, in das gewechselt wird, vollständig ist.
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 32:
  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 <code>cp /etc/resolv.conf /mnt/root/etc/</code> die [[resolv.conf]] des Live-Systems kopieren.
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 39:
  chroot /mnt/root/ /bin/bash
  chroot /mnt/root/ /bin/bash


Der erste Parameter für <code>chroot</code> bestimmt das neue Wurzelverzeichnis des Prozesses (im Falle der Live-CD wird das eine Shell sein), der Zweite Parameter bestimmt den Befehl, der in dem System, in das gewechselt wird, ausgeführt werden soll.
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 <code>cd /</code> wechselt zum Beispiel nicht in das Wurzelverzeichnis des Systems der Live-CD, sondern in das Wurzelverzeichnis des installierten Systems.
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 <code>source /etc/profile</code> laden. Auch sollte man sich zur besseren Unterscheidbarkeit mittels <code>export PS1="(chroot) $PS1"</code> das Promt im Chroot anpassen.
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 54:
  umount /mnt/root/sys/
  umount /mnt/root/sys/
  umount /mnt/root/dev/
  umount /mnt/root/dev/
umount /mnt/root/bin/
  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 <code>chroot /mnt/root/ /bin/bash</code> nochmals in das System hineingehen, und prüfen, ob wirklich alle Prozesse beendet wurden.
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 <code>umount</code> erfolgreich ausgehangen wurden, kann der Computer heruntergefahren oder neu gestartet werden.
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}} – <code>chroot</code> ohne root-Rechte haben zu müssen (in ''[community]'')
* [http://www.archlinux.org/packages/?q=schroot schroot] {{sprache|en}} – {{ic|chroot}} ohne root-Rechte haben zu müssen (in ''[community]'')
* [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}}

Version vom 3. Juni 2013, 15:40 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.

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 …
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