logo

Linux Virtualization - CHROOT PRIPALE

Un Chroot sui sistemi operativi UNIX è un'operazione che modifica la directory di radice apparente per l'attuale processo di esecuzione e i suoi figli. I programmi eseguiti in questo ambiente modificato non possono accedere ai file al di fuori dell'albero della directory designata. Ciò limita essenzialmente il loro accesso a un albero di directory e quindi ottengono il nome "Chroot Jail".

L'idea è di creare un albero di directory in cui si copia o si collega in tutti i file di sistema necessari per l'esecuzione di un processo. Quindi usi la chiamata del sistema Chroot per modificare la directory di root per essere alla base di questo nuovo albero e avviare il processo in esecuzione in quell'ambiente chrooted. Dal momento che non può effettivamente fare riferimento a percorsi al di fuori della radice modificata, non può leggere o scrivere maliziosamente in quelle posizioni.



Perché è richiesto e in che modo è diverso dalle macchine virtuali?

Questa è virtualizzazione a livello di sistema operativo e viene spesso utilizzata al posto delle macchine virtuali per creare più istanze isolate del sistema operativo host. Questa è una virtualizzazione a livello di kernel e praticamente non ha spese generali rispetto alle macchine virtuali che sono la virtualizzazione a strato di applicazione, di conseguenza, fornisce un metodo molto buono per creare più istanze isolate sullo stesso hardware. Una macchina virtuale (VM) è un'implementazione del software di una macchina e spesso sfruttano ciò che è noto come virtualizzazione hardware per rendere un'immagine virtuale di un sistema operativo di lavoro.

Come usare la prigione di Chroot

Il comando di base per creare una prigione di Chroot è il seguente:

 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: solo un utente root/privilegiato può utilizzare la chiamata di sistema Chroot. Un utente non privilegiato con l'accesso al comando può bypassare la prigione di Chroot.



Passaggi per creare un mini-maschi per il comando "bash" e "LS"


1. Creare una directory che fungerà da radice del comando.

 $ mkdir jailed  
$ cd jailed

2. Creare tutte le directory essenziali per l'esecuzione del comando: A seconda del sistema operativo, le directory richieste possono cambiare. Logicamente creiamo tutte queste directory per conservare una copia delle librerie richieste. Per vedere cosa sono richiesti tutte le directory, vedi il passaggio 4.

conversione da stringa Java a numero intero
 $ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu

3.run il comando "quale": Esegui il comando "quale" per trovare la posizione di LS e Bash Command. Dopo aver eseguito il comando di quei binari nella directory "bin" della nostra prigione. Assicurati di non avere nessuno di questi comandi alias. D'ora in poi ci riferiremmo alla nostra directory come 'Incarcerato' Directory per comodità.



 $ 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. Copia librerie/oggetti appropriati : Per gli eseguibili nel nostro Incarcerato Directory al lavoro dobbiamo copiare le librerie/oggetti appropriati nella directory incarcerata. Per impostazione predefinita, l'eseguibile esamina le posizioni che iniziano con '/'. Per trovare le dipendenze, utilizziamo il comando "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)

Esegui i seguenti comandi per creare directory appropriate.

$ 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/

Allo stesso modo per 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 struttura della directory finale deve essere simile a questa

panda iterrows

Prigione di chroot' title=

5. Sudo Chroot: Esegui questo comando per cambiare la radice nella directory incarcerata insieme al percorso verso la shell. Per impostazione predefinita proverà a caricare shell '/bin/sh'.

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

Potresti affrontare questo errore durante l'esecuzione del comando Chroot 

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

Ciò può essere dovuto a 2 motivi per cui il file non esiste (il che è ovvio) o quando la libreria di caricamento fallisce o non è disponibile. Controllare il doppio se le librerie sono in posizione corretta.

6. Un nuovo guscio deve apparire: È il nostro Bash incarcerato. Attualmente abbiamo solo 2 comandi installati Bash e LS. Fortunatamente CD e PWD sono comandi incorporati in Bash Shell e quindi puoi usarli.

Vagare attorno alla directory Prova ad accedere a 'CD /../' o qualcosa di simile. Prova a rompere la prigione probabilmente non sarai in grado di farlo. :)

Per uscire dalla prigione 

 $ exit

La parte più importante e interessante è che quando corri 

 $ ps aux

e trova il processo che scoprirai che esiste un solo processo 

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

È interessante notare che i processi nella shell incarcerati si svolgono come un semplice processo per bambini di questa conchiglia. Tutti i processi all'interno dell'ambiente incarcerato sono solo un semplice processo a livello di utente nel sistema operativo host e sono isolati dagli spazi dei nomi forniti dal kernel, quindi esiste un sovraccarico minimo e come ulteriore vantaggio otteniamo l'isolamento.

contiene il metodo Java

Allo stesso modo puoi aggiungere più comandi all'ambiente virtuale incarcerato. Per aggiungere programmi più complessi, potresti aver bisogno di creare più directory come "/proc" e "/dev". Questi aumentano la complessità del processo. Speriamo di non averlo bisogno per il nostro scopo.

Questo è tutto ciò che devi sapere su Chroot e sul carcere delle directory. Il nostro obiettivo finale è capire cosa sono i contenitori e come sono servizi come AWS (Amazon Web Services) Google Cloud e Docker in grado di fornire così tanti istanze virtuali di sistemi operativi su richiesta. Inoltre come si esegue più server Web per più domini su una singola macchina fisica. Questo è stato solo un passo verso la comprensione