Progetto

Generale

Profilo

EncryptedFilesystemUsingLUKS » Cronologia » Versione 12

Simone Piccardi, 06-12-2016 14:11

1 8 Amministratore Truelite
h1. Come creare un filesystem cifrato usando LUKS
2 1 Amministratore Truelite
3 8 Amministratore Truelite
"LUKS":http://luks.endorphin.org/ è un acronimo di "Linux Unified Key Setup" e si propone come lo standard per la crittografia dei dischi in sistemi linux (e non solo), offrendo un formato standard "on-disc", la possibilità di avere più di una coppia chiave-passphrase per l'accesso ed una gestione sicura di tutte le chiavi.
4 1 Amministratore Truelite
5 12 Simone Piccardi
Un disco criptato con LUKS, nel caso lo si sia formattato con una filesystem compatibile (es. vfat) è accessibile anche dai sistemi Windows, usando "FreeOTFE":http://www.freeotfe.org/. Per utilizzarlo è necessaria una versione del programma @cryptsetup@ (usato anche per la cifratura diretta con ''dm-crypt'') che lo supporti, ma questa è ormai disponibile su tutte le distribuzioni recenti. Se ne può comunque verificare la presenza con il comando @cryptsetup --help@ controllando in coda la presenza delle opzioni relative a LUKS. Nel caso in cui il comando non fosse presente, su Debian lo si può installare semplicemente con:
6 9 Simone Piccardi
7 1 Amministratore Truelite
<pre>
8 10 Simone Piccardi
apt-get install cryptsetup
9 9 Simone Piccardi
</pre>
10 8 Amministratore Truelite
11 12 Simone Piccardi
A questo punto è possibile iniziare il lavoro di preparazione del dispositivo, nel nostro esempio prenderemo il caso una chiavetta USB rilevata dal sistema come @/dev/sdc@.
12 1 Amministratore Truelite
13 12 Simone Piccardi
La prima cosa da fare è verificare l'affidabilità del dispositivo ed, al tempo stesso, riempire tutto lo spazio disponibile con dei dati casuali rendendo di fatto molto più difficoltosi eventuali tentativi di attacco e compromissione del filesystem cifrato che verrà creato in seguito. Prima di iniziare, va tenuto presente il fatto che a seconda della dimensione del disco, questo processo può richiedere molte ore, quindi se dovete lanciarlo su di un disco molto grande, vi conviene farlo prima di andare a dormire.
14 1 Amministratore Truelite
15
<pre>
16 12 Simone Piccardi
badblocks -c 10240 -s -w -t random -v /dev/sdc
17 2 Amministratore Truelite
</pre>
18 1 Amministratore Truelite
19 10 Simone Piccardi
Se siete particolarmente paranoici potete utilizzare @/dev/urandom@ come sorgente di dati casuali e riempirci il disco. La casualità dei dati sarà migliore rispetto a quella del metodo precedente, ma l'operazione farà un uso intensivo della CPU e richiederà ancora più tempo. Il comando da eseguire è: 
20 1 Amministratore Truelite
21 9 Simone Piccardi
Il comando da eseguire è:
22 1 Amministratore Truelite
<pre>
23 12 Simone Piccardi
dd if=/dev/urandom of=/dev/sdc
24 9 Simone Piccardi
</pre>
25 8 Amministratore Truelite
26 12 Simone Piccardi
Successivamente va partizionato il disco. In questo caso l'obiettivo è di creare un'unica partizione che occupi tutto lo spazio disponibile e per farlo ci sono diverse alternative, sia da linea di comando come @fdisk@ o @cfdisk@ che grafiche come @gparted@ e @qtparted@. Si supponga comunque di aver creata una sola partizione, riconosciuta dal sistema come @/dev/sdc1@. 
27 1 Amministratore Truelite
28 10 Simone Piccardi
A questo punto è possibile cifrare la partizione con LUKS e poi "agganciarla" al _device-mapper_, in modo che ''dm-crypt'' possa presentarla in maniera "trasparente" al sistema. E' molto importante la scelta di una passphrase abbastanza lunga e complessa poiché l'utilizzo di una frase corta e/o facilmente indovinabile vanificherebbe l'utilizzo della crittografia.
29 9 Simone Piccardi
30 1 Amministratore Truelite
I comandi da eseguire sono quindi:
31 9 Simone Piccardi
32 8 Amministratore Truelite
<pre>
33 12 Simone Piccardi
cryptsetup --verbose --verify-passphrase luksFormat /dev/sdc1
34
cryptsetup luksOpen /dev/sdc1 sdc1
35 1 Amministratore Truelite
</pre>
36
37 9 Simone Piccardi
Se tutto è andato a buon fine, l'esecuzione del comando @ls -l /dev/mapper/@ dovrebbe restituire il seguente output, confermando l'avvenuto "aggancio" della partizione criptata al device mapper: 
38 1 Amministratore Truelite
39
<pre>
40
total 0
41 4 Amministratore Truelite
crw------- 1 root root 10, 63 Jul 16 01:34 control
42 12 Simone Piccardi
brw-r----- 1 root root 253, 0 Jul 16 01:52 sdc1
43 1 Amministratore Truelite
</pre>
44
45
Va quindi creato un filesystem sulla partizione criptata:
46 9 Simone Piccardi
47 5 Amministratore Truelite
<pre>
48 12 Simone Piccardi
mkfs.ext3 -j -m 1 /dev/mapper/sdc1
49 1 Amministratore Truelite
</pre>
50
51
e sarà possibile montarlo con:
52 9 Simone Piccardi
53 1 Amministratore Truelite
<pre>
54 12 Simone Piccardi
mount /dev/mapper/sdc1 /mnt
55 1 Amministratore Truelite
</pre>
56
57
mentre i comandi per smontare filesystem e partizione criptata sono:
58
59
<pre>
60
umount /mnt
61 12 Simone Piccardi
cryptsetup luksClose /dev/mapper/sdc1
62 1 Amministratore Truelite
</pre>
63
64 12 Simone Piccardi
Le distribuzioni sufficientemente moderne usano ??hal??, ??d-bus?? e ??gnome-volume-manager?? (o l'equivalente per KDE) per la gestione dei volumi disponibili nel sistema: quando viene collegata al sistema la chiavetta USB contenente la partizione crittografata con LUKS, questa viene riconosciuta e compare una finestra che chiede di inserire la passphrase.
65 1 Amministratore Truelite
Se la passphrase inserita è corretta, la partizione viene montata e sarà possibile utilizzarla normalmente da tutte le applicazioni.
66 10 Simone Piccardi
67 12 Simone Piccardi
Una delle funzionalità più interessanti di LUKS, che lo rende preferibile rispetto all'uso diretto di ''dm-crypt'' come illustrato in [[UsbKeyInstallation]] è che il sistema consente l'uso di più password (fino ad un massimo di 8) che possono essere aggiunte o rimosse (posto che almeno una resti presente per poter accedere al dispositivo). Il caso più comune è quello in cui si vuole aggiungere una nuova password o cambiare quella esistente, che si realizza  comunque per con una aggiunta seguita da una rimozione.
68 10 Simone Piccardi
69
Il comando che consente di aggiungere una passphrase è il seguente:
70
71
<pre>
72 12 Simone Piccardi
cryptsetup luksAddKey /dev/sdc1
73 10 Simone Piccardi
</pre>
74
75
verrà chiesta una delle passphrase presenti (all'inizio ce ne è una sola, quella impostata in fase di creazione, cui viene sempre assegnato l'indice 0) per sbloccare l'accesso e poi l'immissione due volte della nuova passwphrase. La passphrase sarà inserita nel primo degli slot disponibili (nel caso dell'esempio, se aggiunta dopo la creazione, questo sarà quello con indice 1) e potrà essere utilizzata in maniera equivalente a tutte quelle presenti. Se lo scopo non era quello di aggiungere una passhprase, ma quello di cambiare la precedente, si potrà a questo punto passare alla rimozione di quella non voluta, cancellando il relativo slot.
76
77
Per individuare lo slot si può usare il comando @cryptsetup luksDump@, ottenendo un risultato del tipo:
78
<pre>
79 12 Simone Piccardi
cryptsetup luksDump /dev/sdc1
80
LUKS header information for /dev/sdc1
81 10 Simone Piccardi
82
...
83
84
Key Slot 0: ENABLED
85
        Iterations:             182965
86
        Salt:                   50 6d 67 70 63 33 19 c6 41 e7 c1 55 b6 02 49 89 
87
                                54 79 7b 56 4e b6 78 92 c8 f8 66 e8 bb e6 a8 f1 
88 1 Amministratore Truelite
        Key material offset:    8
89 10 Simone Piccardi
        AF stripes:             4000
90
Key Slot 1: ENABLED
91
        Iterations:             144406
92
        Salt:                   56 35 b1 33 8d c9 0e b8 ba 10 a0 1c 4f 16 2b 8c 
93
                                d3 ec fe c8 5f 7f 23 74 79 ab 5d 96 ec 4c 4c 4a 
94
        Key material offset:    264
95
        AF stripes:             4000
96
Key Slot 2: DISABLED
97
Key Slot 3: DISABLED
98
Key Slot 4: DISABLED
99
Key Slot 5: DISABLED
100
Key Slot 6: DISABLED
101
Key Slot 7: DISABLED
102
</pre>
103
104 11 Simone Piccardi
e a questo punto la rimozione della passhprase indesiderata (nello specifico quella dello slot 0) sarà effettuata con:
105 10 Simone Piccardi
<pre>
106 12 Simone Piccardi
cryptsetup luksKillSlot /dev/sdc1 0
107 10 Simone Piccardi
</pre>