Comment utiliser la commande chroot sous Linux

Contenu

Un indicateur de terminal sur l'écran d'un ordinateur portable Linux.

Les chroot Le commando peut l'envoyer en prison, garder vos environnements de développement ou de test isolés, ou simplement améliorer la sécurité de votre système. Nous vous montrons la façon la plus simple de l'utiliser.

Qu'est-ce qu'un chroot?

Si vous essayez de mesurer l'utilité d'une commande, vous devez faire attention aux fonctionnalités qu'il offre et à sa facilité d'utilisation. S'il est trop compliqué à utiliser pour les gens ou trop long pour qu'ils veuillent essayer de l'utiliser, la fonctionnalité pourrait également être nulle. Si personne ne l'utilise, ne fournit aucune fonctionnalité.

Dans les discussions avec les utilisateurs de Linux, en personne et sur les forums, il semble que le chroot La commande est celle qui est considérée comme difficile à utiliser ou trop exigeante et fastidieuse à configurer. Il semble que cet utilitaire fantastique ne soit pas utilisé autant qu'il le devrait.

Avec chroot vous pouvez configurer et exécuter des programmes interactifs ou des shells comme Bash sur un système de fichiers encapsulé qui ne peut pas interagir avec votre système de fichiers fréquent. Le tout dans le chroot l'environnement est clos et confiné. 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 cellule. Le terme “prison” prison FreeBSD jail commander, qui crée un chroot environnement c'est plus sûr des fréquents chroot environnement.

Mais, en réalité, il y a une façon très simple d'utiliser chroot, qu'allons-nous étudier. Nous utilisons des commandes Linux régulières qui fonctionneront sur toutes les distributions. Certaines distributions Linux ont des outils dédiés pour la configuration chroot environnements, Quoi debootstrap pour Ubuntu, mais ici nous sommes indépendants de la distribution.

Quand dois-je chrooter?

UNE chroot L'environnement fournit des fonctionnalités équivalentes à 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é, Quoi VirtualBox O Gestionnaire de machines virtuelles. Vous n'avez pas non plus besoin d'avoir un noyau installé sur le système captif. Le système captif partage votre noyau existant.

À certains égards, chroot les environnements sont plus proches des conteneurs comme LXC que les machines virtuelles. ils sont légers, rapide à mettre en œuvre et la création et l'activation peuvent être automatisées. De la même manière que les conteneurs, un moyen pratique de les configurer est d'installer suffisamment de système d'exploitation pour qu'il puisse réaliser ce qui est nécessaire. La question “prison” prison chroot environnement.

Certaines utilisations courantes sont:

Développement de logiciels et vérification de produits. Les développeurs écrivent l'équipe de vérification des logiciels et des produits (PV) prouve le. Parfois, PV détecte les problèmes 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. (y 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'était pas incluse dans la version d'essai du logiciel. chroot permet aux développeurs d'avoir un environnement captif simple sur leur ordinateur dans lequel ils peuvent tremper le logiciel avant de le donner à PV. L'environnement captif peut être configuré avec des dépendances minimales requises par le logiciel.

Réduire le risque 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 vrai PC.

Exécuter un logiciel obsolète. Parfois, il suffit d'avoir une ancienne version de quelque chose en cours d'exécution. Si un logiciel plus ancien a des exigences qui entreraient en conflit ou seraient incompatibles avec votre version de Linux, il peut chroot un environnement pour les logiciels problématiques.

Récupération et mises à jour du système de fichiers: Si une installation Linux cesse de fonctionner, Vous pouvez utiliser chroot pour monter le système de fichiers corrompu sur un point de montage sur un Live CD. Cela vous permet de travailler sur le système endommagé et d'essayer de le réparer comme s'il était régulièrement monté en root. /. Cela signifie que les chemins de fichiers attendus dans le système corrompu seront correctement référencés à partir du répertoire racine et non à partir du point de montage du Live CD.. Une technique équivalente a été utilisée dans le post décrivant comment migrer le système de fichiers Linux d'ext2 ou ext3 vers ext4.

Applications de cantonnement. Exécutez un serveur FTP ou un autre appareil connecté à Internet dans un délai chroot L'environnement limite les dégâts qu'un attaquant externe peut faire. Cela peut être une étape précieuse pour renforcer la sécurité de votre système..

EN RELATION: Comment migrer les systèmes de fichiers Ext2 ou Ext3 vers Ext4 sous Linux

Créer un environnement chroot

Nous avons besoin d'un répertoire qui agit comme le 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. prison “prison”. Ce n'est pas grave si ce répertoire n'existe pas encore, nous allons le créer bientôt. Si le répertoire existe, devrait être vide.

chr=/home/dave/testroot

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

mkdir -p $chr

Nous devons créer des répertoires pour contenir les parties du système d'exploitation chroot l'environnement l'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 Bash intégrées 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 {} extension de corset.

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

Nous allons maintenant changer le répertoire en notre nouveau répertoire racine.

cd $chr

prison “/ poubelle” prison chroot annuaire “/ poubelle”. Les -v L'option (détaillé) Est-ce que cp dites-nous ce que vous faites lors de chaque action de copie.

cp -v /bin/{frapper,toucher,ls,rm} $chr / suis

Les fichiers sont copiés pour nous:

Ces binaires auront des dépendances. Nous devons découvrir ce qu'ils sont et copier celles fichiers dans notre environnement également, cas contraire bash, touch, rm, et ls ça ne pourra pas fonctionner. Nous devons le faire à tour de rôle pour chacune de nos commandes choisies. Nous allons d'abord frapper. Les ldd la commande sera lister les dépendances pour nous.

ldd /bin/bash

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

Nous devons copier ces fichiers dans notre nouvel environnement. Choisir les détails de cette liste et les copier un en même temps prendra du temps et sera sujet aux erreurs.

Par chance, nous pouvons le semi-automatiser. Nous allons à nouveau lister les dépendances, et cette fois nous allons former une liste. Ensuite, nous allons parcourir la liste en copiant les fichiers.

Ici, nous utilisons ldd pour répertorier les dépendances et alimenter les résultats via un tuyau dans egrep. À l'aide de egrep est la même chose que d'utiliser grep avec lui -E (expressions régulières étendues). Les -o L'option (juste une coïncidence) restreint la sortie aux parties correspondantes des lignes. Nous recherchons des fichiers de bibliothèque correspondants se terminant par un nombre [0-9].

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

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

echo $list

Maintenant que nous avons la liste, on peut le parcourir avec le cycle suivant, copier les fichiers un par un. Nous utilisons la variable i 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.

Les -v (détaillé) l'option provoque cp pour annoncer chaque copie au fur et à mesure que vous la faites. Les --parents L'option garantit que les répertoires personnels manquants sont créés sur le chroot environnement.

pour moi dans la liste $; faire cp -v --parents "$je" "${chr}"; terminé

Et c'est la sortie:

Nous utiliserons cette technique pour capturer les dépendances de chacune des autres commandes. Et nous utiliserons la technique de la boucle pour faire la copie réelle. La bonne nouvelle, c'est qu'il suffit de faire une petite modification à la commande qui regroupe les dépendances.

Nous pouvons récupérer la commande de notre historique de commandes en appuyant sur le bouton Up Arrow touchez plusieurs fois, puis procédez à l'édition. La commande de bouclage n'a pas besoin de changer du tout.

Ici, nous avons utilisé le Up Arrow pour trouver la commande, et nous l'avons édité pour dire touch au lieu de bash.

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

Maintenant, nous pouvons répéter exactement la même commande de boucle qu'avant:

pour moi dans la liste $; faire cp -v --parents "$je" "${chr}"; terminé

Et nos fichiers sont copiés pour nous:

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

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

De nouveau, nous utiliserons la même commande de boucle. Peu importe quels fichiers sont dans la liste. Travaillez aveuglément à travers la liste en copiant les fichiers pour nous.

pour moi dans la liste $; faire cp -v --parents "$je" "${chr}"; terminé

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

Nous éditons le list ligne de commande la dernière fois, qu'est-ce qui fait que ça marche pour rm:

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

Nous avons utilisé la commande loop copy une dernière fois:

pour moi dans la liste $; faire cp -v --parents "$je" "${chr}"; terminé

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

sudo chroot $chr /bin/bash

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 coquille dans notre environnement.

Nous pouvons tester les commandes que nous avons apportées à l'environnement.

ls
ls /home/dave/Documents

Les ls La commande fonctionne comme prévu lorsque nous l'utilisons dans l'environnement. Lorsque nous essayons d'entrer dans un répertoire en dehors de l'environnement, la commande échoue.

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

touchez sample_file.txt
ls
rm fichier_échantillon.txt
ls

De toute façon, nous pouvons également utiliser les commandes intégrées fournies par le shell Bash. Si vous écrivez help sur la ligne de commande, Bash les listera pour vous.

aider

Utilisez exit pour quitter le chroot environnement:

sortir

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

rm -r racine test/

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

Automatiser pour plus de commodité

Si vous pensez que chroot Les environnements peuvent vous être utiles, mais ils sont un peu compliqués à configurer, rappelez-vous que vous pouvez toujours éliminer le stress et les risques liés aux tâches répétitives grâce à l'utilisation d'alias, fonctions et scripts.

EN RELATION: Comment créer des alias et des fonctions shell sous Linux

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.