Una crida als sistemes operatius UNIX és una operació que canvia el directori d’arrel aparent per al procés de funcionament actual i els seus fills. Els programes que s’executen en aquest entorn modificat no poden accedir als fitxers fora de l’arbre del directori designat. Això limita essencialment el seu accés a un arbre de directori i, per tant, obtenen el nom de "presó de chroot".
La idea és que creeu un arbre de directori on copieu o enllaceu a tots els fitxers del sistema necessaris perquè s’executin un procés. A continuació, utilitzeu la trucada del sistema de chroot per canviar el directori arrel per estar a la base d’aquest nou arbre i iniciar el procés que s’executa en aquest entorn cridat. Com que en realitat no es pot fer referència a les rutes fora de l'arrel modificada, no es pot llegir ni escriure maliciosament a aquestes ubicacions.
Per què es requereix i en què es diferencia de les màquines virtuals?
Es tracta de la virtualització a nivell del sistema operatiu i s’utilitza sovint en lloc de màquines virtuals per crear múltiples instàncies aïllades del sistema operatiu amfitrió. Es tracta d’una virtualització a nivell del nucli i pràcticament no té cap sobrecàrrega en comparació amb les màquines virtuals que són la virtualització de la capa d’aplicació Com a resultat, proporciona un mètode molt bo per crear múltiples instàncies aïllades al mateix maquinari. Una màquina virtual (VM) és una implementació de programari d’una màquina i sovint exploten el que es coneix com a virtualització de maquinari per fer una imatge virtual d’un sistema operatiu de treball.
Com utilitzar la presó de chroot
L’ordre bàsic per crear una presó de chroot és la següent:
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
Nota: només un usuari arrel/privilegiat pot utilitzar la trucada del sistema de chroot. Un usuari no privilegiat amb l'accés a l'ordre pot obviar la presó de chroot.
Passos per crear un mini-jail per a la comanda "bash" i "LS"
1. Creeu un directori que actuï com a arrel de la comanda.
$ mkdir jailed
$ cd jailed
2. Creeu tots els directoris essencials perquè la comanda s’executi: Segons el vostre sistema operatiu, els directoris requerits poden canviar. Lògicament creem tots aquests directoris per mantenir una còpia de les biblioteques obligatòries. Per veure què cal tots els directoris, vegeu el pas 4.
$ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu3.Roneu l'ordre "que": Executeu l'ordre "que" per trobar la ubicació de LS i Bash Command.After Execut que comandant aquests binaris al directori "bin" de la nostra presó. Assegureu -vos que no tingueu cap d'aquestes ordres alias. A partir d’ara ens referiríem al nostre directori com "Empresonat" Directori per comoditat.
$ 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. Copieu les biblioteques/objectes adequats : Per als executables del nostre Empresonat Directori per treballar hem de copiar les biblioteques/objectes adequats al directori empresonat. De manera predeterminada, el executable mira les ubicacions a partir de '/'. Per trobar les dependències, utilitzem la comanda "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)
Executeu les ordres següents per crear directoris adequats.
$ 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 la mateixa manera per a LS
java per descansar
$ 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/
L’estructura del directori final ha de ser similar a aquesta

5. sudo chroot: Executeu aquesta ordre per canviar l'arrel al directori empresonat juntament amb el camí cap a la closca. De manera predeterminada, intentarà carregar '/bin/sh' shell.
$ cd ..
$ sudo chroot jailed /bin/bash
Podeu afrontar aquest error mentre s'executa l'ordre chroot
chroot: failed to run command `/bin/bash': No such file or directoryAixò pot ser degut a dues raons per les quals el fitxer no existeix (cosa que és evident) o quan la biblioteca de càrrega falla o no està disponible. Comproveu doble si les biblioteques estan en una ubicació correcta.
6. Cal aparèixer una nova closca: És el nostre Bash empresonat. Actualment només tenim 2 ordres instal·lades Bash i LS. Afortunadament, CD i PWD són ordres integrades a Bash Shell i, per tant, també podeu utilitzar -les.
Recorre el directori Proveu d'accedir a "CD /../" o alguna cosa similar. Intenta trencar la presó probablement no ho podràs. :
Per sortir de la presó
$ exitLa part més important i interessant és que quan corre
$ ps auxi cerqueu el procés que trobareu que només hi ha un procés
root 24958 … 03:21 0:00 /usr/bin/sudo -E chroot jailed/ /bin/bashCuriosament els processos de la shell empresonat es van executar com un procés simple infantil d'aquesta closca. Tots els processos dins de l’entorn empresonat són només un procés de nivell d’usuari senzill al sistema operatiu host i estan aïllats pels espais de nom proporcionats pel nucli, per la qual cosa hi ha una despesa mínima i com a benefici afegit obtenim aïllament.
De la mateixa manera, podeu afegir més ordres a l’entorn empresonat virtual. Per afegir programes més complexos, potser haureu de crear més directoris com ara '/proc' i '/dev'. Aquests augmenten la complexitat del procés. Tant de bo no ho necessitem per al nostre propòsit.
Això és tot el que heu de saber sobre Chroot i la presó dels directoris. El nostre objectiu final és entendre què són els contenidors i com són els serveis com AWS (Amazon Web Services) Google Cloud i Docker capaços de proporcionar tantes instàncies virtuals de sistemes operatius sota demanda. També com funciona Sys-Admin diversos serveis web per a diversos dominis en una sola màquina física. Aquest va ser només un pas per comprendre-ho