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 le sache, 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 du point de vue des processus exécutés 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 toute vulnérabilité de sécurité dans ces démons n'affecte 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 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 depuis chroot
vous oblige à copier manuellement les dépendances des applications dans la prison, cela ne convient pas à 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 compliquées comme Apache et MySQL peut être exécuté 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 simple 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 / prison
Cependant, cette commande échouera avec un nouveau /prison
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 sur 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 $ (qui 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 poubelle
répertoires (sans accès au reste du système), vous pouvez alors utiliser monter - lier
pour fournir un lien dans votre prison:
mount --bind / bin / jail / bin mount --bind / lib / jail / lib monter --bind / lib64 / jail / lib64
Vous pouvez également simplement copier l'ensemble /poubelle
et / lib
répertoires, qui utilisent plus d'espace, mais peuvent être un peu meilleurs pour la sécurité, en particulier si vous utilisez chroot
pour exécuter des processus dangereux que vous ne voudriez pas déranger avec les dossiers de votre système.
Maintenant que tout est copié, vous devriez pouvoir à nouveau exécuter sudo chroot / prison
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 sortie
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 s'é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 êtes vraiment concentré sur la sécurité, vous devriez supprimer l'accès à les chroot (2)
appel système, ou utiliser 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.