La commande chroot est une commande de base Linux qui permet de « chrooter le système« .
C’est à dire exécuter une commande ou un shell interactif avec un répertoire racine spécial.
Cela a plusieurs application.
Dans ce tutoriel, je vous apprends à utiliser la commande chroot pour créer une prison ou changer l’environnement du système.
Table des matières
Qu’est-ce que la commande chroot sur Linux et quelle est son utilité ?
La commande chroot du système Linux/Unix est utilisée pour modifier le répertoire racine.
Cela a deux principales utilisations.
Créer une prison : Vous pouvez facilement créer un système de fichiers isolé à l’intérieur de votre système de fichiers principal. Chroot est particulièrement utile pour séparer votre environnement de travail de votre environnement domestique ou pour créer un environnement de test afin de tester un logiciel de manière isolée.
La commande ou programme ne peut pas accéder aux fichiers situés en dehors du répertoire racine. Cet environnement modifié est connu sous le nom de « chroot jail » ou « jailed directory« .
Seuls l’utilisateur root et les processus privilégiés sont autorisés à utiliser la commande chroot.
Toutefois de nos jours, il existe des systèmes de containers tels que Docker.
Changer l’environnement système : Vous pouvez changer de système lorsque vous êtes dans un environnement embarqué.
Par exemple, vous démarrez sur un mode rescue (Live USB ou réseau). Vous pouvez alors basculer sur votre système afin d’opérer des réparations ou récupération lorsque l’installation est endommagée.
Cela peut être utile pour corriger les problèmes de démarrage Linux avec le bootloader Grub.
Utilisation basique de la commande chroot
Voici la syntaxe de la commande chroot.
A savoir donc, on indique le chemin de l’environnement chroot et le chemin de l’arborescence du serveur.
chroot <options> <chemin du nouveau chroot> <chemin du serveur>
Voici un exemple d’utilisation de la commande chroot dans un environnement de récupération.
Cela permet de changer le système qui se trouve monté dans /mnt/sda2.
sudo chroot /mnt/sda2 /bin/bash
Comment créer un environnement chroot (prison)
Voici trois méthodes pour créer un environnement chroot.
Préparer l’environnement chrooté (manuellement)
Voici comment créer un environnement chroot de type prison.
La principale difficulté est que vous devez recréer une arborescence système.
Cela inclut les librairies nécessaires aux fonctionnement de certains binaires (dépendances).
Tout d’abord, créez le répertoire qui va héberger l’arborescence de la prison.
sudo mkdir /jail
sudo mkdir /jail/bin
Puis copiez le ou les binaires que vous souhaitez rendre accessible dans la prison.
L’idée, pour une environnement sûr est de limiter au maximum les binaires disponibles afin, que si un attaquant accède frauduleusement à ce dernier, il soit très limité.
Par exemple, on peut éviter de rendre disponible les commandes mount, pwd, etc.
sudo cp -a /bin/bash /jail/bin/bash
Ensuite, vous devez copier les librairies suivantes.
sudo mkdir /jail/lib/
sudo mkdir /jail/lib/x86_64-linux-gnu/
sudo mkdir /jail/lib64/
sudo cp /lib/x86_64-linux-gnu/libtinfo.so.* /jail/lib/x86_64-linux-gnu/
sudo cp /lib/x86_64-linux-gnu/libdl.so.* /jail/lib/x86_64-linux-gnu/
sudo cp /lib/x86_64-linux-gnu/libc.so.* /jail/lib/x86_64-linux-gnu/
sudo cp /lib64/ld-linux-x86-64.so.* /jail/lib64/
Comme vous pouvez le constater, cela devient vite compliquer, car il faut identifier les librairies nécessaires au fonctionnement du binaire.
Pour cela, vous pouvez utiliser la commande ldd :
ldd /bin/binaire
Préparer l’environnement chrooté (avec mount)
Une autre façon de procéder est de tout simplement monter le répertoire dans l’environnement chroot.
Pour cela, vous pouvez utiliser la commande mount –bind, comme ceci :
sudo mount --bind /bin /jail/bin
sudo mount --bind /lib /jail/lib
sudo mount --bind /lib64 /jail/lib64
Ici comme nous montons /bin, nous rendons accessibles la totalité des binaires systèmes de Linux.
Cela n’est donc pas forcément intéressant d’un point de vue sécurité.
Mais vous pouvez ne monter que les répertoires de librairies par exemple.
Préparer l’environnement chrooté (avec debootstrap)
Debootstrap est un outil qui peut être utilisé pour installer un système Linux minimal dans un répertoire.
Vous pouvez l’utiliser pour créer un environnement chroot à partir d’une image d’une distribution Linux.
Pour installer debootstrap sur Debian ou Ubuntu :
sudo apt-get install debootstrap
Par exemple pour créer un environnement chroot d’une image Ubuntu 64-bits dans /jail/ubuntu :
sudo debootstrap --arch amd64 jammy /jail/ubuntu http://fr.archive.ubuntu.com/ubuntu/
Our encore avec Debian 64-bits :
debootstrap --arch amd64 bullseye /jail/debian http://ftp.fr.debian.org/debian/
Comment basculer sur l’environnement chrooté
Pour basculer sur l’environnement chrooté, utilisez la commande suivante :
sudo chroot /jail/ /bin/bash
On voit alors que le prompt change, car ce dernier n’est pas défini.
De plus, la commande ls fonctionnement correctement. Mais la commande mkdir n’est pas disponible car elle n’a pas été basculée dans la prison.
Pour sortir de l’environnement chrooté, utilisez simplement la commande suivante :
exit
Comment chrooter son système en mode rescue (récupération)
Comme évoqué en introduction, vous pouvez aussi utiliser chroot depuis un environnement de récupération pour basculer sur votre système.
Ce dernier se comportera alors comme si vous étiez réellement connecter dessus.
A partir de là, vous pouvez utiliser les commandes grub pour réparer le démarrage ou encore modifier la configuration du système. Par exemple, une mauvaise configuration du pare-feu rend votre serveur dédié inaccessible en SSH.
Il suffit alors de modifier la configuration du pare-feu comme si vous étiez réellement sur le système.
Imagions que le disque système est /dev/sda2.
- Vous pouvez monter la partition système dans /mnt/sys de cette manière :
sudo mount -t ext4 /dev/sda2 /mnt/sys
- Puis on créé l’arborescence virtuelle :
sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
- Enfin on bascule sur l’environnement système grâce à chroot :
sudo chroot /mnt
- Une fois les opérations terminés, quittez l’environnement chroot :
exit
- Eventuellement démontez les partitions systèmes :
sudo umount /mnt/sys
sudo umount /mnt/proc
sudo umount /mnt/dev/pts
sudo umount /mnt/dev
sudo umount /mnt/sys
- Puis redémarrez l’appareil pour sortir du mode rescue
Liens
- La commande chroot sur Linux pour chrooter le système
- schroot : Gérer plus efficacement les environnement chroot
- Les commandes réseau utiles de Linux
- Le bash Linux : tout savoir
- Réparer Debian en mode rescue et récupération
- Comment réparer et réinstaller Ubuntu avec le mode rescue
- Réinitialiser le mot de passe root perdu ou oublié Ubuntu
- Réinitialiser le mot de passe root perdu ou oublié avec un Live USB de secours
- Comment réinitialiser le mot de passe root depuis GRUB
- 5 façons de démarrer Linux en mode récupération et dépannage (rescue)