GeeksforGeeks

Che cos’è un chroot Jail?

Un chroot su sistemi operativi Unix è un’operazione che modifica la directory radice apparente per il processo in esecuzione corrente e i suoi figli. I programmi eseguiti in questo ambiente modificato non possono accedere ai file all’esterno dell’albero di directory designato. Questo 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 copiare o collegare tutti i file di sistema necessari per l’esecuzione di un processo. Si utilizza quindi la chiamata di sistema chroot per modificare la directory root per essere alla base di questo nuovo albero e avviare il processo in esecuzione in quell’ambiente chroot. Poiché 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 è una 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 non ha praticamente alcun sovraccarico rispetto alle macchine virtuali, che sono una virtualizzazione a livello di applicazione, di conseguenza fornisce un ottimo metodo per creare più istanze isolate sullo stesso hardware. Una macchina virtuale (VM) è un’implementazione software di una macchina e spesso sfruttano ciò che è noto come la virtualizzazione hardware per rendere le immagini virtuali di un sistema operativo funzionante.

Come lo uso?
Il comando di base per creare una jail chroot è il seguente:

 chroot /path/to/new/root command OR chroot /path/to/new/root /path/to/server OR chroot /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.

Passi per creare un mini-jail 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 necessarie potrebbero cambiare. Logicamente, creiamo tutte queste directory per mantenere una copia delle librerie richieste. Per vedere cosa sono necessarie tutte le directory, vedere il Passaggio 4.

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

3.Esegui il comando ‘which’: Esegui il comando ‘which’ per trovare la posizione del comando ls e bash. Dopo aver eseguito quale comando, copia quei binari nella directory ‘ bin ‘ della nostra prigione. Assicurati di non avere nessuno di questi comandi alias. D’ora in poi, ci riferiremo alla nostra directory come directory ‘Jailed’ 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: Affinché gli eseguibili nella nostra directory Jailed funzionino, dobbiamo copiare le librerie/oggetti appropriati nella directory JAILED. Per impostazione predefinita, l’eseguibile esamina le posizioni che iniziano con’/’. Per trovare le dipendenze usiamo 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)

Eseguire 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-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 struttura di directory finale deve essere simile a questa,

 Chroot Jail

5. Sudo chroot: Esegui questo comando per cambiare la radice nella directory JAILED, insieme al percorso della shell. Per impostazione predefinita proverà a caricare la shell ‘/ bin / sh’.

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

Si potrebbe 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, o il file non esiste (che è ovvio), o quando la libreria di caricamento non riesce o non è disponibile. Ricontrolla se le librerie sono nella posizione corretta.

6. Un nuovo guscio deve apparire: è il nostro bash incarcerato. Al momento abbiamo solo 2 comandi installati, bash e ls. Fortunatamente cd e pwd sono comandi incorporati nella shell bash, e quindi puoi usarli anche tu.

Vagare per la directory, provare ad accedere ‘cd/../ ‘o qualcosa di simile. Prova a rompere la prigione, probabilmente non sarai in grado di farlo. 🙂

Per uscire dal carcere,

 $ exit

Il più importante e interessante è che, quando si esegue,

 $ ps aux

e trovare il processo, vi accorgerete che c’è un solo processo,

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

è Interessante notare che, i processi in carcere shell esegui come un semplice processo figlio di questa shell. Tutti i processi all’interno dell’ambiente JAILED, sono solo semplici processi a livello utente nel sistema operativo host e sono isolati dagli spazi dei nomi forniti dal kernel, quindi c’è un sovraccarico minimo e come ulteriore vantaggio otteniamo l’isolamento.

Una copia di jailed-bash-directory spiegata qui può essere scaricata da qui.

Allo stesso modo, è possibile aggiungere più comandi a voi ambiente imprigionato virtuale. Per aggiungere programmi più complessi, potrebbe essere necessario creare più directory, come ‘/proc’ e ‘/dev’. Questi aumentano la complessità del processo. Speriamo che non lo richiediamo per il nostro scopo.

Questo è tutto ciò che devi sapere su chroot e il jailing delle directory. Il nostro obiettivo finale è capire cosa sono i contenitori e come servizi come AWS (Amazon Web Services), Google Cloud e Docker sono in grado di fornire così tante istanze virtuali di sistemi operativi on demand. Inoltre, in che modo sys-admin esegue più server Web per più domini su una singola macchina fisica. Questo è stato solo un passo verso la comprensione 🙂

  • 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

Circa l’Autore:
Pinkesh Badjatiya proviene da IIIT Hyderabad. Lui è un geek a cuore con ampi progetti vale la pena cercare. Il suo lavoro di progetto può essere visto qui.

Se anche voi volete mostrare il vostro blog qui, si prega di consultare GBlog per la scrittura blog ospite su GeeksforGeeks.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.