Guide chroot sur Ubuntu : isolation et dépannage système

Introduction aux mécanismes de chroot

Dans les environnements Linux, la commande chroot permet de redéfinir la racine (/) perçue par un processus donné. Cette technique fondamentale offre un moyen simple de cloisonner des exécutions ou d’intervenir au cœur d’un OS endommagé. À travers ce tutoriel pratique, nous explorerons la mise en place d’un bac à sable léger, les procédures de secours via Live CD et le confinement strict de sessions SFTP en production.

Fonctionnement de chroot et création d’une prison minimale BusyBox

Pour concevoir un environnement hermétique sans devoir gérer d’innombrables dépendances dynamiques, nous installons la version statique de BusyBox via la commande sudo apt-get update -qq && sudo apt-get install -y busybox-static.

sudo apt-get update -qq && sudo apt-get install -y busybox-static

L’arborescence cible qui fera office de nouveau système de fichiers racine est initialisée à l’aide de l’instruction sudo mkdir -p /opt/mini-jail/bin.

sudo mkdir -p /opt/mini-jail/bin

Afin de fournir un interpréteur de commandes et les utilitaires standards au sein de cet espace isolé, copiez l’exécutable compilé statiquement avec la commande sudo cp /bin/busybox /opt/mini-jail/bin/.

sudo cp /bin/busybox /opt/mini-jail/bin/

Le principe fondamental de chroot réside dans la modification de l’arborescence accessible par un processus : le point de montage spécifié devient le sommet du système de fichiers, coupant tout accès aux dossiers de l’hôte.
Dès son lancement, /opt/mini-jail est considéré comme l’unique racine, garantissant que l’affichage des répertoires s’effectue en totale étanchéité.
⚙️ [Paramètres essentiels]

--userspec=USER:GROUP : Définit l’identité de l’utilisateur et du groupe exécutant le binaire dans la prison.
--groups=G_LIST : Spécifie les groupes secondaires attribués, séparés par des virgules.
--skip-chdir : Conserve le répertoire de travail courant sans basculer automatiquement vers la nouvelle racine.

sudo chroot /opt/mini-jail /bin/busybox sh -c “echo ‘Inside chroot jail:’; /bin/busybox ls -l /”

Déploiement d’un environnement Bash autonome avec ses dépendances

La mise en place d’un shell Bash interactif impose de reproduire l’arborescence des bibliothèques dynamiques partagées. Nous préparons les dossiers requis avec sudo mkdir -p /opt/bash-jail/{bin,lib,lib64}.

sudo mkdir -p /opt/bash-jail/{bin,lib,lib64}

Transférez les binaires indispensables que le processus devra manipuler — ici l’interpréteur Bash et l’outil de listage — grâce à l’ordre sudo cp /bin/bash /bin/ls /opt/bash-jail/bin/.

sudo cp /bin/bash /bin/ls /opt/bash-jail/bin/

Ces exécutables étant liés dynamiquement, il est impératif d’embarquer les bibliothèques d’exécution partagées sous l’architecture cible : sudo cp -a /lib/x86_64-linux-gnu /opt/bash-jail/lib/.

sudo cp -a /lib/x86_64-linux-gnu /opt/bash-jail/lib/

Le chargeur d’édition de liens 64 bits et les composants d’amorçage situés sous /lib64 doivent également être dupliqués : sudo cp -a /lib64/* /opt/bash-jail/lib64/.

sudo cp -a /lib64/* /opt/bash-jail/lib64/

Lancez ensuite la commande de test sudo chroot /opt/bash-jail /bin/bash -c "ls -la /" pour démarrer le shell et explorer la structure confinée.
Le résultat confirme que le système n’expose que les dossiers bin, lib et lib64 créés au préalable, validant le bon fonctionnement d’un shell dynamique autonome parfaitement opérationnel.

sudo chroot /opt/bash-jail /bin/bash -c “ls -la /”

Réparation système par montage lié des pseudo-systèmes de fichiers

Lors d’une intervention de secours (par exemple depuis un support Live), préparez un point de montage pour accueillir le disque corrompu : sudo mkdir -p /mnt/sysroot.

sudo mkdir -p /mnt/sysroot

Raccordez ensuite le système de fichiers racine à secourir vers ce point d’accès via la directive sudo mount --bind / /mnt/sysroot.

sudo mount –bind / /mnt/sysroot

Pour que les utilitaires de maintenance puissent interagir avec les disques physiques et périphériques d’entrée/sortie, montez le pseudo-répertoire matériel via sudo mount --bind /dev /mnt/sysroot/dev.

sudo mount –bind /dev /mnt/sysroot/dev

Les outils d’administration nécessitant la lecture des métadonnées du noyau et des processus en cours, attachez l’interface /proc avec sudo mount --bind /proc /mnt/sysroot/proc.

sudo mount –bind /proc /mnt/sysroot/proc

Complétez la liaison du modèle matériel et des pilotes gérés par le noyau en rattachant /sys par sudo mount --bind /sys /mnt/sysroot/sys.

sudo mount –bind /sys /mnt/sysroot/sys

Exécutez sudo chroot /mnt/sysroot /bin/bash -c "uname -a && df -h /" pour valider la communication avec le noyau et vérifier l’occupation de la partition racine.
L’environnement cible communique parfaitement avec le système sous-jacent et opère comme un système natif, prêt pour une réinstallation de GRUB, la mise à jour des paquets ou la correction du noyau.

sudo chroot /mnt/sysroot /bin/bash -c “uname -a && df -h /”

Une fois les opérations de maintenance achevées, libérez impérativement les ressources dans l’ordre inverse afin de prévenir tout risque d’incohérence ou de corruption de données : sudo umount /mnt/sysroot/sys /mnt/sysroot/proc /mnt/sysroot/dev /mnt/sysroot.

sudo umount /mnt/sysroot/sys /mnt/sysroot/proc /mnt/sysroot/dev /mnt/sysroot

Verrouillage sécurisé des accès SFTP via une arborescence chrootée

Pour sécuriser les transferts de fichiers, créez un compte dédié dépourvu de shell interactif avec sudo id -u jailuser &>/dev/null || sudo useradd -m -d /home/jailuser -s /bin/false jailuser.

sudo id -u jailuser &>/dev/null || sudo useradd -m -d /home/jailuser -s /bin/false jailuser

Définissez l’espace de dépôt dans lequel l’utilisateur restreint sera autorisé à déposer ses fichiers : sudo mkdir -p /home/jailuser/uploads.

sudo mkdir -p /home/jailuser/uploads

Conformément aux exigences de sécurité strictes du démon OpenSSH permettant d’empêcher les évasions, la racine de la prison doit appartenir à root et être configurée en lecture seule pour les autres comptes : sudo chown root:root /home/jailuser && sudo chmod 755 /home/jailuser.

sudo chown root:root /home/jailuser && sudo chmod 755 /home/jailuser

Attribuez en revanche la propriété du sous-dossier de travail au compte utilisateur pour lui permettre d’écrire et de modifier ses fichiers : sudo chown jailuser:jailuser /home/jailuser/uploads.

sudo chown jailuser:jailuser /home/jailuser/uploads

Vérifiez la configuration des privilèges avec ls -ld /home/jailuser /home/jailuser/uploads.
Le diagnostic confirme que le dossier parent demeure protégé sous root:root avec les permissions drwxr-xr-x, tandis que le répertoire uploads est bien détenu par jailuser:jailuser, validant les prérequis d’un environnement SFTP hermétique.

ls -ld /home/jailuser /home/jailuser/uploads

Ce panorama met en lumière l’efficacité de la commande chroot sous Ubuntu, aussi bien pour concevoir des bacs à sable étanches que pour restaurer un système d’exploitation hors service.
Ces techniques constituent une base indispensable pour sécuriser vos services réseau et fiabiliser vos plans de reprise d’activité.