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


99

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?

chroot 

le risposte qui sembrano essere brevi sulla "come si usa la categoria?" :(
Alexander Mills,

Risposte:


88

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 chroot()chiamata di sistema 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. 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. Usandolo, puoi inserire cartelle come /libe /usr/libmentre non ci sei /usr, per esempio. Basta associare gli alberi delle directory che si desidera alle directory create nella directory jail.


10
La tua risposta è fantastica Una cosa da menzionare, tuttavia, chroot non è un meccanismo sicuro (un processo può uscire dalla prigione se diventa root e talvolta anche se non lo è). Le jail reali possono essere applicate con jail freebsd e simili. Guarda questo en.wikipedia.org/wiki/FreeBSD_jail#Similar_technologies
nc3b

3
Il processo di installazione di Gentoo usa un chroot in modo da poter configurare il tuo nuovo sistema operativo prima di aver installato GRUB e il kernel Linux, ecc.
Chris Huang-Leaver

3
Dai un'occhiata a Firejail per una shell jailed completa usando tutti gli spazi dei nomi di Linux. Sono disponibili pacchetti deb e rpm. In generale, consiglierei il kernel 3.18 o successivo, tuttavia, a causa di un problema noto con la possibilità di installare un nuovo software o eseguire la gestione degli utenti quando firejailè in esecuzione.
CivFan,

Ottima risposta! - anche se alcuni esempi di base sarebbero belli da vedere.
Gabriel Staples,

Un utente in jail chroot può chiamare file binari situati sotto /binquello installato dall'utente root? @Ben Combee
alper,

50

"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 lo fai chroot fooe 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 chrootnon è destinato a forzare un programma a rimanere in quel filesystem simulato; un programma che sa che è in una "prigione" chroot può facilmente scappare, quindi non dovresti usare chrootcome misura di sicurezza per impedire a un programma di modificare i file al di fuori del tuo filesystem simulato


16
Sarebbe utile avere un esempio di come fuggire da una chroot"prigione". Il caso che ho visto richiede l'escalation ai privilegi di root. È difficile impedire a un processo di passare ai privilegi di root?
CivFan,

4
È ancora "confinamento", quindi "carcere" è una buona scorciatoia. Il "campo di contenimento di livello 3" sarebbe migliore ?!
MikeW,

4
Il termine deriva dalle carceri di FreeBSD. Le jail sono costruite su chroot. Jail era destinato a risolvere i problemi di sicurezza chrootno. Per questo motivo le persone spesso si confondono chroote jailssignificano la stessa cosa. Non lo fanno. Si dice che il termine "prigione" sia stato coniato da Bill Cheswick quando ha creato un honeypot per catturare un cracker: csrc.nist.gov/publications/secpubs/berferd.pdf
BugHunterUK

Quindi cosa fai, non sto usando chroot jailuna buona idea nel mio caso ?
Shafizadeh,

10

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.


6

"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".

(Naturalmente, per fare tutto il resto, potresti correre all'interno di QEMU o Docker, o una VM, ma ciò implicherebbe la creazione di un'immagine VM ecc. - molto più lavoro)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.