Thursday Feb 03, 2022

How To Encrypt Root Filesystem on Linux

Come amministratore di sistema, probabilmente sai già quanto sia importante criptare i tuoi dischi.

Se il tuo portatile venisse rubato, anche un hacker principiante sarebbe in grado di estrarre le informazioni contenute nei dischi.

Basta una semplice chiavetta USB con un LiveCD e tutto verrebbe rubato.

Per vostra fortuna, ci sono modi per evitare che questo accada: criptando i dati memorizzati sui vostri dischi.

In questo tutorial, vedremo i passi necessari per eseguire una crittografia completa del sistema. Potresti trovare altri tutorial online incentrati sulla crittografia di un solo file o delle partizioni home, per esempio.

In questo caso, stiamo crittografando l’intero sistema, vale a dire l’intera partizione root e la cartella di avvio. Stiamo per criptare una parte del bootloader.

Pronto?

Tabella dei contenuti

Prequisiti

Per eseguire tutte le operazioni dettagliate in questa guida, devi ovviamente avere i diritti di amministratore di sistema.

Per verificare che questo sia il caso, assicuratevi di appartenere al gruppo “sudo” (per le distribuzioni basate su Debian) o “wheel” (su quelle basate su RedHat).

Se vedete il seguente output, dovreste essere pronti a partire.

Prima di continuare, è importante che sappiate che la crittografia dei dischi non è priva di rischi.

Il processo comporta la formattazione dell’intero disco, il che significa che perderete i dati se non ne fate il backup. Di conseguenza, potrebbe essere una buona idea per voi fare il backup dei vostri file, sia che scegliate di farlo su un disco esterno o in un cloud online.

Se non siete sicuri dei passaggi necessari per il backup del vostro intero sistema, vi consiglio di leggere il seguente tutorial che lo spiega in termini chiari.

Ora che tutto è pronto, possiamo iniziare a criptare il nostro intero sistema.

Identifica la tua situazione attuale

Questo tutorial è diviso in tre parti: una per ogni scenario che potresti dover affrontare.

Dopo aver identificato la tua situazione attuale, puoi passare direttamente al capitolo che ti interessa.

Se vuoi cifrare un sistema che contiene già dati non cifrati, hai due scelte :

  • Puoi aggiungere un disco supplementare al tuo computer o server e configurarlo per diventare il disco avviabile: puoi andare alla parte uno.
  • Non puoi aggiungere un disco supplementare al tuo computer (un portatile in garanzia per esempio): troverai le informazioni necessarie nella parte due.

Se stai installando un sistema nuovo di zecca, vale a dire che installi la distribuzione da zero, puoi criptare l’intero disco direttamente dal programma di installazione grafico. Di conseguenza, puoi andare alla parte tre.

Progettazione del layout del disco rigido

Quando stai creando nuove partizioni, criptate o meno, è abbastanza importante scegliere il design del disco rigido in anticipo.

In questo caso, progetteremo il nostro disco utilizzando un layout MBR: i primi 512 byte del disco avviabile saranno riservati alla prima fase di GRUB (così come i metadati per le nostre partizioni).

La prima partizione sarà una partizione vuota riservata ai sistemi che utilizzano EFI (o UEFI) come firmware di avvio. Se si sceglie di installare Windows 10 in futuro, si avrà una partizione già disponibile per questo.

La seconda partizione del nostro disco sarà formattata come una partizione LUKS-LVM contenente un volume fisico (la partizione del disco stesso) e un gruppo di volumi contenente due volumi logici: uno per il filesystem root e un altro per una piccola partizione di swap.

Come potete vedere, anche il secondo stadio di GRUB sarà criptato: questo perché abbiamo scelto di avere la cartella di boot memorizzata sulla stessa partizione.

Ovviamente, non siete limitati al design fornito qui, potete aggiungere ulteriori volumi logici per i vostri log, per esempio.

Questo design sarà la nostra tabella di marcia per questo tutorial: inizieremo da un disco nuovo di zecca e implementeremo tutte le parti insieme.

Crittografia dei dati a riposo

Questo tutorial si concentra sulla crittografia dei dati a riposo. Come dice il nome, la crittografia data-at-rest significa che il vostro sistema è criptato, cioè nessuno può leggere da esso, quando è a riposo o spento.

Questa crittografia è abbastanza utile se il tuo computer dovesse essere rubato, gli hacker non sarebbero in grado di leggere i dati sul disco a meno che non conoscano la passphrase che sceglierai nelle prossime sezioni.

Tuttavia, ci sarebbe ancora il rischio che i vostri dati vengano cancellati per sempre: non avere accesso in lettura a un disco non significa che non possano semplicemente rimuovere le partizioni su di esso.

Di conseguenza, assicuratevi di tenere un backup dei vostri file importanti in un posto sicuro.

Crittografare il filesystem di root su un nuovo disco

Come specificato nell’introduzione, stiamo per crittografare il filesystem di root da un nuovo disco che non contiene alcun dato. Questo è abbastanza importante perché il disco crittografato sarà formattato durante il processo.

Andate al sistema che volete crittografare e inserite il nuovo disco. Prima di tutto, identificate il vostro disco attuale, che probabilmente si chiama “/dev/sda” e il disco che avete appena inserito (probabilmente si chiama “/dev/sdb”).

Se avete dei dubbi sulla corrispondenza tra i nomi e i seriali del disco, potete aggiungere fornitori e seriali con l’opzione “-o” di lsblk.

$ lsblk -do +VENDOR,SERIAL

In questo caso, il disco con i dati si chiama “/dev/sda” e quello nuovo si chiama “/dev/sdb”.

Prima di tutto, dobbiamo creare il layout che abbiamo specificato nell’introduzione, cioè una partizione che sarà una EFI e una partizione LUKS-LVM.

Creazione del layout di base del disco

Il primo passo del nostro viaggio verso la crittografia completa del disco inizia con due semplici partizioni: una EFI (anche se usiamo MBR, in caso si voglia cambiare in futuro) e una per il nostro LVM.

Per creare nuove partizioni sul vostro disco, usate il comando “fdisk” e specificate il disco da formattare.

$ sudo fdisk /dev/sdb

Come spiegato nell’introduzione, la prima partizione sarà da 512 Mb e l’altra prenderà lo spazio rimanente sul disco.

Nell’utilità “fdisk”, puoi creare una nuova partizione con l’opzione “n” e specificare una dimensione di 512 megabyte con “+512M”.

Assicurati di cambiare il tipo di partizione in W95 FAT32 usando l’opzione “t” e specificando “b” come tipo.

Ora che hai la tua prima partizione, creiamo quella che ci interessa.

Creare la seconda partizione è ancora più semplice.

Nell’utilità fdisk, usate “n” per creare una nuova partizione e attenetevi alle impostazioni predefinite, il che significa che potete premere “Invio” ad ogni passo.

Quando avete finito, potete semplicemente premere “w” per scrivere le modifiche su disco.

Ora, eseguire nuovamente il comando “fdisk” vi darà una buona idea delle modifiche che avete eseguito sul disco.

$ sudo fdisk -l /dev/sdb

Grande!

La tua seconda partizione è pronta per essere formattata, quindi andiamo a formattarla.

Creazione di partizioni LUKS & LVM su disco

Per criptare i dischi, useremo LUKS, abbreviazione del progetto Linux Unified Key Setup.

LUKS è una specifica per diversi backend implementati in alcune versioni del kernel Linux.

In questo caso, useremo il sottomodulo “dm-crypt” dello stack di archiviazione di Linux.

Come dice il suo nome, “dm-crypt” fa parte del modulo device mapper che mira a creare un livello di astrazione tra i dischi fisici e il modo in cui si sceglie di progettare lo stack di archiviazione.

Diagramma da thomas-krenn.com

Questa informazione è piuttosto importante perché significa che è possibile criptare praticamente ogni dispositivo utilizzando il backend “dm-crypt”.

In questo caso, stiamo per criptare un disco, contenente un insieme di partizioni LVM, ma si può scegliere di criptare una chiavetta USB o un floppy disk.

Per interagire con il modulo “dm-crypt”, useremo il comando “cryptsetup”.

Ovviamente, potrebbe essere necessario installarlo sul vostro server se non lo avete già.

$ sudo apt-get instal cryptsetup$ which cryptsetup

Ora che cryptsetup è disponibile sul vostro computer, creerete la vostra prima partizione formattata in LUKS.

Per creare una partizione LUKS, userete il comando “cryptsetup” seguito dal comando “luksFormat” che formatta la partizione (o il disco) specificata.

 $ sudo cryptsetup luksFormat --type luks1 /dev/sdb2

Nota: allora perché stiamo specificando il tipo di formattazione LUKS1? Da gennaio 2021, GRUB (il nostro bootloader) non supporta la crittografia LUKS2. Assicurati di lasciare un commento se noti che LUKS2 è ora rilasciato per il bootlader GRUB.

Come puoi vedere, ti viene notificato che questa operazione cancellerà tutti i dati memorizzati sul disco. Controllate il disco che state formattando un’ultima volta, e digitate “YES” quando siete pronti.

Subito dopo, vi verrà richiesta una passphrase. LUKS usa due metodi di autenticazione: uno basato sulla passphrase che è essenzialmente una password che si inserisce al momento della decrittazione.

LUKS può anche utilizzare delle chiavi. Usando le chiavi, puoi per esempio memorizzarle su una parte del tuo disco e il tuo sistema sarà in grado di occuparsene automaticamente.

Scegli una passphrase forte, inseriscila di nuovo e aspetta che la cifratura del disco sia completa.

Quando hai finito, puoi controllare con il comando “lsblk” che la tua partizione sia ora cifrata come una LUKS.

Fantastico! Ora hai una partizione criptata.

$ lsblk -f

Per controllare che la tua partizione sia formattata correttamente, puoi usare il comando “cryptsetup” seguito dall’opzione “luksDump” e specificare il nome del dispositivo criptato.

$ sudo cryptsetup luksDump /dev/sdb2

La tua versione dovrebbe essere impostata su “1” per il formato “LUKS1” e dovresti vedere sotto la passphrase criptata in uno dei keyslots.

Creazione di LVM criptato su disco

Ora che la tua partizione criptata LUKS è pronta, puoi “aprirla”. “Aprire” una partizione criptata significa semplicemente che state per accedere ai dati sul disco.

Per aprire il vostro dispositivo criptato, usate il comando “cryptsetup” seguito da “luksOpen”, il nome del dispositivo criptato e un nome.

$ sudo cryptsetup luksOpen <encrypted_device> <name>

In questo caso, abbiamo scelto di chiamare il dispositivo “cryptlvm”.

Di conseguenza, usando di nuovo il comando “lsblk”, potete vedere che un nuovo dispositivo è stato aggiunto alla lista dei dispositivi esistenti. La seconda partizione ora contiene un dispositivo chiamato “cryptlvm” che è la vostra partizione decriptata.

Ora che tutto è pronto, possiamo iniziare a creare i nostri due LVM: uno per la nostra partizione root e uno per lo swap.

Prima di tutto, stiamo per creare un volume fisico per il nostro nuovo disco utilizzando il comando “pvcreate”.

# Optional, if you don't have LVM commands : sudo apt-get install lvm2$ sudo pvcreate /dev/mapper/cryptlvm

Ora che il vostro volume fisico è pronto, potete usarlo per creare un gruppo di volumi chiamato “cryptvg”.

$ sudo vgcreate cryptvg /dev/mapper/cryptlvm

Ora che il vostro gruppo di volumi è pronto, potete creare i vostri due volumi logici.

In questo caso, la prima partizione è da 13Gb e la partizione di swap prenderà lo spazio rimanente. Assicuratevi di modificare questi numeri per il vostro caso specifico.

Per ospitare il nostro filesystem di root, creeremo un filesystem EXT4 sul volume logico.

$ sudo lvcreate -n lvroot -L 13G cryptvg$ sudo mkfs.ext4 /dev/mapper/cryptvg-lvroot

La creazione della partizione di swap può essere realizzata con gli stessi passi, usando “lvcreate” e “mkswap”.

$ sudo lvcreate -n lvswap -l 100%FREE cryptvg$ sudo mkswap /dev/mapper/cryptvg-lvswap

Fantastico! Ora che le tue partizioni sono state create, è il momento di trasferire il tuo rootfilesystem esistente su quello appena creato.

Trasferire l’intero filesystem sul disco criptato

Prima di trasferire l’intero filesystem, potrebbe essere una buona idea controllare che tu abbia abbastanza spazio sul disco di destinazione.

$ df -h 

Per trasferire l’intero filesystem sulla partizione appena creata, userai il comando “rsync”.

Monta il volume logico appena creato e inizia a copiare i file e le cartelle ricorsivamente sull’unità di destinazione.

$ sudo mount /dev/mapper/cryptvg-lvroot /mnt$ sudo rsync -aAXv / --exclude="mnt" /mnt --progress

Questo processo può richiedere un po’ di tempo a seconda della quantità di dati che devi trasferire.

Dopo un po’, l’intero filesystem dovrebbe essere copiato sull’unità criptata. Ora che la “/boot” è criptata, dovrai reinstallare la fase 1 di GRUB di conseguenza.

Installare e configurare GRUB Bootloader

Quindi, perché avresti bisogno di reinstallare e riconfigurare GRUB di conseguenza?

Per rispondere a questa domanda, è necessario avere un’idea di base del modo in cui il sistema si avvia quando si utilizza un processo di boot convenzionale BIOS/MBR.

Come spiegato nell’introduzione, GRUB è diviso in due (a volte tre) parti: GRUB stage 1 e GRUB stage 2. Lo stage 1 cercherà solo la posizione dello stage 2, spesso situato nella cartella “/boot” del tuo filesystem.

Lo stage 2 è responsabile di molti compiti: caricare i moduli necessari, caricare il kernel in memoria e avviare il processo initramfs.

Come hai capito, lo stage 2 è criptato qui, quindi dobbiamo dire allo stage 1 (situato nei primi 512 byte del tuo disco) che deve essere decriptato prima.

Re-installare GRUB Stage 1 & 2

Per reinstallare il primo stadio di GRUB, devi prima abilitare il “cryptomount” che permette l’accesso ai dispositivi criptati nell’ambiente GRUB.

Per ottenere ciò, è necessario modificare il file “/etc/default/grub” e aggiungere l’opzione “GRUB_ENABLE_CRYPTODISK=y”. Di conseguenza, avrete bisogno di fare il chroot nel vostro nuovo drive per eseguire correttamente i comandi.

Chroot nel drive criptato

Per fare il chroot nel vostro drive criptato, dovrete eseguire i seguenti comandi.

Ora che avete eseguito questi comandi, dovreste essere nel contesto del vostro drive criptato.

$ vi /etc/default/grub
GRUB_ENABLE_CRYPTODISK=y

Come indicato nella documentazione di GRUB, questa opzione configurerà GRUB per cercare dispositivi criptati e aggiungere ulteriori comandi per decifrarli.

Ora che lo stage 1 è configurato, potete installarlo sul vostro MBR usando il comando grub-install.

$ grub-install --boot-directory=/boot /dev/sdb

Nota: fate attenzione, dovete specificare “/dev/sdb” e non “/dev/sdb1”.

Come avrete probabilmente notato, quando non si forniscono opzioni per l’installazione di GRUB, si ha di default un’installazione “i386-pc” (che è progettata per un firmware basato su BIOS).

Re-installare GRUB Stage 2

Utilizzando i passi dettagliati sopra, lo stage 1 è stato aggiornato, ma abbiamo anche bisogno di dire allo stage 2 che ha a che fare con un disco criptato.

Per ottenere ciò, vai a “/etc/default/grub” e aggiungi un’altra linea per il tuo GRUB stage 2.

GRUB_CMDLINE_LINUX="cryptdevice=UUID=<encrypted_device_uuid> root=UUID=<root_fs_uuid>"

Questa è una linea importante perché dice al secondo stadio di GRUB dove si trova il disco criptato e dove si trova la partizione root.

Per identificare gli UUID necessari, puoi usare il comando “lsblk” con l’opzione “-f”.

$ lsblk -f 

Usando questi UUID, dovremmo aggiungere la seguente linea al file di configurazione di GRUB.

Per aggiornare la tua attuale installazione di GRUB, puoi usare il comando “update-grub2” nel tuo ambiente chroot.

$ sudo update-grub2

Ora che hai aggiornato la tua installazione di GRUB, il tuo menu GRUB (cioè la fase 2) dovrebbe essere modificato e dovresti vedere il seguente contenuto quando ispezioni il file “/boot/grub/grub.cfg”.

Come puoi vedere, il file di configurazione di GRUB è stato modificato e il tuo sistema ora usa “cryptomount” per localizzare il drive criptato.

Perché il tuo sistema si avvii correttamente, devi controllare che :

  • Stai caricando i moduli corretti come cryptodisk, luks, lvm e altri;
  • L’istruzione “cryptomount” è impostata correttamente;
  • Il kernel è caricato usando l’istruzione “cryptdevice” che abbiamo appena impostato nella sezione precedente.
  • Gli UUID specificati sono corretti: quello “cryptdevice” punta alla partizione criptata LUKS2 e quello “root” al filesystem ext4 root.

Modificare i file crypttab e fstab

Uno dei primi passi di initramfs sarà quello di montare i volumi usando i file “/etc/crypttab” e “/etc/fstab” sul filesystem.

Di conseguenza, e poiché state creando nuovi volumi, potreste dover modificare quei file per metterci l’UUID corretto.

Prima di tutto, vai al file “/etc/crypttab” (puoi crearlo se non esiste già) e aggiungi il seguente contenuto

$ nano /etc/crypttab# <target name> <source device> <key file> <options> cryptlvm UUID=<luks_uuid> none luks

Se non sei sicuro dell’UUID del tuo dispositivo criptato, puoi usare il “blkid” per ottenere le informazioni.

$ blkid | grep -i LUKS 

Ora che il file crypttab è modificato, devi solo modificare il fstab di conseguenza.

$ nano /etc/fstab# <file system> <mount point> <type> <options> <dump> <pass>UUID=<ext4 uuid> / ext4 errors=remount-ro 0 1

Anche in questo caso, se non sei sicuro dell’UUID del tuo filesystem ext4, puoi usare di nuovo il comando “blkid”.

$ blkid | grep -i ext4

Ho quasi finito!

Ora che GRUB e i file di configurazione sono configurati correttamente, abbiamo solo bisogno di configurare l’immagine initramfs.

Riconfigura l’immagine initramfs

Tra tutti gli script di avvio, initramfs cercherà il filesystem di root che hai specificato nel capitolo precedente.

Tuttavia, per decriptare il filesystem di root, avrà bisogno di invocare i moduli initramfs corretti, in particolare quello “cryptsetup-initramfs”. Nel vostro ambiente chroot, potete eseguire il seguente comando :

$ apt-get install cryptsetup-initramfs 

Per includere i moduli cryptsetup nella vostra immagine initramfs, assicuratevi di eseguire il comando “update-initramfs”.

$ update-initramfs -u -k all

Ecco!

Hai assemblato con successo tutti i pezzi necessari per creare un disco completamente criptato sul tuo sistema. Ora puoi riavviare il computer e dare un’occhiata al tuo nuovo processo di boot.

Boot on Encrypted Device

Al boot, la prima schermata che vedrai è il primo stadio di GRUB che cerca di decriptare il secondo stadio di GRUB.

Se vedi questa richiesta di password, significa che non hai errori nella configurazione dello stadio 1.

Nota: siate consapevoli che questa schermata potrebbe non seguire la vostra abituale disposizione della tastiera. Di conseguenza, se hai una richiesta di password errata, dovresti provare a fingere di avere una tastiera US o una AZERTY per esempio.

Quando fornisci la password corretta, ti verrà presentato il menu di GRUB.

Se vedete questa schermata, significa che la vostra fase 1 è riuscita ad aprire la fase 2. Puoi selezionare l’opzione “Ubuntu” e avviare il sistema.

Nella schermata successiva, ti viene chiesto di fornire nuovamente la passphrase.

Questo è abbastanza normale perché la tua partizione di avvio è criptata. Di conseguenza, avete bisogno di una passphrase per sbloccare la fase 2 e una per sbloccare l’intero filesystem di root.

Per fortuna, c’è un modo per evitare questo: avere un file chiave incorporato nell’immagine initramfs. Per questo, i collaboratori di ArchLinux hanno scritto un eccellente tutorial sull’argomento.

In questo caso, stiamo solo per fornire la passphrase e premere Invio.

Dopo un po’, quando il processo di init è finito, si dovrebbe presentare la schermata di blocco della vostra interfaccia utente!

Congratulazioni, hai crittografato con successo un intero sistema su Linux!

Crittografare il filesystem di root su un disco esistente

In alcuni casi, potresti dover crittografare un disco esistente senza la possibilità di rimuovere uno dei dischi sul tuo computer. Questo caso può accadere se hai un disco in garanzia, per esempio.

In questo caso, il processo è abbastanza semplice:

  • Fate una USB avviabile (o un dispositivo rimovibile) contenente una ISO della distribuzione di vostra scelta;
  • Utilizzate il dispositivo per avviare e accedere a un LiveCD della vostra distribuzione;
  • Dal LiveCD, identificate il disco rigido contenente la vostra distribuzione root e fatene un backup;
  • Montate la partizione primaria sulla cartella di vostra scelta e seguite le istruzioni del capitolo precedente;

Perché allora dovete usare un LiveCD se volete criptare un disco non rimovibile?

Se doveste criptare il vostro disco principale primario, dovreste smontarlo. Tuttavia, poiché è la partizione root del tuo sistema, non saresti in grado di smontarla, di conseguenza devi usare un LiveCD.

Crittografare il filesystem root dalla procedura guidata di installazione

In alcuni casi, alcuni distributori incorporano il processo di crittografia direttamente nella procedura guidata di installazione.

Se non stai cercando di trasferire un filesystem esistente da un sistema all’altro, potresti essere tentato di usare questa opzione.

Prendendo Ubuntu 20.04 come esempio, il processo di installazione suggerisce la crittografia del disco nella procedura guidata di configurazione del disco.

Se scegli questa opzione, avrai una configurazione simile a quella fatta nelle sezioni precedenti. Tuttavia, la maggior parte delle distribuzioni sceglie di non criptare la cartella “/boot”.

Se vuoi criptare la cartella “/boot”, ti consigliamo di leggere la prima sezione di questo tutorial.

Risoluzione dei problemi

Come l’open-source cambia costantemente, c’è la possibilità che non siate in grado di avviare il vostro sistema, anche se avete seguito attentamente i passi di questo tutorial.

Tuttavia, poiché le fonti di errore sono probabilmente infinite e specifiche per ogni utente, non avrebbe senso elencare ogni singolo problema che potete incontrare.

Tuttavia, la maggior parte delle volte, è abbastanza importante sapere in quale fase del processo di avvio si sta fallendo.

Se si vede una schermata con un prompt “grub rescue”, probabilmente significa che si è bloccati sulla fase 1, quindi che il bootloader non è stato in grado di individuare il disco contenente la seconda fase.

Se vi trovate in un prompt di initramfs, probabilmente significa che è successo qualcosa di sbagliato durante il processo di init :

  • Siete sicuri di aver specificato i filesystem da montare nei file crypttab e fstab?
  • Sei sicuro che tutti i moduli siano stati caricati nella tua immagine initramfs? Non vi mancano i moduli cryptsetup o lvm per esempio?

Di seguito ci sono alcune risorse che abbiamo trovato interessanti durante la scrittura di questo tutorial, potrebbero avere alcune risposte ai tuoi problemi :

  • Criptare un intero sistema: un tutorial simile per ArchLinux;
  • Crittografia manuale del sistema su Ubuntu: passaggi utilizzati per fare chroot in un filesystem di root.

Conclusione

In questo tutorial, hai imparato come si può criptare un intero filesystem di root, con la cartella “/boot”, utilizzando la specifica LUKS.

Hai anche imparato il processo di avvio di Linux e i diversi passaggi che il tuo sistema attraversa per lanciare il sistema operativo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Back to Top