Un chroot sur les systèmes d'exploitation UNIX est une opération qui modifie le répertoire racine apparent pour le processus de fonctionnement actuel et ses enfants. Les programmes qui s'exécutent dans cet environnement modifié ne peuvent pas accéder aux fichiers en dehors de l'arborescence du répertoire désigné. Cela limite essentiellement leur accès à un arbre d'annuaire et il tire donc le nom de «prison de chroot».
paiement dans git
L'idée est que vous créez une arborescence de répertoire où vous copiez ou liez dans tous les fichiers système nécessaires à un processus à exécuter. Vous utilisez ensuite l'appel du système Chroot pour modifier le répertoire racine pour être à la base de cette nouvelle arbre et démarrer le processus en cours d'exécution dans cet environnement chrooté. Comme il ne peut pas réellement référence à des chemins à l'extérieur de la racine modifiée, il ne peut pas lire ou écrire avec malveillance à ces emplacements.
Pourquoi est-il nécessaire et en quoi est-il différent des machines virtuelles?
Ceci est une virtualisation au niveau du système opérationnel et est souvent utilisé à 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 pas de frais généraux par rapport aux machines virtuelles qui sont une virtualisation de la couche d'application en conséquence, il fournit 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 exploite souvent ce qui est connu sous le nom de virtualisation matérielle pour rendre une image virtuelle d'un système d'exploitation de travail.
Comment utiliser la prison de chroot
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 [options] /path/to/new/root /path/to/server
Remarque: seul un utilisateur racine / privilégié peut utiliser l'appel du système de chroot. Un utilisateur non privilégié avec l'accès à la commande peut contourner la prison de chroot.
Étapes pour créer un mini-jail pour la commande «bash» et «ls»
1. Créez un répertoire qui agira comme la racine de la commande.
$ mkdir jailed
$ cd jailed
2. Créez tous les répertoires essentiels pour que la commande s'exécute: 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 ce que tous les répertoires sont nécessaires, voir l'étape 4.
$ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu
3.Run la commande «qui»: Exécutez la commande «qui» pour trouver l'emplacement de la commande LS et BASH. Après avoir exécuté qui commandant ces binaires dans le répertoire «bin» de notre prison. Assurez-vous que vous n'avez aucune de ces commandes aliasées. À partir de maintenant, nous référerions notre répertoire comme 'Emprisonné' Répertoire pour la 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 les exécutables de notre Emprisonné Répertoire pour travailler, 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 des 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-linux-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 du répertoire final doit être similaire à ce
5. Sudo Chroot: Exécutez cette commande pour changer la racine en répertoire emprisonné avec le chemin de la coquille. Par défaut, il essaiera de charger le shell '/ bin / sh' Shell.
$ cd ..
$ sudo chroot jailed /bin/bash
Vous pourriez faire face à 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) ou lorsque la bibliothèque de chargement échoue ou n'est pas disponible. Vérifiez si les bibliothèques sont dans le bon emplacement.
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 Bash Shell 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. :)
Sortir de la prison
$ exit
La partie la plus importante et la plus intéressante est que lorsque vous courez
$ ps aux
et trouver le processus que 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
Il est intéressant de noter que les processus dans le coquille emprisonnés fonctionnent comme un simple processus d'enfant de cette coquille. Tous les processus à l'intérieur de l'environnement emprisonné ne sont que un processus de niveau utilisateur simple 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 des frais généraux minimaux et, comme avantage supplémentaire, nous obtenons l'isolement.
chaîne comparer à java
De même, vous pouvez ajouter plus de commandes à votre environnement prison virtuel. 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 le chroot et la prison des répertoires. Notre objectif ultime est de comprendre ce que sont les conteneurs et comment sont des services comme AWS (Amazon Web Services) Google Cloud et Docker capables de fournir autant d'instances virtuelles de systèmes d'exploitation à la demande. Aussi comment SYS-ADMIN exécute plusieurs serveurs Web pour plusieurs domaines sur une seule machine physique, ce n'était qu'une étape vers la compréhension