Niveau :      
Résumé : chroot /mnt

Connaissez-vous chroot ?

Présentation

Il permet de changer le répertoire / pour les processus lancés par lui. Exemple :

$ ls -a /root
> . .. README myroot.iso
$ ls -a /mnt/root
> . .. test.jpg bin
$ chroot /mnt
$ ls -a /root
> . .. test.jpg bin

Toutes les commandes passées après le chroot utilisent le contenu de /mnt comme /. Cela implique le besoin d'une arborescence minimale dans ce sous répertoire avec un shell disponible (ou toute autre commande passée en paramètre à chroot). D'autre part, il faut être root pour lancer chroot.

Historique

Chroot a été motivé par des besoins de sécurité. Imaginons une arborescence minimale pour faire tourner un service potentiellement troué (n'importe lequel, prenons bind pour le dns). Elle contiendra les bibliothèques pour ce service, sa configuration (ou pas si le chroot se fait après le lancement du service) et c'est tout. Toute personne exploitant une faille sur le service se retrouvera sur une machine au contenu très limité et donc n'impactera pas les autres services de la machine. C'est l'ancêtre des machines virtuelles (mais inventé après).

Notons tout de même que d'une part chroot est connu pour avoir eu lui aussi quelques failles et que d'autre part la commande jail sur les bsd fait beaucoup mieux.

Autre utilisation

Une autre fonctionnalité bien pratique du chroot est qu'il peut permettre de réparer une distribution cassée. Le principe est simple, on boote sur une distribution saine (par exemple un livecd comme ubuntu). Une fois celle-ci lancée on monte la distribution cassée dans un répertoire et on utilise chroot dès que cela devient utile.

Exemple, le paquet mount de ma distribution est cassé et ça l'empêche de booter proprement, je ne peux donc pas la réparer telle quelle. Donc j'utilise un livecd, puis :

# On monte la partition utile (et éventuellement les sous partitions comme /var)
$ mount /dev/hda1 /mnt

# On monte /proc , indispensable pour certaines commandes comme ps
$ mount -t proc proc /mnt/proc

# On réutilise le /dev du linux en cours, utile pour d'autres commandes comme lilo
$ mount --bind /dev /mnt/dev 

# On peut faire pareil pour des commandes qui auraient besoin de /sys

# C'est parti !
$ chroot /mnt

# On répare ...
$ apt-get update
$ apt-get install --reinstall mount