Accesso all'ambiente chroot
È necessario che il programmatore di sistema ponga più attenzione di quanta ne usa normalmente nella scrittura del codice di un normale programma, e che lo faccia anche nei riguardi di quei particolari che solitamente trascura, e che in determinate situazioni possono rivelarsi pericolose falle nella sicurezza o nella stabilità del proprio sistema.
La possibilità di imprigionare l'esecuzione di un'applicazione in una sorta di box di sicurezza come quello dei bambini, consente di eseguire tutte le operazioni necessarie allo svolgimento delle attività dell'applicazione, senza per questo rendere il sistema vulnerabile. L'ambiente chroot in parole molto semplici realizza questo.
Il termine chroot è la contrazione di change root; si tratta di un metodo di sicurezza che isola i limiti operativi di un'applicazione, circoscrivendo la directory principale del sistema operativo in cui sono contenute tutte le altre directory. Se un'applicazione compromessa è eseguita in un ambiente chroot non potrà uscire dal perimetro; potrà cambiare il contenuto dei file del programma stesso, ma senza poter accedere ad altre risorse.
All'atto pratico chroot serve per entrare in una directory provvista di un filesystem linux e sfruttarla come una vera e propria directory root, allo scopo di eseguire programmi garantendo un ambiente sicuro e adatto a risolvere i problemi.
È il momento di accedere adesso all'ambiente chroot per iniziare a costruire ed installare il sistema LFS definitivo. Come utente root, dobbiamo eseguire il comando seguente per entrare nell'ambiente che al momento è popolato solamente dai tool provvisori che abbiamo costruito nella sezione precedente:
chroot "$LFS" /tools/bin/env -i \ HOME=/root \ TERM="$TERM" \ PS1='\u:\w\$ ' \ PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \ /tools/bin/bash --login +h
L'opzione -i
data al comando env cancellerà tutte le variabili dell'ambiente chroot. Dopo questo, solo le variabili HOME, TERM, PS1, PATH
verranno nuovamente definite.
Il costrutto TERM=$TERM
imposterà la variabile TERM
all'interno di chroot dandole lo stesso valore che ha fuori da chroot. Questa variabile è necessaria perché programmi come vim e less possano funzionare correttamente.
Se sono necessarie altre variabili, come CFLAGS
o CXXFLAGS
, questo è il momento buono per definirle di nuovo.
D'ora in poi non ci sarà più bisogno di usare la variabile LFS
, perché tutto il lavoro sarà ristretto al file system LFS. Ciò perché alla shell Bash viene detto che adesso $LFS
è la directory root (/).
Da notare come /tools/bin
sia all'ultimo posto nel PATH. Questo significa che un determinato tool provvisorio non verrà più utilizzato una volta che sarà installata la sua versione definitiva. Questo accade perché la shell non ricorda le locazioni dei binari eseguiti, per questa ragione l'hashing viene disabilitato passando l'opzione +h
a bash.
Da notare che il prompt bash risponderà I have no name!
Questo è normale poiché non è stato ancora creato il file /etc/passwd.
È importante che tutti i comandi nel resto di questa sezione e nelle seguenti siano avviati dall'interno dell'ambiente chroot. Se si dovesse lasciare questo ambiente per qualsiasi ragione, ad esempio dopo un riavvio, assicurarsi che i file system virtuali del kernel siano montati come spiegato in Preparazione dei File System Virtuali del Kernel. Un modo per effettuare la verifica potrebbe essere l'esecuzione del comando:
mount |grep lfs
che dovrebbe dare un output simile:
udev on /mnt/lfs/dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=216569,mode=755) devpts on /mnt/lfs/dev/pts type devpts (rw,relatime,gid=5,mode=620,ptmxmode=000) proc on /mnt/lfs/proc type proc (rw,relatime) sysfs on /mnt/lfs/sys type sysfs (rw,relatime)
Altrimenti occorrerà rieseguire:
mount -v --bind /dev $LFS/dev mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620 mount -vt proc proc $LFS/proc mount -vt sysfs sysfs $LFS/sys
L'uscita regolare da chroot dovrebbe essere eseguita con il comando:
exit
Se si vuole rientrare in un secondo tempo, senza che ci sia stato un riavvio, rieseguire il comando chroot
iniziale.
Si può resistere all'invasione degli eserciti; non si resiste all'invasione delle idee.
Victor Hugo