it-swarm.it

chroot "jail" - che cos'è e come si usa?

Ho sentito/letto molto sulla prigione chroot sotto Linux, ma non l'ho mai usato (uso Fedora tutti i giorni), quindi cos'è una "prigione" chroot? Quando e perché dovrei usarlo/non usarlo e c'è qualcos'altro che dovrei sapere? Come farei per crearne uno?

107
user119

Una prigione chroot è un modo per isolare un processo e i suoi figli dal resto del sistema. Dovrebbe essere usato solo per processi che non funzionano come root, poiché gli utenti root possono uscire molto facilmente dalla 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. Quindi utilizzare la chiamata di sistema chroot() per modificare la directory principale in modo che si trovi alla base di questo nuovo albero e avviare il processo in esecuzione in quell'ambiente chroot'd. Dal momento che non può effettivamente fare riferimento a percorsi esterni alla radice modificata, non può eseguire operazioni (lettura/scrittura ecc.) In modo dannoso su tali posizioni.

Su Linux, usare un bind mount è un ottimo modo per popolare l'albero chroot. Usando quello, puoi inserire cartelle come /lib e /usr/lib senza tirare /usr, per esempio. Basta associare gli alberi delle directory che si desidera alle directory create nella directory jail.

97
Ben Combee

"Chroot Jail" è un termine improprio che dovrebbe davvero estinguersi, ma la gente continua a usarlo. chroot è uno strumento che ti consente di simulare una directory sul tuo filesystem come root del filesystem. Ciò significa che puoi avere una struttura di cartelle come:

-- foo
    -- bar
    -- baz
-- bazz

Se tu chroot foo e fai ls /, vedrai:

-- bar
-- baz

Per quanto riguarda ls (e tutti gli altri strumenti che esegui), queste sono le uniche directory sul filesystem. Il motivo per cui "jail" è un termine improprio è chroot non è inteso per force un programma per rimanere in quel filesystem simulato; un programma che sa che si trova in un chroot "jail" può scappare abbastanza facilmente, quindi non dovresti usare chroot come misura di sicurezza per impedire a un programma di modificare file al di fuori del tuo filesystem simulato

53
Michael Mrozek

Fondamentalmente stai solo cambiando la directory principale del tuo ambiente. Così

/

diventa

/some-jail/ (or whatever directory you want)

Quando un'applicazione accede/riceveranno/some-jail /. Inoltre l'applicazione non può uscire da/some-jail/quindi sai che non accederà ad altro sul tuo computer. È un modo molto semplice per dire 'hey puoi accedere solo a queste cose che ti sto dando e non puoi accedere a nient'altro sul sistema.

12
jacksonh

"Quando e perché dovrei usarlo?"

Un uso è nel test di script (tempo di avvio e altro) che fanno riferimenti di percorso assoluti o che eseguono comandi che potresti voler intercettare e registrare (e forse no-op) - in un ambiente in cui non vorresti che quei comandi operare effettivamente sul tuo ambiente di corsa.

Ad esempio, ho un dispositivo incorporato che esegue Linux, vorrei controllare il funzionamento di alcuni bash senza a) eseguirlo sul dispositivo reale (poiché ho strumenti migliori sul mio desktop e non voglio murare il dispositivo) b) in esecuzione sul serio sul mio desktop (dal momento che non voglio che il mio sistema desktop sia incasinato)

Inoltre, puoi scoprire quali comandi o altri file di script vengono utilizzati poiché l'esecuzione verrà chiusa con un errore ogni volta che tenta di eseguire un comando o uno script Shell che non è presente nella "jail chroot".

(Ovviamente, per fare tutto il resto, potresti eseguire QEMU o Docker o una VM, ma ciò implicherebbe la creazione di un VM ecc. - molto altro lavoro)

6
MikeW