Come usare il comando chroot in Linux

Contenuti

Un indicatore del terminale sullo schermo di un laptop Linux.

il chroot Il commando può mandarlo in galera, mantieni isolati i tuoi ambienti di sviluppo o test, o semplicemente migliora la sicurezza del tuo sistema. Ti mostriamo il modo più semplice per usarlo.

Cos'è un chroot??

Se provi a misurare l'utilità di un comando, dovresti prestare attenzione alla funzionalità che fornisce e alla sua facilità d'uso. Se è troppo complicato da usare per le persone o troppo lungo per voler provare a usarlo, la funzionalità potrebbe anche essere zero. Se nessuno lo usa, non fornisce alcuna funzionalità.

Nelle discussioni con gli utenti Linux, di persona e sui forum, sembra che il chroot Il comando è considerato difficile da usare o troppo impegnativo e noioso da configurare. Sembra che questa fantastica utility non venga utilizzata quanto dovrebbe.

Insieme a chroot puoi configurare e eseguire programmi interattivi o shell come Bash su un filesystem incapsulato che non può interagire con il tuo filesystem frequente. Tutto all'interno del chroot l'ambiente è racchiuso e contenuto. Niente in chroot L'ambiente può vedere oltre la propria directory root speciale senza ridimensionare i privilegi di root. Ciò ha fatto guadagnare a questo tipo di ambiente il soprannome di a chroot cellula. Il termine “prigione” da non confondere con FreeBSD jail comando, che crea un chroot ambiente è più sicuro dei frequenti chroot ambiente.

Ma, in realtà, c'è un modo molto semplice da usare chroot, cosa studieremo. Stiamo usando normali comandi Linux che funzioneranno su tutte le distro. Alcune distribuzioni Linux hanno strumenti dedicati per la configurazione chroot ambienti, Che cosa debootstrap per Ubuntu, ma qui siamo indipendenti dalla distribuzione.

Quando dovrei chroot??

UN chroot L'ambiente fornisce funzionalità equivalenti a quelle di una macchina virtuale, ma è una soluzione più leggera. Il sistema captive non necessita di un hypervisor per essere installato e configurato, Che cosa VirtualBox oh Gestore di macchine virtuali. Inoltre non è necessario avere un kernel installato sul sistema captive. Il sistema captive condivide il tuo kernel esistente.

In alcuni modi, chroot gli ambienti sono più vicini a contenitori come LXC rispetto alle macchine virtuali. Sono leggeri, veloce da implementare e la creazione e l'attivazione di uno può essere automatizzata. Allo stesso modo in cui i contenitori, un modo conveniente per configurarli è installare una quantità sufficiente del sistema operativo in modo che possa ottenere ciò che è necessario. La domanda “ciò che è necessario” si risponde guardando come utilizzerai il tuo chroot ambiente.

Alcuni usi comuni sono:

Sviluppo software e verifica del prodotto. Gli sviluppatori scrivono software e team di verifica del prodotto (PV) Provalo. Qualche volta, PV rileva problemi che non possono essere replicati sul computer dello sviluppatore. Lo sviluppatore ha tutti i tipi di strumenti e librerie installati sul proprio computer di sviluppo rispetto all'utente medio. (e PV) non avrà. Spesso, nuovo software che funziona per lo sviluppatore ma non per altri risulta utilizzare una risorsa sul PC dello sviluppatore che non era inclusa nella versione di prova del software. chroot consente agli sviluppatori di avere un semplice ambiente prigioniero sul proprio computer in cui possono immergere il software prima di darlo a PV. L'ambiente captive può essere configurato con dipendenze minime richieste dal software.

Ridurre il rischio di sviluppo. Lo sviluppatore può creare un ambiente di sviluppo dedicato in modo che nulla di ciò che accade al suo interno possa rovinare il suo vero PC.

Esecuzione di software obsoleto. A volte devi solo avere una vecchia versione di qualcosa in esecuzione. Se il software precedente ha requisiti in conflitto o incompatibili con la tua versione di Linux, Maggio chroot un ambiente per software problematico.

Ripristino e aggiornamenti del file system: Se un'installazione Linux smette di funzionare, Puoi usare chroot per montare il file system danneggiato su un punto di montaggio su un Live CD. Ciò consente di lavorare sul sistema danneggiato e provare a ripararlo come se fosse montato regolarmente in root. /. Ciò significa che i percorsi dei file previsti all'interno del sistema danneggiato verranno referenziati correttamente dalla directory principale e non dal punto di montaggio del Live CD.. Una tecnica equivalente è stata utilizzata nel post che descrive come migrare il file system Linux da ext2 o ext3 a ext4.

Applicazioni di schermatura Ring. Esegui un server FTP o un altro dispositivo connesso a Internet entro un chroot L'ambiente limita i danni che un attaccante esterno può fare. Questo può essere un passo prezioso per rafforzare la sicurezza del tuo sistema..

IMPARENTATO: Come migrare i file system Ext2 o Ext3 su Ext4 su Linux

Crea un ambiente chroot

Abbiamo bisogno di una directory che funga da directory principale del chroot ambiente. In modo che abbiamo un modo abbreviato di riferirci a quella directory, creeremo una variabile e memorizzeremo il nome della directory in essa. Qui stiamo impostando una variabile per memorizzare un percorso alla directory “radice di prova”. Non importa se questa directory non esiste ancora, lo creeremo presto. Se la directory esiste, dovrebbe essere vuoto.

chr=/home/dave/testroot

Se la directory non esiste, dobbiamo crearlo. Possiamo farlo con questo comando. il -p L'opzione (genitori) assicura che le directory home mancanti vengano create contemporaneamente:

mkdir -p $chr

Abbiamo bisogno di creare directory per contenere le parti del sistema operativo chroot l'ambiente lo richiederà. Creeremo un ambiente Linux minimalista che utilizzi Bash come shell interattiva. Includeremo anche il touch, rm, e ls comandi. Ciò ci consentirà di utilizzare tutti i comandi Bash integrati e touch, rm, e ls. Saremo in grado di creare, elenca e rimuovi i file e usa bash. E, in questo semplice esempio, questo è tutto.

Elenca le directory che devi creare all'interno di {} espansione del corsetto.

mkdir -p $chr/{bidone,libi,lib64}

Ora cambieremo la directory nella nostra nuova directory principale.

cd $chr

Copiamo i binari di cui abbiamo bisogno nel nostro ambiente Linux minimalista dalla sua directory “/ bidone” comune nel ns chroot directory “/ bidone”. il -v L'opzione (dettagliato) fa cp dicci cosa stai facendo mentre esegui ogni azione di copia.

cp -v /bin/{bash,tocco,ls,rm} $chr / am

I file vengono copiati per noi:

Questi binari avranno dipendenze. Dobbiamo scoprire cosa sono e copiare quelli file anche nel nostro ambiente, caso opposto bash, touch, rm, e ls non potrà funzionare. Dobbiamo farlo a turno per ciascuno dei nostri comandi scelti. Per prima cosa faremo a botte. il ldd il comando sarà elenca le dipendenze per noi.

ldd /bin/bash

Le dipendenze sono identificate ed elencate nella finestra del terminale:

Dobbiamo copiare quei file nel nostro nuovo ambiente. Scegliere i dettagli da quell'elenco e copiarli uno allo stesso tempo richiederà molto tempo e sarà soggetto a errori.

fortunatamente, possiamo semi-automatizzarlo. Elencheremo di nuovo le dipendenze, e questa volta formeremo una lista. Quindi esamineremo l'elenco copiando i file.

Qui stiamo usando ldd per elencare le dipendenze e alimentare i risultati tramite una pipe in egrep. Usando egrep è lo stesso che usare grep con il -E (espressioni regolari estese). il -o L'opzione (solo una coincidenza) limita l'output alle parti corrispondenti delle linee. Stiamo cercando file di libreria corrispondenti che terminano con un numero [0-9].

lista="$(ldd /bin/bash | egrep -o '/lib.*.[0-9]')"

Possiamo controllare il contenuto della lista usando echo:

echo $lista

Ora che abbiamo la lista, possiamo percorrerlo con il seguente ciclo, copiando i file uno per uno. Stiamo usando la variabile i per scorrere l'elenco. Per ogni membro della lista, copiamo il file nel nostro chroot directory radice che è il valore contenuto in $chr.

il -v (dettagliato) cause di opzione cp per pubblicizzare ogni copia mentre la realizzi. il --parents L'opzione assicura che le directory home mancanti vengano create sul chroot ambiente.

per io in $lista; do cp -v --parents "$io" "${chr}"; fatto

E questa è la via d'uscita:

Useremo quella tecnica per catturare le dipendenze di ciascuno degli altri comandi. E useremo la tecnica del ciclo per creare la copia effettiva. La buona notizia è che abbiamo solo bisogno di fare una piccola modifica al comando che raccoglie le dipendenze.

Possiamo recuperare il comando dalla nostra cronologia dei comandi premendo il pulsante Up Arrow tasto alcune volte e poi fai la modifica. Il comando loopback non ha bisogno di cambiare affatto.

Qui abbiamo usato il Up Arrow per trovare il comando, e l'abbiamo modificato per dire touch invece di bash.

lista="$(ldd /bin/touch | egrep -o '/lib.*.[0-9]')"

Ora possiamo ripetere esattamente lo stesso comando di ciclo di prima:

per io in $lista; do cp -v --parents "$io" "${chr}"; fatto

E i nostri file vengono copiati per noi:

Ora possiamo modificare il list riga di comando per ls:

lista="$(ldd /bin/ls | egrep -o '/lib.*.[0-9]')"

Ancora, useremo lo stesso comando loop. Non importa quali file ci sono nell'elenco. Lavora alla cieca attraverso l'elenco copiando i file per noi.

per io in $lista; do cp -v --parents "$io" "${chr}"; fatto

E le dipendenze per ls sono copiati per noi:

Modifichiamo il list riga di comando l'ultima volta, per cosa funziona? rm:

lista="$(ldd /bin/ls | egrep -o '/lib.*.[0-9]')"

Abbiamo usato il comando loop copy un'ultima volta:

per io in $lista; do cp -v --parents "$io" "${chr}"; fatto

L'ultima delle nostre dipendenze viene copiata nel nostro chroot ambiente. Finalmente siamo pronti per usare il chroot comando. Questo comando imposta la radice del chroot ambiente e specificare quale applicazione eseguire come shell.

sudo chroot $chr /bin/bash

I nostri chroot l'ambiente ora è attivo. Il prompt della finestra del terminale è cambiato e la shell interattiva è gestita dal bash shell nel nostro ambiente.

Possiamo testare i comandi che abbiamo portato nell'ambiente.

ls
ls /home/dave/Documents

il ls Il comando funziona come ci aspetteremmo quando lo usiamo all'interno dell'ambiente. Quando proviamo ad entrare in una directory al di fuori dell'ambiente, il comando fallisce.

Possiamo usare touch per creare un file, ls per elencarlo, e rm per rimuoverlo.

tocca file_campione.txt
ls
rm sample_file.txt
ls

In ogni caso, possiamo anche usare i comandi integrati forniti dalla shell Bash. Se scrivi help sulla riga di comando, Bash li elencherà per te.

aiuto

Usa exit per uscire da chroot ambiente:

Uscita

Se vuoi rimuovere il chroot ambiente, puoi semplicemente cancellarlo:

rm -r testroot/

Questo rimuoverà ricorsivamente i file e le directory nel chroot ambiente.

Automatizza per comodità

Se stai pensando che chroot Gli ambienti ti possono essere utili, ma sono un po' complicati da configurare, ricorda che puoi sempre eliminare lo stress e il rischio da attività ripetitive attraverso l'uso di alias, funzioni e script.

IMPARENTATO: Come creare alias e funzioni di shell in Linux

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.