Differenze tra le versioni di "Installare Arch Linux in una partizione cifrata"

Da GolemWiki.
Jump to navigation Jump to search
m (aggiornamenti minori)
(2 versioni intermedie di un altro utente non mostrate)
Riga 1: Riga 1:
Impedire che i nostri dati possano cadere nelle mani delle persone sbagliate è un'esigenza che sta diventando sempre più forte. Esistono tecnologie relativamente semplici e sicure per mettere al sicuro i nostri dati come l'utilizzo di un filesystem cifrato.
+
Impedire che i nostri dati possano cadere nelle mani delle persone sbagliate è un'esigenza che sta diventando sempre più forte. Esistono tecnologie relativamente semplici da usare e allo stesso tempo molto sicure per mettere al sicuro i nostri dati, come l'utilizzo di un filesystem cifrato.
  
=Prerequisiti=
+
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), che può quindi essere utilizzata come ''token'' di accesso.
==Requisiti e avvertimenti==
 
''Competenze di base:'' partizionamento, montaggio e smontaggio di device e node da riga di comando; familiarità con l'installazione di ArchLinux.
 
  
''Requisiti della macchina:'' Qualsiasi computer supportato da Arch Linux (≥ Pentium 4 con 1 GB di RAM va più che bene), con lettore CD ed un disco fisso.
+
= Prerequisiti =
 +
== Requisiti e avvertimenti ==
 +
* Competenze di base: partizionamento, montaggio e smontaggio di device e node da riga di comando; familiarità con l'installazione di ArchLinux.
 +
* Requisiti: dal 2010 circa, quasi tutti i processori dispongono di acceleratori hardware per la crittografia.
 +
Processori più vecchi possono comunque essere impiegati, anche se hanno prestazioni leggermente inferiori, che nell'uso quotidiano non sono comunque percepibili.
 +
* Crittografia: gli odierni metodi di cifratura non possono essere forzati nella loro essenza, un furto di dati crittografati è imputabile solamente a bug o a mancanze umane (ottenere la chiave di cifratura rubandola fisicamente oppure estorcendola da chi ne è in possesso).
  
''Sulla crittografia:'' gli odierni metodi di cifratura 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 estorcendola da chi ne è in possesso).
+
== Il concetto ==
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).
+
La creazione di un disco crittografato richiede due passaggi:
  
==Il concetto==
+
# Creazione del disco (partizionamento di un disco fisico o creazione di un disco [File Img|immagine virtuale])
La creazione di un disco crittografato richiede due passaggi essenziali:
+
# Formattazione del disco (o della partizione) utilizzando una chiave di cifratura
  
# Creazione del disco (partizionamento di un disco fisico o creazione di un disco immagine virtuale, ad esempio con dd)
+
La lettura/scrittura di un disco crittografato consiste in altrettanti pochi e semplici passaggi:
# 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
 
# 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)
+
# Montaggio del device node (che verrà utilizzato poi in maniera trasparente come una normalissima partizione)
  
=Prima parte: Creazione delle partizioni e installazione del sistema=
+
= Prima parte: Creazione delle partizioni e installazione del sistema =
 
==Partizionamento del disco==
 
==Partizionamento del disco==
 
Avviare il disco live di installazione di Arch Linux. Prima di installare il sistema bisogna ovviamente partizionare il disco.
 
Avviare il disco live di installazione di Arch Linux. Prima di installare il sistema bisogna ovviamente partizionare il disco.
Riga 26: Riga 27:
 
   # fdisk -l
 
   # fdisk -l
 
   # cfdisk /dev/sda
 
   # 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==
+
Riflettere bene su come si partiziona il disco: ridimensionare delle partizioni cifrate in un secondo momento è una procedura laboriosa, a meno di non utilizzare una delle recenti versioni di [https://kde.org/applications/system/org.kde.partitionmanager KDE Partition Manager] (2020).
 +
Tuttavia, si noti che da qualche tempo a questa parte (Linux Kernel 3.2 (2015)) si può utilizzare stabilmente [[btrfs]] su LUKS, e si può creare un'unica grande partizione cifrata, suddivisa poi in diversi sottovolumi [[btrfs]].
 +
 
 +
== 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:
 
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
 
   $ dd if=/dev/urandom of=chiave.key bs=1K count=10
 +
oppure
 +
  $ openssl rand -base64 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.
 
È 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:
+
Creata la chiave, formattare così la partizione di root:
 +
 
 
   # cryptsetup -c aes-xts-plain64 -s 512 luksFormat /dev/sda2 /path/chiave.key
 
   # 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==
+
Dove ''/path/chiave.key'' è il percorso al file contente la chiave di cifratura.
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.
+
Se la chiave di cifratura non viene fornita, sarà richiesta una password.
 +
 
 +
Il programma chiederà di confermare l'operazione rispondendo <code>YES</code> (maiuscolo) alla richiesta di formattazione.
 +
 
 +
Ripetere la procedura per tutte le (altre eventuali) 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, aprirlo con:
 
   # cryptsetup --key-file /path/chiave.key luksOpen /dev/sda2 rootfs
 
   # 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==
+
''rootfs'' è il nome utilizzeremo per accedere alla partizione cifrata in maniera trasparente, e che sarà utilizzato per creare il link di accesso in ''/dev/mapper/rootfs''.
 +
 
 +
== 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:
 
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
 
   # mkfs.ext4 /dev/mapper/rootfs
 
   # mount /dev/mapper/rootfs /mnt
 
   # mount /dev/mapper/rootfs /mnt
Dove /dev/mapper/rootfs è il nome assegnato al device node in precendenza con ''cryptsetup luksOpen''.
+
Dove ''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.
 
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=
+
= Seconda parte: Rendere la procedura automatica al boot =
==Configurare GRUB2==
+
== Configurare GRUB2 ==
 
(Si suppone di essere ancora nell'ambiente chroot dell'installazione)
 
(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:
 
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"
 
   GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:cryptroot cryptkey=/dev/sdb1:auto:chiave.key"
 
Dopodichè, aggiornare il menu di GRUB2:
 
Dopodichè, aggiornare il menu di GRUB2:
 
   # grub-mkconfig -o /boot/grub/grub.cfg
 
   # 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).
 
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==
+
== Configurare mkinitcpi o==
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
+
Per far sì che il kernel possa decifrare il filesystem in fase di avvio, aggiungere i seguenti hooks nella riga corrispondente del file ''/etc/mkinitcpio.conf'':
   # mkinitcpio -p linux
+
encrypt shutdown
 +
quindi rigenerare l'init ram disk con:
 +
   # mkinitcpio -P
  
==Configurare cryptsetup==
+
== Configurare cryptsetup ==
 
Per montare automaticamente le partizioni cifrate /home, /var, ecc... modificare il file ''/etc/crypttab'' e aggiungere la seguente riga:
 
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
 
   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).
 
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==
+
== 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''.
 
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:
 
Aprire ''/etc/fstab'' e modificarlo come segue:
 
   /dev/mapper/homefs /home ext4 rw,relatime,data=ordered 0 2
 
   /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...
 
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==
+
Ripetere l'operazione per tutte le partizioni.
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!
+
 
 +
== 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.
 
Per qualsiasi informazione più approfondita, si rimanda alla pagina del wiki di Arch Linux in inglese.
 +
 +
= EncFS: un'alternativa =
 +
Cifrare una directory può essere un'alternativa alla cifratura di un intero device.
 +
EncFS è un filesystem user-space montabile tramite FUSE che permette di effettuare questa operazione.
 +
Le diverse caratteristiche intrinseche rispetto ad un filesystem loopback determinano però diversi pregi e difetti:
 +
 +
* Pro
 +
** Selezionare selettivamente i contenuti da cifrare, rispetto ad avere un device completamente cifrato, appesantisce meno il lavoro della CPU specialmente quando si utilizzano processori datati privi del set di istruzioni AES.
 +
** Dimensioni modificabili: un file system vuoto EncFS è composto da qualche dozzina di byte e può crescere a qualsiasi dimensione senza bisogno di essere riformattato. Con un dispositivi di cifratura a blocchi, si alloca un filesystem in anticipo con le dimensioni desiderate.
 +
** Backup automatici: un filesystem EncFS può essere salvato con una politica per file. Un programma di backup è in grado di rilevare quali file sono cambiati, anche se non sarà in grado di decifrarli.
 +
** Stratificazione/Separazione di fiducia: encfs può essere messo in cima ad altri filesystem al fine di aggiungere la crittografia a file system non cifrati.
 +
** Lavora a livello utente, non richiede permessi di amministratore
 +
* Contro
 +
** Lavora a livello utente, non richiede permessi di amministratore, e non permette di cifrare l'intera installazione, ma solo i file selezionati
 +
** Meta-dati visibili: chiunque abbia accesso ai file crittografati può conoscere alcune informazioni (numero di file, permessi, dimensione)
 +
 +
== Configurazione ==
 +
Anche in questo caso esiste il modo per poter montare automaticamente una cartella cifrata all'avvio del sistema.
 +
 +
Dato che non è possibile passare opzioni all'eseguibile encfs su fstab è necessario creare un wrapper, cioè uno script da rendere eseguibile (es. ''/home/user/bin/encfs.sh'') che vada a recuperare la password da un file (es. ''encfs_password''), magari contenuto in una chiavetta USB anch'essa montata automaticamente all'avvio.
 +
 +
Wrapper
 +
#!/bin/sh
 +
encfs --public --extpass="cat /mnt/USB/encfs_password" $*
 +
 +
A questo punto è possibile aggiungere all'''/etc/fstab'' le seguenti righe.
 +
 +
# Montaggio automatico della penna USB all'avvio
 +
UUID=cafebabe-b00b5-deadbeef /mnt/USB auto defaults,auto 0 0
 +
 +
# Richiamo del wrapper
 +
/home/me/encfs.sh#/home/me/.encrypted /home/me/decrypted fuse rw,user,auto 0 0
  
 
=Risorse=
 
=Risorse=
https://wiki.archlinux.org/index.php/Dm-crypt
+
* https://wiki.archlinux.org/index.php/Dm-crypt
 
+
* https://wiki.archlinux.org/index.php/LUKS
https://wiki.archlinux.org/index.php/LUKS
 
  
 
[[Category: Howto]]
 
[[Category: Howto]]

Versione delle 16:22, 29 feb 2020

Impedire che i nostri dati possano cadere nelle mani delle persone sbagliate è un'esigenza che sta diventando sempre più forte. Esistono tecnologie relativamente semplici da usare e allo stesso tempo molto sicure per mettere al sicuro i nostri dati, come l'utilizzo di un filesystem cifrato.

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), che può quindi essere utilizzata come token di accesso.

Prerequisiti

Requisiti e avvertimenti

  • Competenze di base: partizionamento, montaggio e smontaggio di device e node da riga di comando; familiarità con l'installazione di ArchLinux.
  • Requisiti: dal 2010 circa, quasi tutti i processori dispongono di acceleratori hardware per la crittografia.

Processori più vecchi possono comunque essere impiegati, anche se hanno prestazioni leggermente inferiori, che nell'uso quotidiano non sono comunque percepibili.

  • Crittografia: gli odierni metodi di cifratura non possono essere forzati nella loro essenza, un furto di dati crittografati è imputabile solamente a bug o a mancanze umane (ottenere la chiave di cifratura rubandola fisicamente oppure estorcendola da chi ne è in possesso).

Il concetto

La creazione di un disco crittografato richiede due passaggi:

  1. Creazione del disco (partizionamento di un disco fisico o creazione di un disco [File Img|immagine virtuale])
  2. Formattazione del disco (o della partizione) utilizzando una chiave di cifratura

La lettura/scrittura di un disco crittografato consiste in altrettanti pochi e semplici passaggi:

  1. Associazione del disco ad un device node tramite la chiave di cifratura
  2. Montaggio del device node (che verrà utilizzato poi in maniera trasparente come una normalissima partizione)

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

Riflettere bene su come si partiziona il disco: ridimensionare delle partizioni cifrate in un secondo momento è una procedura laboriosa, a meno di non utilizzare una delle recenti versioni di KDE Partition Manager (2020). Tuttavia, si noti che da qualche tempo a questa parte (Linux Kernel 3.2 (2015)) si può utilizzare stabilmente btrfs su LUKS, e si può creare un'unica grande partizione cifrata, suddivisa poi in diversi sottovolumi btrfs.

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

oppure

 $ openssl rand -base64 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 di root:

 # 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. Se la chiave di cifratura non viene fornita, sarà richiesta una password.

Il programma chiederà di confermare l'operazione rispondendo YES (maiuscolo) alla richiesta di formattazione.

Ripetere la procedura per tutte le (altre eventuali) 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, aprirlo con:

 # cryptsetup --key-file /path/chiave.key luksOpen /dev/sda2 rootfs

rootfs è il nome utilizzeremo per accedere alla partizione cifrata in maniera trasparente, e che sarà utilizzato per creare il link di accesso in /dev/mapper/rootfs.

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 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 mkinitcpi o

Per far sì che il kernel possa decifrare il filesystem in fase di avvio, aggiungere i seguenti hooks nella riga corrispondente del file /etc/mkinitcpio.conf:

encrypt shutdown

quindi rigenerare l'init ram disk con:

 # mkinitcpio -P

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.

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.

EncFS: un'alternativa

Cifrare una directory può essere un'alternativa alla cifratura di un intero device. EncFS è un filesystem user-space montabile tramite FUSE che permette di effettuare questa operazione. Le diverse caratteristiche intrinseche rispetto ad un filesystem loopback determinano però diversi pregi e difetti:

  • Pro
    • Selezionare selettivamente i contenuti da cifrare, rispetto ad avere un device completamente cifrato, appesantisce meno il lavoro della CPU specialmente quando si utilizzano processori datati privi del set di istruzioni AES.
    • Dimensioni modificabili: un file system vuoto EncFS è composto da qualche dozzina di byte e può crescere a qualsiasi dimensione senza bisogno di essere riformattato. Con un dispositivi di cifratura a blocchi, si alloca un filesystem in anticipo con le dimensioni desiderate.
    • Backup automatici: un filesystem EncFS può essere salvato con una politica per file. Un programma di backup è in grado di rilevare quali file sono cambiati, anche se non sarà in grado di decifrarli.
    • Stratificazione/Separazione di fiducia: encfs può essere messo in cima ad altri filesystem al fine di aggiungere la crittografia a file system non cifrati.
    • Lavora a livello utente, non richiede permessi di amministratore
  • Contro
    • Lavora a livello utente, non richiede permessi di amministratore, e non permette di cifrare l'intera installazione, ma solo i file selezionati
    • Meta-dati visibili: chiunque abbia accesso ai file crittografati può conoscere alcune informazioni (numero di file, permessi, dimensione)

Configurazione

Anche in questo caso esiste il modo per poter montare automaticamente una cartella cifrata all'avvio del sistema.

Dato che non è possibile passare opzioni all'eseguibile encfs su fstab è necessario creare un wrapper, cioè uno script da rendere eseguibile (es. /home/user/bin/encfs.sh) che vada a recuperare la password da un file (es. encfs_password), magari contenuto in una chiavetta USB anch'essa montata automaticamente all'avvio.

Wrapper

#!/bin/sh
encfs --public --extpass="cat /mnt/USB/encfs_password" $*

A questo punto è possibile aggiungere all'/etc/fstab le seguenti righe.

# Montaggio automatico della penna USB all'avvio
UUID=cafebabe-b00b5-deadbeef /mnt/USB auto defaults,auto 0 0
# Richiamo del wrapper 
/home/me/encfs.sh#/home/me/.encrypted /home/me/decrypted fuse rw,user,auto 0 0

Risorse