GeeksforGeeks

Qu’est-ce qu’une prison chroot ?

Un chroot sur les systèmes d’exploitation Unix est une opération qui modifie le répertoire racine apparent du processus en cours d’exécution et de ses enfants. Les programmes qui s’exécutent dans cet environnement modifié ne peuvent pas accéder aux fichiers en dehors de l’arborescence des répertoires désignés. Cela limite essentiellement leur accès à une arborescence de répertoires et leur donne ainsi le nom de « prison de chroot ».

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 pour qu’il se trouve à la base de cette nouvelle arborescence et lancer le processus en cours d’exécution dans cet environnement chrooté. Comme il ne peut pas réellement référencer les chemins en dehors de la racine modifiée, il ne peut pas lire ou écrire de manière malveillante dans ces emplacements.

Pourquoi est-il nécessaire et en quoi est-il différent des machines virtuelles?
Il s’agit d’une virtualisation au niveau du système d’exploitation et est souvent utilisée à la place des machines virtuelles pour créer plusieurs instances isolées du système d’exploitation hôte. Il s’agit d’une virtualisation au niveau du noyau et n’a pratiquement aucune surcharge par rapport aux machines virtuelles, qui sont une virtualisation de la couche application, ce qui constitue une très bonne méthode pour créer plusieurs instances isolées sur le même matériel. Une machine virtuelle (VM) est une implémentation logicielle d’une machine et ils exploitent souvent ce que l’on appelle la virtualisation matérielle pour rendre des images virtuelles d’un système d’exploitation fonctionnel.

Comment l’utiliser?
La commande de base pour créer une prison de chroot est la suivante:

 chroot /path/to/new/root command OR chroot /path/to/new/root /path/to/server OR chroot /path/to/new/root /path/to/server

Note: Seul un utilisateur root/privilégié peut utiliser l’appel système chroot. Un utilisateur non privilégié ayant accès à la commande peut contourner la prison de chroot.

Étapes pour créer une mini-prison pour la commande ‘bash’ et ‘ls’

1. Créez un répertoire qui servira de racine à la commande.

 $ mkdir jailed $ cd jailed

2. Créez tous les répertoires essentiels à l’exécution de la commande : Selon votre système d’exploitation, les répertoires requis peuvent changer. Logiquement, nous créons tous ces répertoires pour conserver une copie des bibliothèques requises. Pour voir quels sont tous les répertoires requis, reportez-vous à l’étape 4.

 $ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu

3.Exécutez la commande ‘which’ : Exécutez la commande ‘which’ pour trouver l’emplacement de la commande ls et bash. Après avoir exécuté quelle commande, copiez ces binaires dans le répertoire ‘bin’ de notre prison. Assurez-vous qu’aucune de ces commandes n’est alias. À partir de maintenant, nous appellerions notre répertoire « Emprisonné » pour plus de commodité.

 $ unalias ls # Required only if you have aliased ls command $ unalias bash # Required only if you have aliased bash command $ cp $(which ls) ./bin/ $ cp $(which bash) ./bin/

4. Copier les bibliothèques /objets appropriés: Pour que les exécutables de notre répertoire Emprisonné fonctionnent, nous devons copier les bibliothèques / objets appropriés dans le répertoire EMPRISONNÉ. Par défaut, l’exécutable regarde les emplacements commençant par ‘/’. Pour trouver les dépendances, nous utilisons la commande ‘ldd’

$ ldd $(which bash) linux-vdso.so.1 => (0x00007ffc75dd4000) libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f6577768000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6577564000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f657719a000) /lib64/ld-linux-x86-64.so.2 (0x000055979f3fd000)

Exécutez les commandes suivantes pour créer les répertoires appropriés.

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

De même pour ls,

$ ldd $(which ls) linux-vdso.so.1 => (0x00007fff4f05d000) libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f9a2fd07000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9a2f93e000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f9a2f6cd000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9a2f4c9000) /lib64/ld-liux-x86-64.so.2 (0x000055e836c69000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9a2f2ac000)
$ cp /lib/x86_64-linux-gnu/libselinux.so.1 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libpcre.so.3 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libdl.so.2 lib/x86_64-linux-gnu/$ cp /lib64/ld-linux-x86-64.so.2 lib64/$ cp /lib/x86_64-linux-gnu/libpthread.so.0 lib/x86_64-linux-gnu/

La structure de répertoire finale doit être similaire à celle-ci,

 Chroot Jail

5. Sudo chroot : Exécutez cette commande pour changer la racine du répertoire EMPRISONNÉ, ainsi que le chemin d’accès au shell. Par défaut, il essaiera de charger le shell ‘/bin/sh’.

 $ cd .. $ sudo chroot jailed /bin/bash

Vous pouvez rencontrer cette erreur lors de l’exécution de la commande chroot,

chroot: failed to run command `/bin/bash': No such file or directory

Cela peut être dû à 2 raisons, soit le fichier n’existe pas (ce qui est évident), soit lorsque la bibliothèque de chargement échoue ou n’est pas disponible. Vérifiez si les bibliothèques sont à l’emplacement correct.

6. Une nouvelle coquille doit apparaître: c’est notre bash emprisonné. Nous n’avons actuellement que 2 commandes installées, bash et ls. Heureusement, cd et pwd sont des commandes intégrées dans le shell bash, et vous pouvez donc les utiliser également.

Parcourez le répertoire, essayez d’accéder à ‘cd/../’ ou quelque chose de similaire. Essayez de briser la prison, vous ne pourrez probablement pas le faire. 🙂

Pour sortir de prison,

 $ exit

La partie la plus importante et la plus intéressante est que, lorsque vous courez,

 $ ps aux

et trouvez le processus, vous constaterez qu’il n’y a qu’un seul processus,

root 24958 … 03:21 0:00 /usr/bin/sudo -E chroot jailed/ /bin/bash

Fait intéressant, les processus dans le shell emprisonné s’exécutent comme un simple processus enfant de ce shell. Tous les processus à l’intérieur de l’environnement EMPRISONNÉ ne sont que de simples processus au niveau de l’utilisateur dans le système d’exploitation hôte et sont isolés par les espaces de noms fournis par le noyau, il y a donc une surcharge minimale et comme avantage supplémentaire, nous obtenons l’isolement.

Une copie du répertoire jailed-bash expliqué ici peut être téléchargée à partir d’ici.

De même, vous pouvez ajouter plus de commandes à votre environnement virtuel emprisonné. Pour ajouter des programmes plus complexes, vous devrez peut-être créer plus de répertoires, comme ‘/proc’ et ‘/dev’. Ceux-ci augmentent la complexité du processus. J’espère que nous n’en avons pas besoin pour notre objectif.

C’est tout ce que vous devez savoir sur chroot et l’emprisonnement des répertoires. Notre objectif ultime est de comprendre ce que sont les conteneurs et comment des services comme AWS (Amazon Web Services), Google Cloud et Docker sont-ils capables de fournir autant d’instances virtuelles de systèmes d’exploitation à la demande. En outre, comment sys-admin exécute-t-il plusieurs serveurs Web pour plusieurs domaines sur une seule machine physique. Ce n’était qu’une étape vers la compréhension 🙂

  • https://help.ubuntu.com/community/DebootstrapChroot
  • https://wiki.archlinux.org/index.php/Install_from_existing_Linux
  • http://serverfault.com/questions/162362/chroot-fails-cannot-run-command-bin-bash-no-such-file-or-directory
  • https://wiki.archlinux.org/index.php/change_root

À propos de l’auteur:
Pinkesh Badjatiya est originaire de IIIT Hyderabad. C’est un geek dans l’âme avec de nombreux projets qui valent la peine d’être recherchés. Son travail de projet peut être vu ici.

Si vous souhaitez également présenter votre blog ici, veuillez consulter GBlog pour la rédaction de blogs invités sur GeeksforGeeks.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.