Agence web » Actualités du digital » Qu’est-ce que chroot sous Linux et comment l’utilisez-vous?

Qu’est-ce que chroot sous Linux et comment l’utilisez-vous?

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

Que fait chroot?

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 que quoi que ce soit en dehors de sa prison existe, car elle n’a aucun lien vers elle, et pour autant qu’elle sache, s’exécute quand même 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 du 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 pour un processus, mais le fait à un niveau supérieur à la modification d’espace de noms.

À quoi sert le chroot?

La chose principale chroot est utilisé pour verrouiller les démons système afin que les vulnérabilités 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, cela 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, le chrootage du processus est un moyen facile de verrouiller l’accès.

Il est également utile en tant que «conteneur de budget», 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 depuis chroot vous oblige à copier manuellement les dépendances d’application dans la prison, ce n’est pas adapté à tout. Un processus qui a besoin d’accéder et d’interagir avec des ressources de niveau 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 incertain. Mais, 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.

Alors qu’un chroot la prison est 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 change 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 jailed, vous pouvez exécuter:

sudo chroot /jail

Cependant, cette commande échouera avec un nouveau /jail répertoire, depuis chroot essaiera de charger bash depuis /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, les copier avec cp est assez:

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

Mais cela ne copie que l’exécutable bash, et pas toutes ses dépendances, qui n’existent pas encore dans notre prison. Vous pouvez lister les dépendances pour bash avec le ldd commander:

ldd $(which 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 à faire pour chaque commande sous laquelle vous voudrez peut-être exécuter chroot. Si vous ne vous souciez pas de votre chroot accéder à votre lib et bin répertoires (sans accès au reste du système), vous pouvez alors utiliser mount --bind pour fournir un lien dans votre prison:

mount --bind /bin /jail/bin
mount --bind /lib /jail/lib
mount --bind /lib64 /jail/lib64

Vous pouvez également simplement copier l’ensemble /bin et /lib répertoires, qui utilisent plus d’espace, mais peuvent être un peu meilleurs 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:

sudo chroot /jail command

Si vous exécutez des processus via chroot bash, vous pouvez quitter le shell avec exit ou Ctrl + D, ce qui 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.

Processus peut-il échapper à la prison?

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

Il est possible que des processus non privilégiés éclatent entièrement avec la méthode chdir("..") et un autre appel à chroot. Si vous vous concentrez vraiment sur la sécurité, vous devriez abandonner l’accès au chroot(2) appel système, ou utilisez la fourchette jchroot, qui automatise cette fonction de sécurité supplémentaire.

chroot n’est pas un outil de sécurité à toute épreuve, 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 n’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.

★★★★★