“prison” chroot - de quoi s'agit-il et comment l'utiliser?

99

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 devrais-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?


la source
les réponses ici semblent être courtes sur la "comment puis-je l'utiliser?" :(
Alexander Mills

Réponses:

88

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 de la prison très facilement.

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' chroot()appel système pour modifier le répertoire racine afin qu'il se trouve à la base de cette nouvelle arborescence et pour démarrer le processus exécuté dans cet environnement chroot'd. Comme 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’un support de liaison est un excellent moyen de renseigner l’arbre de chroot. En utilisant cela, vous pouvez , par exemple , accéder à des dossiers tels que /libet /usr/libsans y accéder /usr. Liez simplement les arborescences de répertoires de votre choix aux répertoires que vous avez créés dans le répertoire jail.

Ben Combee
la source
10
Votre réponse est géniale. Une chose à mentionner cependant, chroot n'est pas un mécanisme sécurisé (un processus peut sortir de la prison s'il devient root et parfois même si ce n'est pas le cas). De vraies prisons peuvent être appliquées avec des prisons freebsd et autres. Voir ceci en.wikipedia.org/wiki/FreeBSD_jail#Similar_technologies
nc3b
3
Le processus d'installation de Gentoo utilise un chroot afin que vous puissiez configurer votre nouveau système d'exploitation avant d'installer GRUB et le noyau Linux, etc.
Chris Huang-Leaver
3
Jetez un coup d'œil à firejail pour un shell jailed complet utilisant tous les espaces de noms Linux. Des packages deb et rpm sont disponibles. En règle générale, je recommanderais le noyau 3.18 ou une version ultérieure, en raison d'un problème connu lié à l' impossibilité d'installer un nouveau logiciel ou d'effectuer la gestion des utilisateurs lorsqu'il firejailest en cours d'exécution.
CivFan
Excellente réponse! Bien que quelques exemples de base seraient bien à voir.
Gabriel Staples
Un utilisateur sous chroot jail peut-il appeler des fichiers binaires situés sous /binqui est installé par l'utilisateur root? @ Ben Combee
Alper
50

"prison de chroot" est un terme impropre qui devrait vraiment disparaître, mais les gens continuent à l'utiliser. chrootest 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 dossier du type:

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

Si vous le chroot foofaites ls /, vous verrez:

-- bar
-- baz

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

Michael Mrozek
la source
16
Il serait utile d'avoir un exemple montrant comment échapper à une chroot"prison". Le cas que j'ai vu nécessite l'ascension des privilèges root. Est-il difficile d'empêcher un processus de passer aux privilèges root?
CivFan
4
C'est toujours "confinement", donc "prison" est un bon raccourci. Le "champ de confinement de niveau 3" serait-il meilleur?!
MikeW
4
Le terme vient des prisons FreeBSD. Jails est construit sur chroot. Jails ne devait pas résoudre les problèmes de sécurité chroot. Pour cette raison, les gens se confondent souvent chrootet jailsveulent dire la même chose. Ils ne le font pas. Le terme "prison" aurait été inventé par Bill Cheswick quand il aurait mis en place un pot de miel pour attraper un cracker: csrc.nist.gov/publications/secpubs/berferd.pdf
BugHunterUK le
Alors, n'est-ce pas, utiliser chroot jailune bonne idée dans mon cas ?
Shafizadeh
10

En gros, vous ne faites que changer le répertoire racine de votre environnement. Alors

/

devient

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

Lorsqu'une application accède à / ils obtiendront / une-prison /. De plus, l'application ne peut pas sortir de / some-jail /, vous savez donc qu'elle ne pourra accéder à rien d'autre sur votre ordinateur. C’est un moyen très simple de dire: «Hé, vous ne pouvez accéder qu’à ce que je vous donne, et vous ne pouvez accéder à rien d’autre sur le système.

Jackson
la source
6

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

Une utilisation est de tester des scripts (heure de démarrage et autres) qui font des références de chemin absolues, ou qui exécutent des commandes que vous pouvez vouloir intercepter et journaliser (et peut-être ne les optez pas) - dans un environnement où vous ne voudriez pas que ces commandes fonctionne 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) l’exécuter sur le périphérique réel (car j’ai de meilleurs outils sur mon bureau et que je ne souhaite pas maquiller le périphérique) b) en cours d’exécution pour de vrai sur mon bureau (puisque je ne veux pas que mon système de bureau soit foiré)

En outre, vous pouvez alors découvrir quelles commandes ou autres fichiers de script sont utilisés, car l'exécution se termine avec une erreur chaque fois qu'elle tente d'exécuter un script de commande ou un shell qui n'est pas présent dans la "prison chroot".

(Bien sûr, pour tout faire, vous pouvez utiliser QEMU, Docker ou une machine virtuelle, mais cela impliquerait de créer une image de machine virtuelle, etc. - beaucoup plus de travail)

MikeW
la source