Chroot

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Isolation de systèmes de fichiers
Commande chroot
Contexte Change la racine apparente du système de fichiers pour un processus — durcissement de services réseau, dépannage en mode rescue
Voir aussi Namespaces (isolation plus complète, base des containers)

chroot change la racine apparente du système de fichiers pour un processus et ses enfants : tous les chemins absolus qu'il manipule sont recalculés à partir du nouveau répertoire racine, et tout ce qui est en dehors devient invisible. C'est utilisé pour confiner une application qui communique sur le réseau (serveur DNS, applicatif exposé…) : si elle est compromise, l'attaquant se retrouve enfermé dans le périmètre du chroot plutôt que sur le système complet.

Utilisation de base

chroot /var/APPDIR       # bascule dans /var/APPDIR, qui devient la racine "/"
chroot /var/named/       # exemple typique : confiner un serveur DNS (BIND)

Une fois dans le chroot, plus aucun fichier extérieur au répertoire n'est accessible : binaires, bibliothèques partagées, fichiers de configuration, résolveur DNS (/etc/resolv.conf)… tout ce dont l'application a besoin doit être dupliqué à l'intérieur du périmètre du chroot.

Mode rescue

Chrooter le disque d'un système qui ne démarre plus (depuis un live CD/USB de secours) permet de retrouver un environnement complet — shell, gestionnaire de paquets, bootloader — pour diagnostiquer et réparer, comme si on avait démarré sur ce disque.

mount /dev/sda1 /mnt          # monter la partition racine du système à réparer
mount --bind /dev /mnt/dev    # rendre visibles les périphériques
mount --bind /proc /mnt/proc  # et les pseudo-systèmes de fichiers noyau
mount --bind /sys /mnt/sys
chroot /mnt                   # bascule dans l'environnement du système à réparer

Limites de sécurité

⚠️ chroot n'est pas un mécanisme d'isolation de sécurité au sens des containers modernes : il ne fait que changer la racine visible du système de fichiers, sans toucher aux processus, au réseau ou aux identités utilisateur. Un processus root à l'intérieur d'un chroot (ou disposant de la capability CAP_SYS_CHROOT) peut s'en évader par des techniques connues (chroot breakout), et rien n'empêche de voir ou signaler les processus hors du chroot puisque les espaces de noms PID/réseau/montages restent partagés avec le système hôte.

Les containers (Docker, LXC…) combinent un changement de racine du même esprit avec de véritables espaces de noms (PID, réseau, montages, utilisateurs) et des cgroups pour limiter les ressources — voir Namespaces. chroot reste un outil utile de cloisonnement basique ou de dépannage, mais ne doit pas être considéré comme une frontière de sécurité fiable face à un attaquant déterminé disposant des privilèges root.

Voir aussi

  • Namespaces — isolation plus complète (PID, réseau, montages, utilisateurs), notion complémentaire au chroot et base du fonctionnement des containers