Qu'est-ce que chroot sur Linux et comment l'utilisez-vous ?

0
247

L'utilitaire chroot Linux peut modifier le répertoire racine de travail d'un processus, limitant l'accès au reste du fichier système. Ceci est généralement fait pour la sécurité, la conteneurisation ou les tests, et est souvent appelé “chroot jail.”

Qu'est-ce que chroot Faire ?

Chroot fait une chose & exécuter une commande avec un répertoire racine différent. La commande en cours d'exécution n'a aucune idée de l'existence de quoi que ce soit en dehors de sa prison, car elle n'a aucun lien vers elle et, à sa connaissance, s'exécute de toute façon sur le système de fichiers racine. Il n'y a rien au-dessus de root, donc la commande ne peut accéder à rien d'autre.

Chroot n'apporte aucune modification à votre disque, mais il peut le faire apparaître ainsi à partir de le point de vue des processus qui s'exécutent sous celui-ci. Chrooter un processus accomplit la même chose que changer l'espace de noms de montage d'un processus, mais le fait à un niveau supérieur à la modification de l'espace de noms.

Qu'est-ce que chroot utilisé Pour ?

Chroot est principalement utilisé pour verrouiller les démons du système afin que les failles de sécurité de ces démons n'affectent pas le reste du système. Par exemple, Postfix, un agent de messagerie, peut être configuré pour s'exécuter dans un environnement chrooté avec un accès limité aux répertoires qu'il utilise pour communiquer avec le système. De cette façon, si un bogue est trouvé dans Postfix, il affecte Postfix, et rien d'autre.

C'est assez utile pour un service comme FTP. Si vous souhaitez offrir aux utilisateurs distants l'accès à certaines parties de votre système, chrooter le processus est un moyen simple de verrouiller l'accès.

Publicité

Il est également utile en tant que « conteneur budgétaire » ; pour créer un sous-ensemble de votre système d'exploitation et exécuter des applications dans un environnement isolé, que ce soit pour les tests, la sécurité ou la facilité de développement. Mais comme chroot vous oblige à copier manuellement les dépendances de l'application dans la prison, il ne convient pas à tout. Un processus qui a besoin d'accéder et d'interagir avec les ressources au niveau de l'utilisateur ne fonctionnerait pas bien dans une prison chroot, ou nécessiterait une configuration supplémentaire qui pourrait rendre l'ensemble de la configuration plus précaire. Cependant, même des applications complexes comme Apache et MySQL peuvent être exécutées dans un environnement chrooté avec toutes les dépendances prises en compte.

Bien qu'une prison chroot soit une couche de sécurité supplémentaire, chroot ne devrait pas être votre seul outil de sécurité. Sortir d'une prison peut être relativement trivial s'il n'est pas configuré correctement, et une prison chroot ne modifie que l'emplacement de montage et n'affecte pas les autres espaces de noms. Si vous voulez une meilleure sécurité, utilisez des espaces de noms ou un moteur de conteneurisation comme Docker.

Envoi de processus en prison

Pour ouvrir un shell dans un répertoire emprisonné, vous pouvez exécuter :

sudo chroot /jail

Cependant, cette commande échouera avec un répertoire /jail nouvellement créé, car chroot essayera de charger bash à partir de /jail/bin/bash. Ce fichier n'existe pas, ce qui est le premier problème avec chroot, vous devez construire la prison vous-même.

Pour certaines choses, il suffit de les copier avec cp :

cp -a /bin/bash /jail/bin/bash

Mais cela ne copie que sur l'exécutable bash, et pas toutes ses dépendances, ce qui ne& #8217; n'existe pas encore dans notre prison. Vous pouvez répertorier les dépendances de bash avec la commande ldd :

ldd $ (quel bash) linux-vdso.so.1 (0x00007ffd079a1000) libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f339096f000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f339076b000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f339037a000) /lib64/ld-linux-x86-64.so.2 (0x00007f3390eb3000)

Vous pouvez les copier manuellement :

cp/lib/x86_64-linux-gnu/libtinfo.so.5 /jail/lib/x86_64-linux-gnu/cp /lib/x86_64-linux-gnu/libdl.so.2 /jail/lib/x86_64-linux-gnu/cp /lib/x86_64-linux-gnu/libc.so.6 /jail/lib/x86_64-linux-gnu/cp /lib64/ld-linux-x86-64.so.2 /jail/lib64/

Mais cela devient un problème majeur pour chaque commande que vous souhaitez exécuter sous chroot. Si vous ne vous souciez pas du fait que votre chroot accède à vos répertoires lib et bin (sans accès au reste du système), vous pouvez utiliser mount –bind pour fournir un lien dans votre jail :

mount –bind /bin /jail/bin mount –bind /lib /jail/lib mount –bind /lib64 /jail/lib64 Publicité

Vous pouvez également simplement copier l'intégralité des répertoires /bin et /lib, ce qui utilise plus d'espace, mais peut être un peu mieux pour la sécurité, surtout si vous utilisez chroot pour exécuter des processus dangereux que vous ne voudriez pas jouer avec les dossiers de votre système.

Maintenant que tout est copié, vous devriez pouvoir à nouveau exécuter sudo chroot /jail pour ouvrir bash. Vous pouvez également exécuter n'importe quelle autre commande en exécutant :

commande sudo chroot /jail

Si vous exécutez des processus via chroot bash, vous pouvez quitter le shell avec exit ou Ctrl+D, ce qui s'arrêtera le processus en cours. Les processus exécutés en prison s'exécutent dans leur propre environnement et n'ont pas accès aux autres processus du système.

Le processus peut-il s'échapper de la prison ?

Pas facilement, à moins qu'il ne s'exécute en tant que root. Chroot ne bloque pas l'accès aux ressources système de bas niveau (ce qui nécessiterait un accès root), et en tant que tel, un processus privilégié pourrait facilement échapper à une prison.

C'est possible pour les non-privilégiés processus à éclater entièrement avec la méthode chdir(“..”) et un autre appel à chroot. Si vous êtes vraiment concentré sur la sécurité, vous devez supprimer l'accès à l'appel système chroot(2) ou utiliser le fork jchroot, qui automatise cette fonctionnalité de sécurité supplémentaire.

chroot n'est pas une sécurité à toute épreuve. outil, car il n'est pas complètement conteneurisé et ne doit pas être considéré comme un pare-feu qui sauvera votre système des attaquants. Cependant, à moins qu'un processus essaie spécifiquement de sortir d'une prison chroot, chroot accomplit son travail de sectionnement de votre système de fichiers pour la plupart des processus, et peut être configuré avec des mesures de sécurité supplémentaires pour bloquer les principales méthodes d'échappement.