Installare Arch Linux in una partizione cifrata
a cura di giomba ~ Maggio 2013
Per sfizio personale, per avere maggiore sicurezza o per insanità mentale, avete finalmente deciso che è giunta l'ora di installare il vostro sistema Arch Linux in una partizione cifrata, in modo da impedire che i vostri preziosissimi dati possano cadere nelle mani - o peggio, sotto gli occhi - delle persone sbagliate.
Prerequisiti
Requisiti e avvertimenti
Conoscenze e competenze: In questa guida si suppone che abbiate chiaro come si partiziona un disco, come si monta, come ci si lavora e come si smonta, il tutto ovviamente tramite la riga di comando. Inoltre ci si aspetta che abbiate una discreta familiarità con l'installazione di ArchLinux - non dev'essere la prima volta che lo fate - e su come ci si muove con la riga di comando (modificare qualche file di configurazione). Infine si richiede che si abbia anche familiarità con il concetto di montaggio, un'idea di cosa sia un device node et similia sull'astrazione.
Requisiti della macchina: Ovviamente si suppone che abbiate un computer per smanettare, non vecchissimo, ma nemmeno troppo recente (≥ Pentium D va più che bene), e un harddisk vuoto o, meglio ancora, il cui contenuto debba essere sovrascritto, sul quale installare il sistema.
Sulla crittografia Infine ricordate che i metodi di cifratura che esistono al giorno d'oggi non possono essere forzati nella loro essenza: un furto di dati crittografati è imputabile solamente ad una mancanza umana (ottenere la chiave di cifratura rubandola fisicamente oppure torturando chi ne è in possesso). Questa guida descrive la procedura per installare Arch Linux su una partizione cifrata, utilizzando una chiave di cifratura esterna che risiede su un supporto rimovibile (nel caso specifico, su una chiavetta USB).
Il concetto
La creazione di un disco crittografato richiede due passaggi essenziali:
- Creazione del disco (partizionamento di un disco fisico o creazione di un disco immagine virtuale, ad esempio con dd)
- Formattazione del disco (o della partizione) utilizzando una chiave di cifratura
La lettura di un disco crittografato consiste in altrettanti pochi e semplici passaggi:
- Associazione del disco ad un device node tramite la chiave di cifratura
- Montaggio del device node (che verrà utilizzato poi in maniera trasparente come un normalissimo disco)
Prima parte: Creazione delle partizioni e installazione del sistema
Partizionamento del disco
Avviare il disco live di installazione di Arch Linux. Prima di installare il sistema bisogna ovviamente partizionare il disco. Tutte le partizioni possono essere cifrate (/, /home, /var e persino l'area di swap) ma è indispensabile che almeno la partizione di /boot (in cui risiederà il kernel) non venga cifrata, altrimenti il bootloader non potrà caricare il sistema.
# fdisk -l # cfdisk /dev/sda
Pensare bene a come si partiziona il disco, in quanto non è possibile ridimensionare in seguito delle partizioni cifrate (si deve fisicamente eliminare la partizione e, una volta ridimensionata, va riformattata daccapo).
Creazione del filesystem cifrato con cryptsetup
Per creare il filesystem cifrato, sono necessari cryptsetup, che si trova già sul disco live di Arch Linux, e una chiave di cifratura. La chiave di cifratura può essere una password o un qualsiasi file. Per generare una chiave sicura "al volo" si può usare dd:
$ dd if=/dev/urandom of=chiave.key bs=1K count=10
È indispensabile salvarsi questa chiave da qualche parte: senza la chiave il disco sarà inaccessibile. Si può salvare, per esempio, su una chiavetta USB, che inseriremo ad ogni avvio del computer per sbloccare il contenuto del disco. Creata la chiave, formattare così la partizione:
# cryptsetup -c aes-xts-plain64 -s 512 luksFormat /dev/sda2 /path/chiave.key
Dove /path/chiave.key è il percorso al file contente la chiave di cifratura. Si suppone inoltre che /dev/sda2 contenga la partizione /, in quanto su /dev/sda1 è presente quella di /boot non cifrata. Il programma chiederà di confermare l'operazione rispondendo «YES» (maiuscolo) alla richiesta di formattazione. Ripetere la procedura per tutte le partizioni. Si può anche usare una diversa chiave per ogni partizione, oppure si possono formattare delle partizioni "in chiaro", senza crittografarle, con un semplice mkfs.ext4 /dev/sdaX
Apertura della partizione cifrata
Una volta creato il filesystem cifrato, lo si deve aprire e lo si deve associare ad un device node, che verrà poi symlinkato; ma non dobbiamo spaventarci più di tanto, in quanto penserà a tutto cryptsetup.
# cryptsetup --key-file /path/chiave.key luksOpen /dev/sda2 rootfs
rootfs è il nome utilizzeremo per accedere alla partizione cifrata in maniera trasparente.
Formattazione e montaggio della partizione cifrata
Creato il device node a cui è associato il nostro disco cifrato, possiamo operare su di esso normalmente, come se fosse un normalissimo disco. Pertanto:
# mkfs.ext4 /dev/mapper/rootfs # mount /dev/mapper/rootfs /mnt
Dove /dev/mapper/rootfs è il nome assegnato al device node in precendenza con cryptsetup luksOpen. Allo stesso modo, creare e montare anche la altre partizioni cifrate desiderate (/home, /var, ecc...) e installare normalmente Arch Linux con pacstrap /mnt base base-devel, fare il chroot, ecc... al momento di installare il bootloader GRUB2, seguire la seconda parte di questa guida.
Seconda parte: Rendere la procedura automatica al boot
Configurare GRUB2
(Si suppone di essere ancora nell'ambiente chroot dell'installazione) Aprire il file di configurazione /etc/default/grub e modificare la riga GRUB_CMDLINE_LINUX come segue:
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:cryptroot cryptkey=/dev/sdb1:auto:chiave.key"
Dopodichè, aggiornare il menu di GRUB2:
# grub-mkconfig -o /boot/grub/grub.cfg
In questo modo, GRUB2 utilizzerà la chiave chiave.key che risiede sul disco /dev/sdb1 (la nostra pennina USB) il quale è formattato con un filesystem che verrà riconosciuto automaticamente. Attenzione: se la pennina è formattata in FAT, allora sarà necessario aggiungere un modulo a GRUB2. Personalmente, consiglio di creare una seconda partizione di qualche manciata di MB alla fine della pennina, formattata in ext2, e destinata a contenere solamente la nostra chiave di cifratura, lontana da occhi indiscreti (soprattutto su Windows).
Configurare mkinitcpio
Per far sì che il kernel possa decifrare il filesystem in fase di avvio, occorre aggiungere gli hooks encrypt e shutdown nel file /etc/mkinitcpio.conf e rigenerare l'immagine del kernel con
# mkinitcpio -p linux.
Configurare cryptsetup
Per montare automaticamente le partizioni cifrate /home, /var, ecc... modificare il file /etc/crypttab e aggiungere la seguente riga:
homefs /dev/sda6 /path/chiave.key cipher=aes-xts-plain64,size=512
Dove homefs è il nome che si vuole assegnare al device node, /dev/sda6 è la partizione che si vuole assegnare al device node, /path/chiave.key è il percorso alla chiave di cifratura (la stessa della /, oppure un'altra, a seconda di come si sono cifrate le partizioni in fase di installazione; a questo punto, visto che / è cifrata, una seconda chiave può anche risiedere in tale partizione).
Configurare fstab
Dopo aver configurato cryptsetup, si deve configurare /etc/fstab e istruirlo a montare le partizioni che cryptsetup ha assegnato ai device node in fase di avvio, secondo le istruzioni che abbiamo specificato in /etc/crypttab. Aprire /etc/fstab e modificarlo come segue:
/dev/mapper/homefs /home ext4 rw,relatime,data=ordered 0 2
Dove /dev/mapper/homefs è il device node scelto, /home è il punto di mount, ecc... Ripetere l'operazione per tutte le partizioni cifrate che si hanno. Si può anche avere qualche partizione non cifrata (ma a questo punto, a che servirebbe?)
Termine dell'installazione
Finalmente l'installazione e la configurazione del sistema è terminata, si smontino quindi tutte le partizioni e si riavvii il computer. Se tutto è andato liscio, all'avvio del sistema verrà chiesto di inserire la pennina USB con la nostra chiave di cifratura: inseriamola (entro i dieci secondi che abbiamo a disposizione) e il nostro Arch si avvierà! Buon proseguimento dell'installazione! Per qualsiasi informazione più approfondita, si rimanda alla pagina del wiki di Arch Linux in inglese.
Risorse
https://wiki.archlinux.org/index.php/LUKS
http://gbr.altervista.org/index.php?p=diario/articoli/cifratura-harddisk-luks-archlinux