web-dev-qa-db-fra.com

chroot "prison" - qu'est-ce que c'est et comment l'utiliser?

J'ai beaucoup entendu parler de la prison chroot sous linux mais je ne l'ai jamais encore utilisée (j'utilise Fedora au jour le jour), alors qu'est-ce qu'une "prison" chroot? Quand et pourquoi pourrais-je l'utiliser/ne pas l'utiliser et y a-t-il autre chose que je devrais savoir? Comment pourrais-je en créer un?

107
user119

Une prison chroot est un moyen d'isoler un processus et ses enfants du reste du système. Il ne doit être utilisé que pour les processus qui ne s'exécutent pas en tant que root, car les utilisateurs root peuvent sortir très facilement de la prison.

L'idée est de créer une arborescence de répertoires dans laquelle vous copiez ou liez tous les fichiers système nécessaires à l'exécution d'un processus. Vous utilisez ensuite l'appel système chroot() pour modifier le répertoire racine afin qu'il soit à la base de cette nouvelle arborescence et démarrer le processus en cours d'exécution dans cet environnement chrooté. Puisqu'il ne peut pas réellement référencer des chemins en dehors de la racine modifiée, il ne peut pas effectuer d'opérations (lecture/écriture, etc.) de manière malveillante sur ces emplacements.

Sous Linux, l'utilisation d'une monture de liaison est un excellent moyen de remplir l'arborescence chroot. En utilisant cela, vous pouvez extraire des dossiers comme /lib et /usr/lib sans tirer /usr, par exemple. Liez simplement les arborescences de répertoires que vous souhaitez aux répertoires que vous créez dans le répertoire de prison.

97
Ben Combee

"prison chroot" est un terme impropre qui devrait vraiment disparaître, mais les gens continuent de l'utiliser. chroot est un outil qui vous permet de simuler un répertoire sur votre système de fichiers en tant que racine du système de fichiers. Cela signifie que vous pouvez avoir une structure de dossiers comme:

-- foo
    -- bar
    -- baz
-- bazz

Si vous chroot foo et fait ls /, tu verras:

-- bar
-- baz

En ce qui concerne ls (et tous les autres outils que vous exécutez), ce sont les seuls répertoires du système de fichiers. La raison pour laquelle "prison" est un terme impropre est chroot n'est pas destiné à forcer un programme à rester dans ce système de fichiers simulé; un programme qui sait qu'il est dans une "prison" chroot peut assez facilement s'échapper, vous ne devez donc pas utiliser chroot comme mesure de sécurité pour empêcher un programme de modifier des fichiers en dehors de votre système de fichiers simulé

53
Michael Mrozek

Fondamentalement, vous modifiez simplement le répertoire racine de votre environnement. Donc

/

devient

/some-jail/ (or whatever directory you want)

Lorsqu'une application accède à /, elle obtient/une-prison /. De plus, l'application ne peut pas sortir de/some-jail/donc vous savez qu'elle n'accédera à rien d'autre sur votre machine. C'est une manière très simple de dire "hé, vous ne pouvez accéder qu'à ces choses que je vous donne, et vous ne pouvez accéder à rien d'autre sur le système.

12
jacksonh

"Quand et pourquoi pourrais-je l'utiliser?"

Une utilisation consiste à tester des scripts (au démarrage et autres) qui font des références de chemin absolues, ou qui exécutent des commandes que vous voudrez peut-être intercepter et enregistrer (et peut-être sans les opérer) - dans un environnement où vous ne voudriez pas que ces commandes fonctionnent réellement sur votre environnement de course.

Par exemple, j'ai un périphérique intégré fonctionnant sous Linux, je voudrais vérifier le fonctionnement de certains bash sans a) les exécuter sur le vrai périphérique (car j'ai de meilleurs outils sur mon bureau et je ne veux pas briquer le périphérique) b) en cours d'exécution pour de vrai sur mon bureau (car je ne veux pas que mon système de bureau soit foiré)

De plus, vous pouvez ensuite découvrir quelles commandes ou autres fichiers de script sont utilisés car l'exécution se terminera avec une erreur chaque fois qu'il tentera d'exécuter une commande ou un script Shell qui n'est pas présent dans la "prison chroot".

(Bien sûr, pour passer tout le porc, vous pouvez exécuter à l'intérieur de QEMU ou Docker, ou une machine virtuelle, mais cela impliquerait de créer une VM etc., etc. - beaucoup plus de travail)

6
MikeW