chroot sous Linux : Explications et exemples
Table des matières
Le concept de chroot, qui signifie "change root", est une fonctionnalité dans les systèmes d'exploitation de type Unix, dont Linux. Il permet à un processus de changer son répertoire racine, créant ainsi un environnement isolé et restreint pour son exécution.
On va voir l'utilisation de chroot, son fonctionnement et quelques exemples pratiques pour illustrer son utilité.
Chroot peut être utilisé dans plusieurs cas :
En tant que bascule d'environnement pour prendre le contrôle d'une installation Linux depuis un autre système. Cela peut se faire depuis le média d"installation d'une distribution linux (live USB), ou depuis un autre système installé en double démarrage.
En tant que prison pour empêcher un utilisateur de remonter dans l'arborescence pour l'emprisonner dans un répertoire spécifique. Cela peut être utilisé avec un serveur FTP pour que les utilisateurs ne remontent pas dans l'arborescence du système.
En tant qu'environnement de développement isolé afin que les développeurs puissent développer avec différentes versions de bibliothèques sans affecter le système global. Ils pourront installer des dépendances spécifiques à un projet sans altérer le système principal.
La commande chroot modifie le répertoire racine pour le processus en cours d'exécution et de ses descendants.
En gros, les processus lancés dedans et ses enfants perçoivent un nouvel environnement racine, isolé du reste du système. Le chemin du nouveau répertoire racine est spécifié en argument de la commande chroot.
La commande chroot s'utilise ainsi :
Le prérequis est de démarrer sur un autre système Linux :
- Le média de la même distribution dans le cas d'une réparation
- Depuis un autre système Linux installé en dualboot, c'est aussi possible
On va créer un point de montage dans /mnt/linux par exemple, mais on peut tout à fait créer un point de montage où on veut.
On identifiera avec la commande suivante les partitions et leur taille :
Ici : sda1 est ma racine à 35Go, sda2 est le /home et sda3 est le swap.
Pour plus de détails (systèmes de fichiers, labels, UUID, ...) on peut utiliser :
Ensuite, on va monter la racine du système concerné dans la future arborescence :
Ensuite, montez si vous en avez l'utilité d'autres partitions (/boot ou /home etc ... )
Exemple avec /home en /dev/sda2
Ensuite, il ne faut pas oublier de monter les dossiers spéciaux nécessaires au fonctionnement du système dans le cas d'une réparation de celui-ci :
Enfin, basculer vers le nouveau système avec la commande chroot vue précédemment. On va appeler un shell bash dans ce cas :
Le prompt change alors et vous pouvez maintenant effectuer des opérations comme si vous étiez dans votre système installé directement.
Par exemple : réparer le chargeur d'amorçage, mettre à jour le système, ou réinitialiser des mots de passe.
Pour sortir de l'environnement du chroot, il suffit sumplement de quitter le système chrooté avec la commande
Puis une fois revenu sur le système live, démonter tous les systèmes de fichiers précédemment montés :
Commencer par les dossiers spéciaux :
Puis par les partitions additionnelles :
Et enfin la racine :
Et voilà !
Quand on redémarrera sur le système que l'on a précédemment chrooté, on verra l'impact des modifications réalisées pendant le chroot.
Introduction
man chroot :
chroot - exécuter une commande ou un shell interactif avec un répertoire racine spécial
Le concept de chroot, qui signifie "change root", est une fonctionnalité dans les systèmes d'exploitation de type Unix, dont Linux. Il permet à un processus de changer son répertoire racine, créant ainsi un environnement isolé et restreint pour son exécution.
On va voir l'utilisation de chroot, son fonctionnement et quelques exemples pratiques pour illustrer son utilité.
Cas d'utilisation
Chroot peut être utilisé dans plusieurs cas :
En tant que bascule d'environnement pour prendre le contrôle d'une installation Linux depuis un autre système. Cela peut se faire depuis le média d"installation d'une distribution linux (live USB), ou depuis un autre système installé en double démarrage.
En tant que prison pour empêcher un utilisateur de remonter dans l'arborescence pour l'emprisonner dans un répertoire spécifique. Cela peut être utilisé avec un serveur FTP pour que les utilisateurs ne remontent pas dans l'arborescence du système.
En tant qu'environnement de développement isolé afin que les développeurs puissent développer avec différentes versions de bibliothèques sans affecter le système global. Ils pourront installer des dépendances spécifiques à un projet sans altérer le système principal.
Fonctionnement de chroot
La commande chroot modifie le répertoire racine pour le processus en cours d'exécution et de ses descendants.
En gros, les processus lancés dedans et ses enfants perçoivent un nouvel environnement racine, isolé du reste du système. Le chemin du nouveau répertoire racine est spécifié en argument de la commande chroot.
La commande chroot s'utilise ainsi :
Code BASH :
chroot /nouvelle/racine /usb/bin/commande_a_lancer
Exemples
chroot d'un système Linux complet
Le prérequis est de démarrer sur un autre système Linux :
- Le média de la même distribution dans le cas d'une réparation
- Depuis un autre système Linux installé en dualboot, c'est aussi possible
On va créer un point de montage dans /mnt/linux par exemple, mais on peut tout à fait créer un point de montage où on veut.
On identifiera avec la commande suivante les partitions et leur taille :
Code BASH :
lsblk
Code BASH :
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 90G 0 disk ├─sda1 8:1 0 35G 0 part ├─sda2 8:2 0 53G 0 part └─sda3 8:3 0 2G 0 part
Ici : sda1 est ma racine à 35Go, sda2 est le /home et sda3 est le swap.
Pour plus de détails (systèmes de fichiers, labels, UUID, ...) on peut utiliser :
Code BASH :
lsblk -f
Ensuite, on va monter la racine du système concerné dans la future arborescence :
Code BASH :
mount /dev/sda1 /mnt/linux
Ensuite, montez si vous en avez l'utilité d'autres partitions (/boot ou /home etc ... )
Exemple avec /home en /dev/sda2
Code BASH :
mount /dev/sda2 /mnt/linux/home
Ensuite, il ne faut pas oublier de monter les dossiers spéciaux nécessaires au fonctionnement du système dans le cas d'une réparation de celui-ci :
Code BASH :
mount --bind /dev /mnt/linux/dev mount -t proc /proc /mnt/linux/proc mount -t sysfs /sys /mnt/linux/sys
Enfin, basculer vers le nouveau système avec la commande chroot vue précédemment. On va appeler un shell bash dans ce cas :
Code BASH :
chroot /mnt /bin/bash
Le prompt change alors et vous pouvez maintenant effectuer des opérations comme si vous étiez dans votre système installé directement.
Par exemple : réparer le chargeur d'amorçage, mettre à jour le système, ou réinitialiser des mots de passe.
Quitter le chroot
Pour sortir de l'environnement du chroot, il suffit sumplement de quitter le système chrooté avec la commande
Code BASH :
exit
Puis une fois revenu sur le système live, démonter tous les systèmes de fichiers précédemment montés :
Commencer par les dossiers spéciaux :
Code BASH :
umount /mnt/linux/dev umount /mnt/linux/proc umount /mnt/linux/sys
Puis par les partitions additionnelles :
Code BASH :
umount /mnt/linux/home
Et enfin la racine :
Code BASH :
umount /mnt/linux
Et voilà !
Quand on redémarrera sur le système que l'on a précédemment chrooté, on verra l'impact des modifications réalisées pendant le chroot.