Encrypted Root Filesystem HOWTO Preparazione del

Transcript

Encrypted Root Filesystem HOWTO Preparazione del
Encrypted Root Filesystem HOWTO
Christophe Devine
Revision History
Revision v1.2
2004­08­01
Revised by: cd
2003­12­01
Revised by: cd
2003­09­24
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
2003­09­11
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 Linux­2.4.27
Ci sono due progetti principali che aggiungono un supporto di crittografia forte al kernel:
CryptoAPI e loop­AES. Questo how­to e' basato su loop­aes, poiché ha un'esecuzione
estremamente veloce ed altamente ottimizzata di Rijndael in linguaggio assembler e
quindi fornisce le prestazioni massime su una CPU IA­32 (x86).
Prima di tutto, scarichiamo e scompattiamo il pacchetto per loop­aes: 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 Linux­2.6.7
Procedi come descritto nella sezione precedente, usando invece la patch kernel­2.6.6.diff
di loop­aes. Nota che il supporto per il moduli richiede che tu abbia il pacchetto module­
init­tools installato.
Installare le util­linux­2.12.
Il programma losetup, che e' parte del pacchetto util­linux, deve essere patchato e
ricompilato per aggiungere il supporto per la crittografia forte. Scarica, scompatta e applica la patch alle util­linux :
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 non­ascii (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 util­linux:
Applicare la patch loop­AES 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 CD­ROM
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 cd­rom :
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.