in

Comment utiliser la commande chroot sous Linux

Fatmawati Achmad Zaenuri / Shutterstock.com

La chroot peut vous envoyer en prison, isoler vos environnements de développement ou de test, ou simplement améliorer la sécurité de votre système. Nous vous montrons la manière la plus simple de l’utiliser.

Qu’est-ce qu’un chroot?

Si vous essayez de mesurer l’utilité d’une commande, vous devez prendre en compte les fonctionnalités qu’elle fournit et sa facilité d’utilisation. S’il est trop compliqué à utiliser pour les gens ou trop long pour leur donner envie d’essayer de l’utiliser, la fonctionnalité pourrait tout aussi bien être nulle. Si personne ne l’utilise, il ne fournit aucune fonctionnalité.

Lors des discussions avec les utilisateurs Linux – en personne et sur les forums – il semble que le chroot est une commande qui est considérée comme difficile à utiliser, ou trop perspicace et fastidieuse à configurer. Il semble que cet utilitaire formidable ne soit pas utilisé autant qu’il pourrait l’être.

Avec chroot vous pouvez configurer et exécuter des programmes ou des shells interactifs comme Bash dans un système de fichiers encapsulé qui ne peut pas interagir avec votre système de fichiers normal. Tout dans le chroot l’environnement est écrit et contenu. Rien dans le chroot l’environnement peut voir au-delà de son propre répertoire racine spécial sans passer aux privilèges root. Cela a valu à ce type d’environnement le surnom de chroot prison. Le terme «prison» ne doit pas être confondu avec FreeBSD jail commande, qui crée un chroot environnement c’est plus sûr que d’habitude chroot environnement.

Mais en fait, il existe une manière très simple d’utiliser chroot, que nous allons parcourir. Nous utilisons des commandes Linux régulières qui fonctionneront sur toutes les distributions. Certaines distributions Linux ont des outils dédiés à mettre en place chroot environnements, tels que debootstrap pour Ubuntu, mais nous sommes indépendants de la distribution ici.

Quand devriez-vous utiliser un chroot?

UNE chroot l’environnement fournit des fonctionnalités similaires à celles d’une machine virtuelle, mais c’est une solution plus légère. Le système captif n’a pas besoin d’un hyperviseur pour être installé et configuré, tel que VirtualBox ou Gestionnaire de machine virtuelle. Il n’est pas non plus nécessaire d’installer un noyau dans le système captif. Le système captif partage votre noyau existant.

Dans certains sens, chroot les environnements sont plus proches des conteneurs tels que LXC qu’aux machines virtuelles. Ils sont légers, rapides à déployer et leur création et leur mise en route peuvent être automatisées. Tout comme les conteneurs, un moyen pratique de les configurer consiste à installer juste assez de système d’exploitation pour que vous puissiez accomplir ce qui est requis. La question « ce qui est requis » est répondue en examinant comment vous allez utiliser votre chroot environnement.

Certaines utilisations courantes sont:

Développement de logiciels et vérification de produits. Les développeurs écrivent des logiciels et l’équipe de vérification des produits (PV) les teste. Parfois, des problèmes sont détectés par PV qui ne peuvent pas être répliqués sur l’ordinateur du développeur. Le développeur a toutes sortes d’outils et de bibliothèques installés sur son ordinateur de développement que l’utilisateur moyen – et PV – n’aura pas. Souvent, un nouveau logiciel qui fonctionne pour le développeur mais pas pour les autres s’avère utiliser une ressource sur le PC du développeur qui n’a pas été incluse dans la version de test du logiciel. chroot permet aux développeurs d’avoir un environnement captif pur et simple sur leur ordinateur dans lequel ils peuvent plonger le logiciel avant de le donner à PV. L’environnement captif peut être configuré avec les dépendances minimales requises par le logiciel.

Réduire les risques de développement. Le développeur peut créer un environnement de développement dédié afin que rien de ce qui s’y passe ne puisse gâcher son PC réel.

Exécution de logiciels obsolètes. Parfois, vous devez simplement avoir une ancienne version de quelque chose en cours d’exécution. Si l’ancien logiciel a des exigences qui entreraient en conflit ou seraient incompatibles avec votre version de Linux, vous pouvez chroot un environnement pour le logiciel problématique.

Récupération et mises à niveau du système de fichiers: Si une installation Linux devient inopérante, vous pouvez utiliser chroot pour monter le système de fichiers endommagé sur un point de montage sur un Live CD. Cela vous permet de travailler dans le système endommagé et d’essayer de le réparer comme s’il était monté normalement à root /. Cela signifie que les chemins de fichiers attendus dans le système endommagé seront correctement référencés à partir du répertoire racine, et non à partir du point de montage du Live CD. Une technique similaire a été utilisée dans l’article décrivant comment migrer le système de fichiers Linux d’ext2 ou ext3 vers ext4.

Applications de Ringfencing. Exécution d’un serveur FTP ou d’un autre appareil connecté à Internet dans un chroot l’environnement limite les dommages qu’un attaquant externe peut causer. Cela peut être une étape précieuse pour renforcer la sécurité de votre système.

Créer un environnement chroot

Nous avons besoin d’un répertoire pour agir en tant que répertoire racine du chroot environnement. Pour que nous ayons une manière abrégée de faire référence à ce répertoire, nous allons créer une variable et y stocker le nom du répertoire. Ici, nous mettons en place une variable pour stocker un chemin vers le répertoire «testroot». Peu importe si ce répertoire n’existe pas encore, nous allons le créer bientôt. Si le répertoire existe, il doit être vide.

chr=/home/dave/testroot

chr = / home / dave / testroot dans une fenêtre de terminal

Si le répertoire n’existe pas, nous devons le créer. Nous pouvons le faire avec cette commande. La -p L’option (parents) garantit que tous les répertoires parents manquants sont créés en même temps:

mkdir -p $chr

mkdir -p $ chr dans une fenêtre de terminal

Nous devons créer des répertoires pour contenir les parties du système d’exploitation chroot l’environnement exigera. Nous allons mettre en place un environnement Linux minimaliste qui utilise Bash comme shell interactif. Nous inclurons également le touch, rm, et ls commandes. Cela nous permettra d’utiliser toutes les commandes intégrées de Bash et touch, rm, et ls. Nous pourrons créer, lister et supprimer des fichiers et utiliser Bash. Et – dans cet exemple simple – c’est tout.

Répertoriez les répertoires que vous devez créer dans le {} expansion des accolades.

mkdir -p $chr/{bin,lib,lib64}

mkdir -p $ chr / {bin, lib, lib64} dans une fenêtre de terminal

Maintenant, nous allons changer de répertoire dans notre nouveau répertoire racine.

cd $chr

cd $ chr dans une fenêtre de terminal

Copions les binaires dont nous avons besoin dans notre environnement Linux minimaliste de votre répertoire «/ bin» normal dans notre chroot Répertoire «/ bin». La -v (verbose) option rend cp dites-nous ce qu’il fait pendant qu’il exécute chaque action de copie.

cp -v /bin/{bash,touch,ls,rm} $chr/bin

cp -v / bin / {bash, touch, ls, rm} $ chr dans une fenêtre de terminal

Les fichiers sont copiés pour nous:

sortie de cp lorsque les fichiers sont copiés dans une fenêtre de terminal

Ces binaires auront des dépendances. Nous devons découvrir ce qu’ils sont et copier également les fichiers dans notre environnement, sinon bash, touch, rm, et ls ne pourra pas fonctionner. Nous devons le faire à tour de rôle pour chacune de nos commandes choisies. Nous ferons d’abord Bash. La ldd commande va lister les dépendances pour nous.

ldd /bin/bash

ldd / bin / bash dans une fenêtre de terminal

Les dépendances sont identifiées et répertoriées dans la fenêtre du terminal:

Dépendances Bash répertoriées dans une fenêtre de terminal

Nous devons copier ces fichiers dans notre nouvel environnement. Récupérer les détails de cette liste et les copier un à la fois prendra du temps et sera source d’erreurs.

Heureusement, nous pouvons le semi-automatiser. Nous listerons à nouveau les dépendances, et cette fois nous formerons une liste. Ensuite, nous allons parcourir la liste en copiant les fichiers.

Ici, nous utilisons ldd pour lister les dépendances et introduire les résultats via un tube dans egrep. En utilisant egrep revient à utiliser grep avec le -E (expressions régulières étendues). La -o (correspondance uniquement) limite la sortie aux parties de lignes correspondantes. Nous recherchons des fichiers de bibliothèque correspondants qui se terminent par un numéro [0-9].

list="$(ldd /bin/bash | egrep -o '/lib.*.[0-9]')"

liste ="$ (ldd / bin / bash | egrep -o '/ lib. * .[0-9]')" dans une fenêtre de terminal

Nous pouvons vérifier le contenu de la liste en utilisant echo:

echo $list

echo $ list dans une fenêtre de terminal

Maintenant que nous avons la liste, nous pouvons la parcourir avec la boucle suivante, en copiant les fichiers un par un. Nous utilisons la variable i pour parcourir la liste. Pour chaque membre de la liste, nous copions le fichier dans notre chroot répertoire racine qui est la valeur contenue dans $chr.

La -v (verbose) cause cp pour annoncer chaque copie au fur et à mesure de son exécution. La --parents garantit que tous les répertoires parents manquants sont créés dans le chroot environnement.

for i in $list; do cp -v --parents "$i" "${chr}"; done

pour i dans $ list;  do cp -v --parents "$ i" "$ {chr}";  fait dans une fenêtre de terminal

Et voici le résultat:

sortie de la boucle cp dans une fenêtre de terminal

Nous utiliserons cette technique pour capturer les dépendances de chacune des autres commandes. Et nous utiliserons la technique de la boucle pour effectuer la copie réelle. La bonne nouvelle est que nous n’avons qu’à apporter une petite modification à la commande qui rassemble les dépendances.

Nous pouvons récupérer la commande de notre historique des commandes en appuyant sur la touche Up Arrow touchez plusieurs fois, puis effectuez la modification. La commande de copie en boucle n’a pas besoin de changer du tout.

Ici, nous avons utilisé le Up Arrow clé pour trouver la commande, et nous l’avons modifiée pour dire touch au lieu de bash.

list="$(ldd /bin/touch | egrep -o '/lib.*.[0-9]')"

liste ="$ (ldd / bin / touch | egrep -o '/ lib. * .[0-9]')" dans une fenêtre de terminal

Nous pouvons maintenant répéter exactement la même commande de boucle que précédemment:

for i in $list; do cp -v --parents "$i" "${chr}"; done

pour i dans $ list;  do cp -v --parents "$ i" "$ {chr}";  fait dans une fenêtre de terminal

Et nos fichiers sont copiés pour nous:

sortie de la boucle cp copiant les dépendances tactiles dans une fenêtre de terminal

Nous pouvons maintenant modifier le list ligne de commande pour ls:

list="$(ldd /bin/ls | egrep -o '/lib.*.[0-9]')"

liste ="$ (ldd / bin / ls | egrep -o '/ lib. * .[0-9]')" dans une fenêtre de terminal

Encore une fois, nous utiliserons la même commande de boucle. Peu importe quels fichiers sont dans la liste. Cela fonctionne aveuglément à travers la liste en copiant les fichiers pour nous.

for i in $list; do cp -v --parents "$i" "${chr}"; done

pour i dans $ list;  do cp -v --parents "$ i" "$ {chr}";  fait dans une fenêtre de terminal

Et les dépendances pour ls sont copiés pour nous:

Sortie de la boucle cp copiant les dépendances ls dans une fenêtre de terminal

Nous éditons le list ligne de commande pour la dernière fois, ce qui le fait fonctionner pour rm:

list="$(ldd /bin/ls | egrep -o '/lib.*.[0-9]')"

liste ="$ (ldd / bin / ls | egrep -o '/ lib. * .[0-9]')" dans une fenêtre de terminal

Nous utilisons la commande de copie en boucle une dernière fois:

for i in $list; do cp -v --parents "$i" "${chr}"; done

La dernière de nos dépendances est copiée dans notre chroot environnement. Nous sommes enfin prêts à utiliser le chroot commander. Cette commande définit la racine du chroot environnement, et spécifie quelle application exécuter en tant que shell.

sudo chroot $chr /bin/bash

sudo chroot $ chr / bin / bash dans une fenêtre de terminal

Notre chroot l’environnement est maintenant actif. L’invite de la fenêtre du terminal a changé et le shell interactif est géré par le bash shell dans notre environnement.

Environnement chroot actif dans une fenêtre de terminal

Nous pouvons essayer les commandes que nous avons introduites dans l’environnement.

ls
ls /home/dave/Documents

Environnement chroot actif dans une fenêtre de terminal

La ls La commande fonctionne comme prévu lorsque nous l’utilisons dans l’environnement. Lorsque nous essayons d’accéder à un répertoire en dehors de l’environnement, la commande échoue.

On peut utiliser touch pour créer un fichier, ls pour le lister, et rm pour le supprimer.

touch sample_file.txt
ls
rm sample_file.txt
ls

touchez sample_file.txt dans une fenêtre de terminal

Bien sûr, nous pouvons également utiliser les commandes intégrées fournies par le shell Bash. Si vous tapez help sur la ligne de commande, Bash les listera pour vous.

help

Sortie de la commande d'aide dans une fenêtre de terminal

Utilisez la sortie pour quitter chroot environnement:

exit

utiliser exit pour quitter l'environnement chroot dans une fenêtre de terminal

Si vous souhaitez supprimer le chroot l’environnement, vous pouvez simplement le supprimer:

rm -r testroot/

rm -r testroot / dans une fenêtre de terminal

Cela supprimera récursivement les fichiers et répertoires dans le chroot environnement.

Automatisez pour plus de commodité

Si tu penses ça chroot Les environnements peuvent vous être utiles, mais ils sont un peu fastidieux à mettre en place, rappelez-vous que vous pouvez toujours réduire la pression et le risque des tâches répétitives en utilisant des alias, des fonctions et des scripts.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Comment voir où un TinyUrl est vraiment lié

Comment voir où un TinyUrl est vraiment lié

Surveiller le processeur, la mémoire et les E / S disque dans Windows 7 avec les indicateurs de la barre des tâches

Surveiller le processeur, la mémoire et les E / S disque dans Windows 7 avec les indicateurs de la barre des tâches