Creare un disco cifrato con Linux e LUKS
Un tutorial essenziale, passo dopo passo, per creare un contenitore cifrato, formattarlo, montarlo e proteggerlo con una passphrase o con un file chiave.
Introduzione
Linux mette a disposizione strumenti molto solidi per la cifratura dei dati. In questa guida utilizzeremo cryptsetup e LUKS (Linux Unified Key Setup) per creare un disco cifrato partendo da un semplice file.
L'esempio è basato su Ubuntu/Debian. Su altre distribuzioni cambia principalmente il sistema di installazione dei pacchetti: per esempio, sulle distribuzioni derivate da RHEL si utilizza normalmente dnf (o yum sui sistemi più datati) al posto di apt.
Video tutorial
1Installare cryptsetup
Su Ubuntu o Debian:
sudo apt update
sudo apt install cryptsetup
2Creare il file che conterrà il disco
Per un piccolo contenitore dimostrativo da 10 MiB:
dd if=/dev/zero bs=1M count=10 of=discocriptato.img
Il file discocriptato.img fungerà da disco virtuale. Per un utilizzo reale sarà naturalmente opportuno scegliere una dimensione adeguata.
3Cifrare il contenitore con LUKS
Il metodo più semplice con le versioni moderne di cryptsetup è operare direttamente sul file:
sudo cryptsetup luksFormat discocriptato.img
Verrà richiesta una conferma e quindi la passphrase da associare al volume.
losetup. Cryptsetup può normalmente gestire direttamente un file immagine, rendendo la procedura più breve e meno soggetta a errori.4Aprire il disco cifrato
sudo cryptsetup luksOpen discocriptato.img criptato
Dopo l'inserimento della passphrase, Linux espone il contenuto decifrato come dispositivo:
/dev/mapper/criptato
Il file originale resta cifrato: il dispositivo in /dev/mapper rappresenta invece la vista decifrata utilizzabile dal sistema.
5Creare il filesystem e montarlo
La prima volta è necessario creare un filesystem. Nell'esempio utilizziamo ext4:
sudo mkfs.ext4 /dev/mapper/criptato
mkdir -p crypt
sudo mount /dev/mapper/criptato crypt/
A questo punto la directory crypt/ può essere utilizzata normalmente. I dati scritti al suo interno verranno memorizzati cifrati nel file discocriptato.img.
6Smontare e chiudere correttamente il volume
Prima di chiudere LUKS occorre smontare il filesystem:
sudo umount crypt/
sudo cryptsetup luksClose criptato
Dopo luksClose, il dispositivo /dev/mapper/criptato scompare e il contenuto torna inaccessibile finché il volume non viene nuovamente aperto.
7Aggiungere un file chiave
LUKS consente di associare al volume più credenziali. Oltre alla passphrase possiamo quindi aggiungere un key file.
Per generare 32 byte casuali è preferibile utilizzare /dev/urandom oppure openssl rand:
dd if=/dev/urandom bs=32 count=1 of=chiave
chmod 600 chiave
sudo cryptsetup luksAddKey discocriptato.img chiave
Durante luksAddKey viene normalmente richiesta una credenziale LUKS già valida per autorizzare l'aggiunta della nuova chiave.
Successivamente il volume può essere aperto senza digitare la passphrase:
sudo cryptsetup luksOpen discocriptato.img criptato --key-file=chiave
chiave deve essere conservato separatamente e protetto con attenzione. Se un soggetto dispone contemporaneamente del contenitore cifrato e di una copia del key file valido, può utilizzarlo per tentare l'apertura del volume.Verificare il volume
Per controllare che il file sia effettivamente un contenitore LUKS:
sudo cryptsetup luksDump discocriptato.img
Il comando mostra l'header LUKS, i parametri crittografici e gli slot delle chiavi, senza decifrare i file contenuti nel volume.
Sequenza completa
sudo apt update
sudo apt install cryptsetup
dd if=/dev/zero bs=1M count=10 of=discocriptato.img
sudo cryptsetup luksFormat discocriptato.img
sudo cryptsetup luksOpen discocriptato.img criptato
sudo mkfs.ext4 /dev/mapper/criptato
mkdir -p crypt
sudo mount /dev/mapper/criptato crypt/
# ... utilizzo del disco ...
sudo umount crypt/
sudo cryptsetup luksClose criptato
Con pochi comandi abbiamo quindi creato un contenitore cifrato LUKS completamente utilizzabile come un normale filesystem Linux.
