Chroot est un utilitaire Linux/Unix qui peut changer ou modifier le système de fichiers racine. Avec l’aide du chroot
, 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 professionnel et domestique ou si vous souhaitez un environnement de test pour tester les logiciels de manière isolée.
Différence entre chroot et machine virtuelle
À première vue, vous pouvez considérer chroot comme similaire à une machine virtuelle ou à un système conteneurisé comme docker. C’est un peu similaire mais chroot est une solution beaucoup plus légère qu’une machine virtuelle. La machine virtuelle a besoin d’un hyperviseur pour s’installer et fonctionner sur un noyau distinct, différent de la machine hôte. Contrairement à une machine virtuelle, chroot partage le même noyau et les mêmes processus, mais crée une prison dans le système de fichiers. À l’intérieur de la prison, il n’est pas possible de regarder à l’extérieur sans l’autorisation root. Par conséquent, le système de fichiers isolé est également appelé chroot jail.
Différents cas d’utilisation de Chroot
- Environnement de construction isolé dans le pipeline CI/CD: Chroot est utilisé pour créer un environnement de construction isolé pour les applications dans le pipeline CI/CD. Cela permet de créer votre application avec des dépendances uniques et est complètement isolé de tous les autres environnements de génération pour supprimer les conflits potentiels.
- Environnement de développement et de test séparé: Souvent, les logiciels qui fonctionnent sur la machine du développeur ne fonctionnent pas sur l’appareil de l’utilisateur final. C’est parce que le développeur a beaucoup d’outils et de dépendances installés dans son système. Les gens normaux n’ont pas toutes ces dépendances installées sur leurs machines. Donc, pour tester le logiciel, s’il fonctionnera sur tous les appareils, le développeur ou le testeur peut facilement créer un environnement vanille simple en utilisant chroot pour tester son logiciel.
- Réduire les risques pour le développeur: En tant que développeur, nous créons souvent des programmes qui interagissent avec nos fichiers système sans aucun sandboxing approprié. Par conséquent, si nous commettons une erreur, notre logiciel peut facilement effacer nos données importantes de notre appareil. Pour réduire ce type de risque, le développeur utilise souvent chroot pour créer un nouvel environnement de travail et réduire son risque de perte de données.
- Une version différente du même logiciel: Parfois, vous devez installer une version très ancienne ou très récente de certains logiciels ou dépendances à des fins de développement. Mais l’utilisation d’une telle dépendance conflictuelle peut perturber votre système. Cette situation peut être facilement surmontée en utilisant la prison chroot.
- Réparer un système défectueux: Si vous avez un système cassé, vous pouvez facilement le réparer à l’aide de chroot. Démarrez simplement un environnement Linux en direct dans l’appareil et montez le système de fichiers. À l’aide de ce point de montage, vous pouvez exécuter différentes commandes pour résoudre votre problème. Nous en parlerons plus loin dans l’article.
- Exécuter un serveur FTP en toute sécurité: FTP signifie protocole de transfert de fichiers. L’exécution d’un serveur FTP vous permet de partager uniquement les fichiers que vous souhaitez. Par conséquent, aucun pair distant ne peut voir votre système de fichiers hôte et y accéder.
Création d’un environnement chroot
Ceci est un guide rapide sur la création d’un environnement chroot dans votre système. Tu peux obtenir des informations détaillées sur le wiki arch.
- Pour créer un environnement chroot, créez un nouveau répertoire dans votre dossier personnel. Dans ce dossier, notre système de fichiers isolé sera présent à l’avenir. Dans ce tutoriel, j’ai nommé le dossier « mte ».
- Ensuite, nous allons créer un environnement Linux très minimal. Nous installons
bash
en tant que shell dans l’environnement chroot et installezls
,rm
ettouch
pour lister, supprimer et créer des fichiers respectivement. Créons maintenant les répertoires requis dans notre répertoire « mte ».
cd ~/mte mkdir bin mkdir lib mkdir lib64
- Copiez les fichiers binaires requis de notre répertoire habituel « /bin » vers notre environnement chroot « ~/mte ».
cp /bin/bash ~/mte/bin cp /bin/touch ~/mte/bin cp /bin/ls ~/mte/bin cp /bin/rm ~/mte/bin
- Copier les binaires ne suffit pas. Nous devons également copier leurs dépendances dans le dossier « mte ». Pour connaître les dépendances requises, nous utilisons le
ldd
commande. Si vous voulez connaître la dépendance de bash, exécutez
Nous obtenons cette sortie de la commande ci-dessus.
- Maintenant, répertorier ces dépendances et les copier une par une sera extrêmement lent et ennuyeux. Par conséquent, pour automatiser ce processus, nous utiliserons un script bash. Créez un fichier nommé « copydependancy.sh » et écrivez ces commandes shell à l’intérieur.
#Setting the chroot directory mte="~/mte" # enter your binary name echo -e "Please enter your binary name \n" #Reading from terminal input read binaryname # Listing all the dependencies list="$(ldd /bin/$binaryname | egrep -o '/lib.*\.[0-9]')" # Looping through the dependency list for i in $list; do cp -v --parents "$i" "${mte}"; done
Comprenons ce que fait ce script. Au début, ce script shell demande le nom binaire. Ensuite, il prend ce nom binaire et trouve toutes les dépendances de ce binaire et l’enregistre dans une variable de liste. Ensuite, il exécute une boucle for qui s’exécute sur chaque élément de la liste et copie la dépendance de notre fichier « /bin » normal vers notre répertoire chroot « mte ».
Enregistrez ce script ailleurs et référez-vous-y lorsque vous créez un nouvel environnement chroot.
Ensuite, modifiez l’autorisation du script et exécutez-le dans notre terminal.
chmod +x copydependancy.sh
- Comme toutes les dépendances sont installées dans notre système, activons notre environnement chroot. La commande chroot standard ressemble à ceci.
chroot [-OPTION] [PATH FOR NEW ROOT] [PATH FOR SERVER]
Mais pour remplir notre objectif, nous exécutons la commande suivante pour activer notre environnement chroot.
sudo chroot ~/mte /bin/bash
La commande ci-dessus active un environnement chroot dans le répertoire « ~/mte » et spécifie d’exécuter un shell bash. Vous pouvez maintenant voir un changement dans l’invite de votre terminal et vous pouvez maintenant utiliser le touch
, rm
et ls
commandes pour créer, supprimer et lister les fichiers respectivement.
Pour quitter l’environnement chroot, vous pouvez exécuter le exit
commande pour quitter l’environnement chroot.
Si vous souhaitez supprimer complètement l’environnement chroot, vous pouvez simplement supprimer le répertoire « mte » de votre système de fichiers.
Réparer un chargeur de démarrage cassé à l’aide de Chroot
La chose la plus fascinante à propos de chroot est que vous pouvez entrer dans un système défectueux et y exécuter une commande. Par conséquent, en utilisant chroot, vous pouvez facilement installer une mise à jour critique pour réparer un système ou réinstaller l’intégralité du chargeur de démarrage pour résoudre le problème.
Mais pour cela, vous devez disposer d’un environnement Linux en direct. Créez une clé USB amorçable en téléchargeant un ISO Linux et en démarrant à partir de la clé USB. Il vous donne un environnement en direct avec lequel travailler. Montez maintenant votre partition système pour travailler avec chroot.
sudo mount -t ext4 /dev/sda /mnt
Changez ici le « /dev/sda » avec le nom de la partition système avec laquelle vous souhaitez travailler. Laissez maintenant le chargeur de démarrage grub trouver les informations dont il a besoin pour résoudre le problème du chargeur de démarrage.
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
Maintenant, chrootons dans le répertoire « /mnt » et entrons dans le système défectueux.
Maintenant, installez, vérifiez et mettez à jour le chargeur de démarrage grub sur votre système. Assurez-vous d’utiliser le bon nom de lecteur. Ne copiez pas ces commandes aveuglément.
grub-install /dev/sda grub-install --recheck /dev/sda update-grub
Quittez ensuite le shell à l’aide de la commande exit. Nous l’avons mentionné plus tôt. Maintenant, dissociez les répertoires précédemment liés et démontez le système de fichiers. Exécutez ces commandes l’une après l’autre consécutivement.
sudo umount /mnt/sys && sudo umount /mnt/proc && sudo umount /mnt/dev/pts && sudo umount /mnt/dev && sudo umount /mnt
Maintenant, redémarrez votre PC et débranchez l’USB en direct. Lorsque l’ordinateur démarrera, votre chargeur de démarrage grub brillera comme neuf et tout devrait fonctionner parfaitement.
Questions fréquemment posées
Est-ce que Chroot est sécurisé ?
Chroot n’implique pas la sécurité. Il n’a jamais eu l’intention de le devenir. Pour la sécurité, vous pouvez utiliser SELinux. Si vous placez quelqu’un dans un répertoire chroot, il n’a pas accès au système de fichiers racine. Mais cela ne signifie pas que cela rend votre système incassable. Chroot ne signifie pas non plus moins de sécurité. Cela représente simplement une sécurité égale à celle de votre système principal. Ni plus ni moins.
Quelles sont les limites des systèmes Chroot ?
Le système chroot n’est pas destiné à protéger contre la modification intentionnelle par l’utilisateur root. Dans certains systèmes, les programmes chrootés peuvent obtenir des privilèges suffisants pour créer leur propre environnement chroot et sortir de la prison chroot. Cheroot ne signifie pas isolement complet. Vous pouvez généralement faire ce que vous voulez dans l’espace utilisateur. Vous pouvez accéder aux périphériques matériels, vous pouvez monter et lire n’importe quoi. C’est à condition que vous n’ayez pas à installer d’autre programme, alors vous avez besoin du privilège root que vous n’avez pas.
Pourquoi Chroot est-il appelé prison ?
Chroot est appelé une prison car il vous enferme dans un environnement isolé. Vous pouvez faire ce que vous voulez à l’intérieur de cette prison, mais vous ne pouvez pas en sortir sans l’autorisation de l’utilisateur root. De plus, vous disposez d’un nombre limité d’utilitaires fournis par l’utilisateur root et vous ne pouvez rien installer par vous-même. Pour toutes ces restrictions, cela s’appelle une prison chroot.