Encrypted Root Filesystem HOWTO Preparazione del
Transcript
Encrypted Root Filesystem HOWTO Preparazione del
Encrypted Root Filesystem HOWTO Christophe Devine Revision History Revision v1.2 20040801 Revised by: cd 20031201 Revised by: cd 20030924 Revised by: cd Updated the packages version. Revision v1.1 Added support for GRUB. Revision v1.0 Initial release, reviewed by LDP. Revision v0.9 20030911 Revised by: cd Updated and converted to DocBook XML. Questo documento spiega come rendere i vostri dati personali sicuri cifrando il vostro linux root filesystem con algoritmi di crittografia forte. Preparazione del sistema Settare il layout delle partizioni. Il vostro hard disk (hda) dovrebbe contenere almeno tre partizioni: • • • hda1: questa piccola (circa 8 mb) partizione non crittata ti chiedera' la password per montare la partizione con il filesystem di root criptato. hda2: questa partizione conterrà il tuo file system di root criptato; stai attento che sia abbastanza capiente. hda3: questa partizione conterra' il tuo sistema Gnu\Linux. A questo punto, sia hda1 e hda2 sono inutilizzati. In hda3 si trova installata la tua distribuzione linux; /usr e /boot non devono essere separate da questa partizione. Qui trovi un esempio di come potrebbe assomigliare il tuo schema di partizionamento: # fd is k Dis k - l /d e v / h d a /d e v / h d a : Uni t s 25 5 = cyl i n d e r s Dev i c e Bo o t hea d s , of 16 0 6 5 63 sec t o r s , * 512 243 2 cyl i n d e r s byt e s Sta r t En d Bl o c k s Id /de v / h d a 1 1 1 800 1 83 Li n u x /de v / h d a 2 2 26 3 21 0 4 5 1 5 83 Li n u x /de v / h d a 3 26 4 52 5 21 0 4 5 1 5 83 Li n u x /de v / h d a 4 52 6 204 7 12 2 2 5 4 6 5 83 Li n u x Sys t e m Installare Linux2.4.27 Ci sono due progetti principali che aggiungono un supporto di crittografia forte al kernel: CryptoAPI e loopAES. Questo howto e' basato su loopaes, poiché ha un'esecuzione estremamente veloce ed altamente ottimizzata di Rijndael in linguaggio assembler e quindi fornisce le prestazioni massime su una CPU IA32 (x86). Prima di tutto, scarichiamo e scompattiamo il pacchetto per loopaes: wge t ht t p : / / l o o p - ae s . s o u r c e f o r g e . n e t / l o o p - AE S / l o o p - AE S - v2. 1 b . t a r . b z 2 tar - xv j f lo o p - AE S - v2. 1 b . t a r . b z 2 Dopo devi scaricare i sorgenti del kernel ed applicarvi la patch: wge t ht t p : / / f t p . k e r n e l . o r g / p u b / l i n u x / k e r n e l / v 2 . 4 / l i n u x - 2.4 . 2 7 . t a r . b z 2 tar - xv j f li n u x - 2. 4 . 2 7 . t a r . b z 2 cd lin u x - 2.4 . 2 7 rm inc l u d e / l i n u x / l o o p . h pat c h - Np 1 dri v e r s / b l o c k / l o o p . c - i ../ l o o p - AE S - v2 . 1 b / k e r n e l - 2.4 . 2 6 . d i f f Setta la mappa per la tastiera: dum p k e y s | lo a d k e y s - m - > dr iv e r s / c h a r / d e f k e y m a p . c Dopo, configura il tuo kernel; poni attenzione che queste opzioni sia attivate: mak e me n u c o n f i g Blo c k de v i c e s <*> Lo op b a c k [*] AE S <*> RA M [*] enc r y p t e d In i t i a l loo p dev i c e su p p o r t (NE W ) RA M RA M dis k di s k siz e (N E W ) (i n i t r d ) su p p o r t ---> <*> Ex t3 <*> Se co n d no t e : sup p o r t su p p o r t De f a u l t sys t e m s (im p o r t a n t de v i c e di s k (40 9 6 ) Fil e ---> jo u r n a l l i n g ext e n d e d do no t fil e fs ena b l e sys t e m su p p o r t su p p o r t /d e v fi l e sy s t e m sup p o r t ) Compila il kernel ed installalo: mak e de p mak e mo d u l e s cp bzI m a g e mod u l e s _ i n s t a l l arc h / i 3 8 6 / b o o t / b z I m a g e /b o o t / v m l i n u z Se usi grub come bootloader, aggiorna /boot/grub/menu.lst e /boot/grub/grub.conf: cat > /b o o t / g r u b / m e n u . l s t def a u l t 0 tim e o u t 10 col o r gr e e n / b l a c k tit l e Li n u x roo t EOF lig h t - gre e n / b l a c k (hd 0 , 2 ) ker n e l EOF << /bo o t / v m l i n u z ro roo t = / d e v / h d a 3 Altrimenti, aggiorna /etc/lilo.conf e fai partire lilo : cat > /e t c / l i l o . c o n f << EOF lba 3 2 boo t = / d e v / h d a pro m p t tim e o u t = 1 0 0 ima g e = / b o o t / v m l i n u z lab e l = L i n u x rea d - onl y roo t = / d e v / h d a 3 EOF lil o A questo punto riavvia il tuo sistema. Installare Linux2.6.7 Procedi come descritto nella sezione precedente, usando invece la patch kernel2.6.6.diff di loopaes. Nota che il supporto per il moduli richiede che tu abbia il pacchetto module inittools installato. Installare le utillinux2.12. Il programma losetup, che e' parte del pacchetto utillinux, deve essere patchato e ricompilato per aggiungere il supporto per la crittografia forte. Scarica, scompatta e applica la patch alle utillinux : wge t ht t p : / / f t p . k e r n e l . o r g / p u b / l i n u x / u t i l s / u t i l - lin u x / u t i l - li n u x - 2. 1 2 a . t a r . b z 2 tar cd - xv j f ut i l - li n u x - 2. 1 2 a . t a r . b z 2 uti l - lin u x - 2.1 2 a pat c h - Np 1 - i ../ l o o p - AE S - v2 . 1 b / u t i l - li nu x - 2.1 2 a . d i f f Per usare password piu' corte di 20 caratteri, digita : CFL A G S = " - O2 CFL A G S - DLO O P _ P A S S W O R D _ M I N _ L E N G T H = 8 " ; exp o r t Se per te la sicurezza e' importante, non abilitare password piu' corte di 20 caratteri. La sicurezza non e' gratis, si deve pagare in termini di lunghezza della password. Compila losetup e installalo come utente root: ./c o n f i g u r e && ma k e li b mou n t mv - f /s b i n / l o s e t u p rm - f /u s r / s h a r e / m a n / m a n 8 / l o s e t u p . 8 * cd mou n t gzi p /s b i n / l o s e t u p ~ lo s e t u p . 8 cp los e t u p /s b i n cp los e t u p . 8 . g z /u s r / s h a r e / m a n / m a n 8 / Creazione del filesystem root crittato Riempi la partizione che ospitera' il filesystem root criptato con dati casuali: shr e d - n 1 - v /de v / h d a 2 Iniziallizza il loopback device criptato: los e t u p - e ae s 2 5 6 - S xx x x x x x x x x /d e v / l o o p 0 /de v / h d a 2 Pas s w o r d : Per prevenire attacchi ottimizzati a dizionario, e' raccomandato di aggiungere l'opzione S xxxxxx, dove xxxxxx e' il tuo seme scelto in modo casuale (pe esempio, potreste scegliere "gPk4lA0v"). Inoltre, per evitare problemi in fase di boot con la mappa della tastiera, non usare caratteri nonascii (accenti, etc..) per la tua password. Il sito Diceware ti offre un semplice modo per creare forti, ancora facili da ricordare, passphrases. Adesso crea il filesystem ext3: mke 2 f s - j /d e v / l o o p 0 Controlla che hai inserito correttemente la password: los e t u p - d /d e v / l o o p 0 los e t u p - e ae s 2 5 6 Pas s w o r d : - S xx x x x x x x x x /d e v / l o o p 0 /de v / h d a 2 mkd i r /m n t / e f s mou n t /d e v / l o o p 0 /m n t / e f s Puoi confrontare i dati crittati con quelli non crittati: xxd /de v / h d a 2 | le s s xxd /de v / l o o p 0 | le s s E' il momento di installare il tuo filesystem linux criptato. Se usi una distribuzione Gnu/Linux (come sono Debian, Slackware, Gentoo, Mandrake, RedHat/Fedora, SuSe, etc..) fallo con i seguenti comandi : cp - avx / /m n t / e f s Se usi il libro di Linux From Scrath , procedi come descritto sul manuale, con le seguenti differenze: ● Capitolo 6 Installare utillinux: Applicare la patch loopAES dopo aver scompattato i sorgenti. ● Capitolo 8 Rendere il sistema LFS avviabile: Si faccia riferimento al prossimo paragrafo. Configurare il dispositivo di avvio Creazione del ramdisk Per iniziare, esegui chroot dentro la partizione criptata e crea il mount point per il dispositivo di boot: chr o o t mkd i r /m n t / e f s /l o a d e r Dopo, crea il ramdisk iniziale (initrd), che sara' necessario in seguito: cd dd if= / d e v / z e r o mke 2 f s of = i n i t r d bs = 1 k co u n t = 4 0 9 6 - F in i t r d mkd i r ra m d i s k mou n t - o loo p ini t r d ra m d i s k Se state usando le grsecurity, potete ottenere un messaggio di errore di “Permission denied”; in questo caso dovrete eseguire il comando mount fuori dalla chroot. Crea la gerarchia del filesystem e copia i file richiesti su di essi : mkd i r ra m d i s k / { b i n , d e v , l i b , m n t , s b i n } cp /bi n / { b a s h , m o u n t , u m o u n t } ln - s ba s h ram d i s k / b i n / ra m d i s k / b i n / s h mkn o d - m 600 ram d i s k / d e v / c o n s o l e c 5 1 mkn o d - m 600 ram d i s k / d e v / h d a 2 b 3 2 mkn o d - m 600 ram d i s k / d e v / l o o p 0 b 7 0 cp /li b / { l d - li nu x . s o . 2 , l i b c . s o . 6 , l i b d l . s o . 2 } ram d i s k / l i b / cp /li b / { l i b n c u r s e s . s o . 5 , l i b t e r m c a p . s o . 2 } ram d i s k / l i b / cp /sb i n / { l o s e t u p , p i v o t _ r o o t } ra m d i s k / s b i n / E' tutto ok se vedrai il messaggio "/lib/libncurses.so.5: No such file or directory", o "/lib/libtermcap.so.2: No such file or directory"; la bash richiede solo uno di queste due librerie. Puoi controllare manualmente quale delle due e' necessaria con: ldd /bi n / b a s h Compile the sleep program, which will prevent the password prompt being flooded by kernel messages (such as usb devices being registered). Compila il programma sleep, che impedira' che il prompt della richiesta della password venga floodato dai messaggi del kernel (come quando un dispositivo usb viene registrato) cat > sl e e p . c << "E O F " #in c l u d e <un i s t d . h > #in c l u d e <st d l i b . h > int mai n ( in t arg c , ch a r *a r g v [ ] ) { if( arg c == sle e p ( ret u r n ( 2 ) at o i ( ar g v [ 1 ] ) ); 0 ); } EOF gcc - s sl e e p . c - o ram d i s k / b i n / s l e e p Crea lo script di init (senza dimenticare di sostituire “xxxxxxx” con il seme scelto): cat > ra m d i s k / s b i n / i n i t << "E OF " #!/ b i n / s h /bi n / s l e e p 3 /sb i n / l o s e t u p - e ae s 2 5 6 - S xx xx x x x x /d e v / l o o p 0 / dev / h d a 2 /bi n / m o u n t - r - n - t ex t 3 whi l e - ne [ $? /d e v / l o o p 0 /m n t 0 ] do /sb i n / l o s e t u p - d /de v / l o o p 0 /sb i n / l o s e t u p - e aes 2 5 6 - S xxx x x x x x /d e v / l o o p 0 dev / h d a 2 /bi n / m o u n t - r - n - t ext 3 /de v / l o o p 0 don e cd /mn t /sb i n / p i v o t _ r o o t exe c . loa d e r /u s r / s b i n / c h r o o t . /sb i n / i n i t EOF chm o d 75 5 ra m d i s k / s b i n / i n i t /m n t / Smonta il dispositivo di loopback e comprimi l'initrd: umo u n t rmd i r gzi p mv - d ra m d i s k ra m d i s k in i t r d ini t r d . g z /bo o t / Avvio da un CDROM Si consiglia fortemente di avviare il tuo sistema con un dispositivo a sola lettura, come un cdrom avviabile. Scarica e scompatta syslinux: wge t htt p : / / f t p . k e r n e l . o r g / p u b / l i n u x / u t i l s / b o o t / s y s l i n u x / s y s l i n u x- 2. 10 . t a r . b z 2 tar - xv j f sy s l i n u x - 2.1 0 . t a r . b z 2 Configura isolinux: mkd i r cp bo o t c d /bo o t / { v m l i n u z , i n i t r d . g z } sys l i n u x - 2.1 0 / i s o l i n u x . b i n boo t c d ech o "D E F A U L T /vm l i n u z roo t = / d e v / r a m 0 " ini t r d = i n i t r d . g z ro \ > boo t c d / i s o l i n u x . c f g Crea e masterizza l'immagine bootabile su cdrom : mki s o f s tab l e - o bo o t c d . i s o - b is o l i n u x . b i n - c bo o t . c a t - no- em ul - bo o t - boo t - loa d - siz e 4 - bo o t - in f o - \ - J - hi de - rr - mo v e d cdr e c o r d rm - rf - de v 0,0 , 0 bo o t c d { , . i s o } - sp e e d - R boo t c d / 4 - v bo o t c d . i s o \ Avviare il sistema da una partizione La partizione di avvio puo' essere utile se il tuo CD di avvio va perso. Ricordati che hda1 e' un dispositivo scrivibile e quindi insicuro; usalo solo in caso di emergenza! Crea e monta il filesystem ext2: dd if= / d e v / z e r o mke 2 f s mou n t of = / d e v / h d a 1 bs= 8 1 9 2 /d e v / h d a 1 /d e v / h d a 1 /l o a d e r Copia il kernel e il ramdisk iniziale: cp /bo o t / v m l i n u z - 2. 4 . 2 3 cp /bo o t / i n i t r d . g z /lo a d e r / v m l i n u z /lo a d e r / Se usi grub: mkd i r cp cat /l o a d e r / b o o t - av /b o o t / g r u b /lo a d e r / b o o t / > /l o a d e r / b o o t / g r u b / m e n u . l s t def a u l t 0 tim e o u t 10 col o r gr e e n / b l a c k tit l e Li n u x roo t << EO F lig h t - gre e n / b l a c k (hd 0 , 0 ) ker n e l /vm l i n u z ro ini t r d /in i t r d . g z roo t = / d e v / r a m 0 vga = 4 EOF gru b - in s t a l l umo u n t - - ro o t - di r e c t o r y = / l o a d e r /l o a d e r /de v / h d a Se usi lilo: mkd i r cp /l o a d e r / { b o o t , d e v , e t c } /bo o t / b o o t . b /l o a d e r / b o o t / mkn o d - m 600 /lo a d e r / d e v / h d a b 3 0 mkn o d - m 600 /lo a d e r / d e v / h d a 1 b 3 1 mkn o d - m 600 /lo a d e r / d e v / r a m 0 b 1 0 cat > /l o a d e r / e t c / l i l o . c o n f lba 3 2 boo t = / d e v / h d a pro m p t tim e o u t = 1 0 0 ima g e = / v m l i n u z lab e l = L i n u x ini t r d = / i n i t r d . g z rea d - onl y roo t = / d e v / r a m 0 vga = 4 EOF lil o - r /lo a d e r umo u n t /l o a d e r << EO F Passi finali Modifica /etc/fstab in modo che contenga: /de v / l o o p 0 / ext 3 de f a u l t s 0 1 Rimuovi /etc/mtab ed esci dalla chroot. Per concludere, lancia "umount la d/mnt/efs" e riavvia. Se tutto andasse bene, puoi criptare sia hda3 e hda4; diciamo che hda3 conterra' il tuo dispositivo di swap e hda4 conterra' la /home. Dovresti inizializzare ambedue le partizioni prima: shr e d - n 1 - v /de v / h d a 3 shr e d - n 1 - v /de v / h d a 4 los e t u p - e ae s 2 5 6 - S xx x x x x x x /d e v / l o o p 1 /d e v / h d a 3 los e t u p - e ae s 2 5 6 - S xx x x x x x x /d e v / l o o p 2 /d e v / h d a 4 mks w a p /d e v / l o o p 1 mke 2 f s - j /d e v / l o o p 2 Dopodiche' crea uno script nella directory di avvio del sistema e aggiorna fstab : cat > /e t c / i n i t . d / l o o p << "E O F " #!/ b i n / s h if [ "` / u s r / b i n / m d 5 s u m /de v / h d a 1 ` " != \ "56 7 1 c e b d b 3 b e d 8 7 c 3 b 3 c 3 4 5 f 0 1 0 1 d 0 1 6 /d e v / h d a 1 " ] the n ech o - n "WA R N I N G ! hda 1 int e g r i t y ver i f i c a t i o n FA I L E D - pre s s ent e r . " rea d fi ech o "1 s t pa s s w o r d /sb i n / l o s e t u p ech o "2 n d /sb i n / s w a p o n ab o v e " - p 0 - e aes 2 5 6 pa s s w o r d /sb i n / l o s e t u p for cho s e n cho s e n ab o v e " - p 0 - e aes 2 5 6 | \ - S xxx x x x x x /d e v / l o o p 1 /de v / h d a 3 /d e v / l o o p 2 /de v / h d a 4 | \ - S xxx x x x x x /de v / l o o p 1 i in `se q 0 63 ` ech o - n - e "\ 3 3 [ 1 0 ; 1 0 ] \ 3 3 [ 1 1 ; 1 0 ] " do > /d e v / t t y $ i don e EOF chm o d 70 0 /e t c / i n i t . d / l o o p ln - s .. / i n i t . d / l o o p vi /et c / f s t a b /e t c / r c S . d / S 0 0 l o o p ... /de v / l o o p 2 /h o m e ex t 3 de f a u l t s 0 2 A proposito di questo HOWTO L' Encrypted Root Filesystem HOWTO fu scritto per la prima volta nel novembre del 2002 per il progetto Linux From Scratch . Vorrei ringraziare molte persone che mi hanno aiutato a migliorare questo howto (in ordine cronologico inverso): Ernesto Pérez Estévez, Matthew Ploessel, Mike Lorek, Lars Bungum, Michael Shields, Julien Perrot, Grant Stephenson, Cary W. Gilmer, James Howells, Pedro Baez, Josh Purinton, Jari Ruusu and Zibeli Aton. Questo HOWTO e' stato tradotto in svariate lingue: ● French ● Italian ● Hungarian Perpiacere manda i tuoi commenti a Christophe Devine. Note per la traduzione italiana Questo howto e' stato tradotto in italiano da Gaetano Zappulla <gaetano(at)linux.it>. Potete trovare la sua versione piu' aggiornata all'indirizzo www.linux.it/~ gaetano/erfs . Revision 1.0 terminata di tradurre il 29 Novembre 2003. Revision 1.1 terminata di tradurre il 3 Dicembre 2003. Revision 1.2 terminata di tradurre il 13 Agosto 2004.