Premessa:
Mandrake è stata la prima distribuzione che ho utilizzato, con la quale ho mosso i miei primissimi passi con Linux.
Tuttavia è da qualche anno ormai che preferisco lavorare con distribuzioni Debian.
Molte delle cose che ho imparato sul mondo open source lo devo molto a questa comunità, ed è per questo che desidero condividere qualcosa che ho imparato (per hobby e per lavoro).
Ho scritto questa guida utilizzando Ubuntu ed ovviamente contiene parti che utilizzano comandi tipici di debian; pertanto invito chiunque ne abbia voglia di effettuare un porting per mandriva, coprendo le parti che non sono compatibili. La filosofia open source daltronde è proprio quella di condividere la propria conoscenza e permettere ad altri eventualmente di migliorarla ed estendenderla.
Ad ogni modo la strategia chiave della guida, credo possa essere facilmente applicabile a qualunque tipo di distribuzione perchè si basa su caratteristiche intrinseche del kernel GNU/Linux, indipendenti dalle varie customizzazioni introdotte dalle distribuzioni.
Introduzione
La guida consente di configurare un sistema GNU-Linux per l'utilizzo dei dischi rigidi in modalità LVM on LUKS on LVM.
Questa strategia consente di aumentare le prestazioni dei dischi rigidi, che verranno configurati in modalità RAID-0, mediante LVM (il gestore dei volumi logici di GNU/Linux) - (layer LVM-0), e di beneficiare delle funzionalità di crittografazione offerte da LUKS (Funzione di crittografazione dei filesystems per GNU/Linux) per garantire la sicurezza del filesystem (layer LUKS). Sopra lo strato LUKS verrà configurato un ulteriore strato LVM (layer LVM-1), nel quale saranno creati 3 volumi logici montati rispettivamente su / (root); su /home e su swap.
Nota:
è bene precisare che l'utilizzo dei dischi in modalità RAID-0 consente un reale aumento delle prestazioni dei dischi rigidi rispetto all'utilizzo su singolo disco (tempo di accesso e throughput), tuttavia con l'aumentare dei dischi fisici utilizzati per formare il raid vi è un incremento intrinseco della probabilità che si verifichi un fallimento del sistema raid. Un singolo fallimento di un disco che forma un RAID-0 provoca la perdita dei dati contenuti sull'intero raid. E' sconsigliato utilizzare questa configurazione su sistemi che devono garantire un'alta affidabilità dei dati. Alternativamente è possibile affidarsi alle copie di backup dei dati sensibili o utilizzare altre modalità di partizionamento.
Schema logico della configurazione:
Questa configurazione richiede che siano disponibili almeno 2 dischi rigidi per ottenere un vantaggio prestazionale con la modalità RAID-0. Se si dispone di un singolo disco è possibile saltare la parte relativa alla configurazione dello strato LVM-0 che forma il sistema raid e passare direttamente alla configurazione dello strato LUKS.
Ovviamente le prestazioni del sistema aumenteranno con l'aumentare del numero dei dischi rigidi utilizzati per formare il RAID.
Nello schema è indicato il tipo del filesystem utilizzato per / (root) e per /boot; ma è ovviamente possibile utilizzare il filesystem preferito (ext2, ext3, ext4, xfs etc).
I passi che seguono sono stati eseguiti da un sistema avviato con una distribuzione live derivata da Debian.
Una volta avviato il sistema aprire una shell. I passi successivi richiedono privilegi amministrativi, pertanto è necessario richiederli al sistema.
Con una distribuzione Ubuntu, per ottenere i privilegi di root da un avvio "live" è sufficiente digitare da una shell:
$ sudo su (attenzione: questo comando è dipendente dalla distribuzione utilizzata!)
da questo momento tutti i comandi impartiti al sistema dalla shell godranno dei privilegi amministrativi.
E' possibile adesso installare i pacchetti relativi alla gestione dei filesystem cifrati e dei volumi logici.
# apt-get install cryptsetup lvm2 (attenzione: questo comando è dipendente dalla distribuzione utilizzata!)
# modprobe dm-crypt
Il primo disco - /dev/sda - verrà partizionato secondo questo schema: una partizione di piccole dimensioni ~100MB - /dev/sda1 - che non verrà criptata; e un'altra partizione - /dev/sda2 - utilizzata per formare il RAID.
La partizione /dev/sda1 verrà utilizzata per rendere il sistema avviabile e sarà montata su /boot. Tale partizione non contiene dati sensibili ma solo l'immagine del kernel linux.
Il disco successivo - /dev/sdb verrà partizionato con una singola partizione - /dev/sdb1 - utilizzata interamente per formare il raid.
Se sono presenti altri dischi è possibile partizionarli con lo schema utilizzato per partizionare il secondo disco (/dev/sdb).
Cominciamo.
Si suppone che tutti i comandi da questo momento in poi si lancino dalla seguente posizione sul filesystem:
/dev/mapper
partizionamento di /dev/sda
Da shell digitare:
#fdisk /dev/sda
per ogni passo vengono indicati gli input da fornire a fdisk eventualmente separati da un trattino.
creazione di una nuova tabella delle partizioni: o
creazione di una nuova partizione primaria per /boot: p - 1 - +100mb
creazione di una nuova partizione primaria per il raid: p - 2 - [enter] - [enter]
salvataggio delle modifiche: w
partizionamento di /dev/sdb (ripetere per eventuali /dev/sdn)
Da shell digitare:
#fdisk /dev/sdb
per ogni passo vengono indicati gli input da fornire a fdisk eventualmente separati da un trattino.
creazione di una nuova tabella delle partizioni: o
creazione di una nuova partizione primaria per il raid: p - 1 - [enter] - [enter]
salvataggio delle modifiche: w
Formattazione della partizione che verrà utilizzata per /boot (utilizzare il filesystem che si preferisce)
# mkfs.ext4 -m 0 /dev/sda1
Nota: e' buona pratica salvare il log prodotto da un comando di tipo mkfs.XXXX, questo perchè contiene la lista dei blocchi utilizzati per il backup del superblocco.
Se il superblocco di un filesystem dovesse corrompersi (rendendo illeggibile l'intero filesystem), sarebbe sufficiente eseguire fdisk indicando un numero di blocco di backup per ripristinare il superblocco.
Configurazione Layer LVM-0 - Creazione del RAID (questi comandi si riferiscono ad un sistema con 2 dischi)
#pvcreate /dev/sda2 /dev/sdb1
#vgcreate raidgrp /dev/sda2 /dev/sdb1
#vgscan --mknodes
#vgchange -a y
#vgdisplay raidgrp
prendere nota della linea:
Free PE / Size XXXXX / YYY,Y YY
presente nell'output dell'ultimo comando eseguito.
digitare il seguente comando, sostituendo le XXXXX con il valore reperito dall'output del precedente comando:
#lvcreate -i 2 -l XXXXX -I64 -n raidvolume raidgrp
E' possibile che il sistema comunichi che non sono sufficienti XXXXX PE, indicando un numero NN di PE che occorrono per eseguire con successo il comando.
In tal caso ripetere il comando indicando al posto di XXXXX il valore ottenuto dall'espressione: (XXXXX - NN).
Configurazione Layer LUKS - Crittografazione del RAID
Creiamo il volume crittografato:
# cryptsetup luksFormat -y --cipher aes-cbc-essiv:sha256 --key-size 256 raidvolume
Nota: questo livello di crittografazione è così sicuro che se si volesse tentare un attacco brute-forcing (con la tecnologia attuale) sulla chiave, sarebbe necessario un tempo superiore all'età attuale dell'universo.
Sblocchiamo il volume crittografato:
# cryptsetup luksOpen raidvolume crypt
Configurazione Layer LVM-1
pvcreate /dev/mapper/crypt
vgcreate cryptgrp /dev/mapper/crypt
vgscan --mknodes
vgchange -a y
I comandi seguenti creano i volumi logici che verranno montati su / su /home e swap.
personalizzare questi comandi a seconda delle esigenze (dimensione e nomi di etichetta).
lvcreate -L 8G -n swap cryptgrp
lvcreate -L 40G -n root cryptgrp
lvcreate -l 100%FREE -n home cryptgrp
osserviamo la struttura creata:
# ls -la
totale 0
drwxr-xr-x 2 root root 160 2010-01-25 19:30 .
drwxrwxrwt 17 root root 3820 2010-01-25 19:30 ..
crw-rw---- 1 root root 10, 59 2010-01-25 19:30 control
brw-rw---- 1 root disk 252, 4 2010-01-25 19:30 cryptgrp-home
brw-rw---- 1 root disk 252, 3 2010-01-25 19:30 cryptgrp-root
brw-rw---- 1 root disk 252, 2 2010-01-25 19:30 cryptgrp-swap
brw-rw---- 1 root disk 252, 1 2010-01-25 19:30 cryptvolume
brw-rw---- 1 root disk 252, 0 2010-01-25 19:30 raidgrp-raidvolume
Creazione dei filesystems sui volumi logici (Anche in questo caso utilizzare il filesystem che si preferisce):
mkswap /dev/mapper/cryptgrp-swap
mkfs.ext4 -m 0 /dev/mapper/cryptgrp-root
mkfs.ext3 -m 0 /dev/mapper/cryptgrp-home
Il sistema a questo punto è pronto per l'installazione del sistema operativo.
Nel caso in cui si interrompa la procedura in questo momento e si voglia riprenderla successivamente, sarà necessario riavviare il sistema in "live" e sbloccare di nuovo il volume LUKS.
I comandi in questo caso sono:
$ sudo su (attenzione: questo comando è dipendente dalla distribuzione utilizzata!)
# apt-get install cryptsetup lvm2 (attenzione: questo comando è dipendente dalla distribuzione utilizzata!)
# modprobe dm-crypt
# cd /dev/mapper
# vgscan --mknodes
# vgchange -a y
# cryptsetup luksOpen raidvolume crypt
lanciando il comando ls -la dovrebbe apparire la configurazione precedentemente creata:
totale 0
drwxr-xr-x 2 root root 160 2010-01-25 19:30 .
drwxrwxrwt 17 root root 3820 2010-01-25 19:30 ..
crw-rw---- 1 root root 10, 59 2010-01-25 19:30 control
brw-rw---- 1 root disk 252, 4 2010-01-25 19:30 cryptgrp-home
brw-rw---- 1 root disk 252, 3 2010-01-25 19:30 cryptgrp-root
brw-rw---- 1 root disk 252, 2 2010-01-25 19:30 cryptgrp-swap
brw-rw---- 1 root disk 252, 1 2010-01-25 19:30 cryptvolume
brw-rw---- 1 root disk 252, 0 2010-01-25 19:30 raidgrp-raidvolume
Installazione del sistema operativo
A seconda della distribuzione utilizzata potranno esserci delle variazioni, tuttavia durante il processo di installazione verrà chiesto come partizionare i dischi e come impostare i punti di mount.
Il tool di partizionamento dovrebbe essere in grado di rilevare i volumi logici definiti sotto /dev/mapper e dovrebbe essere possibile utilizzarli come una qualsiasi altra partizione fisica.
Ovviamente non bisogna modificare nessuna partizione e occorre impostare i punti di mount secondo questa mappatura:
/dev/sda1 --> /boot
/dev/mapper/cryptgrp-home --> /home
/dev/mapper/cryptgrp-root --> /
/dev/mapper/cryptgrp-swap --> utilizzare come spazio swap
A fine installazione non bisogna riavviare il sistema perchè non sarà ancora avviabile.
I passi seguenti, tuttavia, sono molto dipendenti dalla distribuzione utilizzata.
Su un sistema Ubuntu è necessario eseguirli, altrimenti il sistema in fase di avvio non sarà in grado di trovare il device montato su / e di proporre all'utente di inserire la passphrase di sblocco del volume crittografato.
La procedura sarà necessariamente differente con Mandriva.
Ad ogni modo riporto i passi da eseguire a fine installazione con Ubuntu:
da shell digitare i seguenti comandi:
# cd /dev/mapper
# mkdir /mnt/root
# mount cryptgrp-root /mnt/root
# mount /dev/sda1 /mnt/root/boot
# chroot /mnt/root
# apt-get install cryptsetup lvm2
# modprobe dm-crypt
modificare (se necessario creare) il file:
/etc/crypttab
inserendo le seguenti righe:
# target name # source device # key file # options
cryptvolume /dev/mapper/raidgrp-raidvolume none luks
modificare (se necessario creare) il file:
/etc/initramfs-tools/conf.d/cryptroot
inserendo la seguente riga:
target=cryptvolume,source=/dev/mapper/raidgrp-raidvolume,lvm=cryptgrp-root
eseguire il seguente comando:
# update-initramfs -u
A questo punto tutti gli step sono completi.
Riavviate e il sistema dovrebbe chiedervi la passphrase LUKS.
Commenti
Inviato da Moreno il Ven, 29/01/2010 - 13:54.
Re: LVM on LUKS on LVM
Ciao
Mmmmmm proprio una bella guida succulenta, devo trovare una macchina dove fare un po' di esperimenti ed a tradurla in Mandriviese.
Ciao Ciao, Moreno
Addio, e grazie per tutto il pesce.
Avatar by moonlight-dream.