La commande chroot sur Linux pour chrooter le système

malekalmorte

Création :

22 octobre 2023

Modification :

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.

La commande chroot sur Linux pour chrooter le système

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.

Le principe d'un environnement chroot dans Linux (Prison)

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/
Créer un environnement chroot (prison) avec debootstrap

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.

Comment basculer sur l'environnement chrooté

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

A propros de malekalmorte

malekal-site-logo-150

Passionné par l'informatique depuis très jeune, j'aide les internautes sur les forums depuis 2005 pour résoudre leurs tracas informatiques.
Je vous propose par la même occasion ce site avec de nombreux tutoriels pour vous aider aussi à résoudre de manière autonome les problèmes informatiques du quotidien.