DebianEncryptedFilesystem » Cronologia » Versione 4
Simone Piccardi, 21-12-2010 11:10
1 | 3 | Amministratore Truelite | h1. Come creare un filesystem cifrato su Debian |
---|---|---|---|
2 | |||
3 | 1 | Amministratore Truelite | In questo articolo vedremo come realizzare un filesystem cifrato da utilizzare per la registrazione dei dati che si desidera mantenere particolarmente protetti. Visto che una interpretazione della nuova normativa sulla privacy pare richiedere l'uso di un filesystem cifrato se i dati personali vengono mantenuti su un supporto rimuovibile, questo potrebbe avere una immediata applicazione pratica, in questa maniera infatti anche se il supporto venisse rubato non sarebbe possibile accedere al suo contenuto senza la conoscenza della password con cui lo si è protetto. |
4 | |||
5 | Le istruzioni faranno riferimento ad un sistema Debian; esse sono state provate su una Sid, ma il software citato dovrebbe essere disponibile anche su Sarge. In ogni caso le istruzioni, a parte quelle relative all'installazione dei vari programmi, dovrebbero essere facilmente applicabili a qualunque distribuzione. Il nostro scopo sarà allora quello di creare un filesystem cifrato su un file, e faremo riferimento al caso di una chiavetta USB; ma di nuovo i dati potrebbero usare qualunque altro tipo di supporto (purché dotato di capacità sufficiente). |
||
6 | |||
7 | Con il kernel 2.6 l'interfaccia per la creazione e l'utilizzo di filesystem cifrati è stata completamente rivoluzionata. Infatti la precedente interfaccia del cryptoloopback presentava notevoli problemi di sicurezza (si veda "questo articolo su LWN":http://lwn.net/Articles/67216/) oltre che essere basata su del codice poco mantenuto e con notevoli problemi di prestazioni. |
||
8 | 3 | Amministratore Truelite | |
9 | 4 | Simone Piccardi | Nel kernel 2.6 per realizzare questa funzionalità è stato usato il _device mapper_, una infrastruttura generica del kernel che consente di mappare (in varie forme) diverse parti di uno o più dispositivi a blocchi su un altro dispositivo virtuale, che diventa visible come risultato della mappatura. L'uso più comune di questa infrastruttura quello del RAID software e del Logical Volume Manager (LVM). |
10 | 1 | Amministratore Truelite | |
11 | Il nuovo supporto per la cifratura implementa una modalità di mappatura che permette di far passare l'accesso ad un dispositivo a blocchi (disco o altro) attraverso un algoritmo di cifratura; in questo modo i dati vengano scritti fisicamente sul dispositivo in forma cifrata, ma sono accessibili in chiaro quando vengono acceduti attraverso il dispositivo virtuale su cui questo è stato mappato. |
||
12 | |||
13 | 4 | Simone Piccardi | Se si utilizza un proprio kernel compilato dai sorgenti il primo passo è avere cura di abilitare il supporto per il _device mapper_, e all'interno di questo quello per il relativo modulo che fornisce per la cifratura dei dati; questo si fa nella sezione: |
14 | |||
15 | 1 | Amministratore Truelite | <pre> |
16 | Device Drivers --> Multi-device support (RAID and LVM). |
||
17 | 3 | Amministratore Truelite | </pre> |
18 | 4 | Simone Piccardi | |
19 | 1 | Amministratore Truelite | inoltre si dovranno abilitare i vari moduli degli algoritmi crittografici, che sono elencati nella sezione: |
20 | 4 | Simone Piccardi | |
21 | 1 | Amministratore Truelite | <pre> |
22 | Cryptographic options |
||
23 | </pre> |
||
24 | |||
25 | 4 | Simone Piccardi | in genere questo passaggio non è necessario con i kernel standard distribuiti da _Debian_, dove detti moduli sono già presenti. |
26 | |||
27 | Una volta che si disponga di un kernel con l'adeguato supporto il passo successivo è installare i programmi in user-space per la gestione del _device mapper_, il primo di questi è @dmsetup@ che si ottiene semplicemente con: |
||
28 | |||
29 | 1 | Amministratore Truelite | <pre> |
30 | apt-get install dmsetup |
||
31 | 3 | Amministratore Truelite | </pre> |
32 | 4 | Simone Piccardi | |
33 | Questo comando ci permette di vedere quali modalità di funzionamento del _device mapper_ sono disponibili nel kernel che sta girando, otterremo così un elenco delle stesse con: |
||
34 | |||
35 | 1 | Amministratore Truelite | <pre> |
36 | monk:/home/piccardi# dmsetup targets |
||
37 | 3 | Amministratore Truelite | striped v1.0.1 |
38 | 1 | Amministratore Truelite | linear v1.0.1 |
39 | error v1.0.1 |
||
40 | </pre> |
||
41 | 4 | Simone Piccardi | |
42 | 1 | Amministratore Truelite | A questo punto se vogliamo usare il supporto per la cifratura occorre inserire il relativo modulo, questo si fa con: |
43 | 4 | Simone Piccardi | |
44 | 3 | Amministratore Truelite | <pre> |
45 | 1 | Amministratore Truelite | monk:/home/piccardi# modprobe dm-crypt |
46 | 3 | Amministratore Truelite | </pre> |
47 | 4 | Simone Piccardi | |
48 | 3 | Amministratore Truelite | e potremo controllare che sia tutto a posto con: |
49 | 4 | Simone Piccardi | |
50 | 1 | Amministratore Truelite | <pre> |
51 | monk:/home/piccardi# dmsetup targets |
||
52 | 3 | Amministratore Truelite | crypt v1.1.0 |
53 | 1 | Amministratore Truelite | striped v1.0.1 |
54 | linear v1.0.1 |
||
55 | error v1.0.1 |
||
56 | </pre> |
||
57 | 4 | Simone Piccardi | |
58 | 1 | Amministratore Truelite | Il passo successivo è inserire i moduli per gli algoritmi di cifratura. Gli algoritmi sono molti e spesso la scelta è solo questione di gusti personali, nel nostro caso prenderemo l'AES, per cui dovremo caricare il relativo modulo con: |
59 | 4 | Simone Piccardi | |
60 | 3 | Amministratore Truelite | <pre> |
61 | monk:~# modprobe aes |
||
62 | 1 | Amministratore Truelite | </pre> |
63 | 4 | Simone Piccardi | |
64 | 1 | Amministratore Truelite | e potremo verificare la presenza del supporto con: |
65 | 4 | Simone Piccardi | |
66 | 1 | Amministratore Truelite | <pre> |
67 | monk:/home/piccardi# cat /proc/crypto |
||
68 | name : md5 |
||
69 | module : kernel |
||
70 | type : digest |
||
71 | blocksize : 64 |
||
72 | digestsize : 16 |
||
73 | |||
74 | name : aes |
||
75 | module : aes_i586 |
||
76 | type : cipher |
||
77 | 3 | Amministratore Truelite | blocksize : 16 |
78 | 1 | Amministratore Truelite | min keysize : 16 |
79 | 3 | Amministratore Truelite | max keysize : 32 |
80 | 1 | Amministratore Truelite | </pre> |
81 | 4 | Simone Piccardi | |
82 | Per creare un filesystem cifrato si può usare direttamente dmsetup, ma il procedimento per eseguire una mappatura a mano è piuttosto macchinoso, per questo il sistema più semplice installare @cryptsetup@, un ulteriore programma fornito dallo stesso autore del supporto per la cifratura: |
||
83 | |||
84 | 1 | Amministratore Truelite | <pre> |
85 | apt-get install cryptsetup |
||
86 | </pre> |
||
87 | 4 | Simone Piccardi | |
88 | 1 | Amministratore Truelite | A questo punto occorre scegliere dove si intende creare il nostro filesystem cifrato. Se si dispone di un dispositivo ad hoc (ad esempio una chiavetta USB) si potrà cifrare l'intero dispositivo con il comando: |
89 | 4 | Simone Piccardi | |
90 | 1 | Amministratore Truelite | <pre> |
91 | monk:~# cryptsetup -y create reserved /dev/sda1 |
||
92 | </pre> |
||
93 | |||
94 | 4 | Simone Piccardi | L'opzione @-y@ è quella che richiede una doppia immissione della password (la seconda volta è per conferma, se non si usa la stessa il comando fallisce) con la quale saranno cifrati i contenuti. La prima volta che si utilizza un dispositivo cifrato è importante usare questa opzione per evitare di usare una password con eventuali errori di battitura, senza la quale non si potrebbero più recuperare i dati in un secondo tempo. |
95 | 1 | Amministratore Truelite | |
96 | 4 | Simone Piccardi | Fatto questo si potrà notare come sotto la directory @/dev/mapper@ sarà comparso il file reserved che è il dispositivo su cui andremo ad operare in chiaro. Si tenga presente che il funzionamento del device mapper cifrato non esegue nessun controllo sul contenuto del dispositivo (o del file) su cui abbiamo memorizzato i nostri dati; l'uso di @cryptsetup@ create si limita a creare la mappatura e a cifrare-decifrare tutto quello che scriviamo/leggiamo con la password specificata. La cifratura è del tutto trasparente per i programmi che accedono al dispositivo sotto @/dev/mapper@ come se fosse un qualunque altro dispositivo (perciò per poterlo utilizzare dovrà essere formattato con un filesystem, montato, ecc.). |
97 | 1 | Amministratore Truelite | |
98 | 4 | Simone Piccardi | L'uso di @cryptsetup@ permette di creare un dispositivo cifrato solo su una partizione o dispositivo fisico; il problema è che non funziona con un semplice file come per il supporto dei filesystem cifrati dei kernel precedenti. Se si vuole dedicare un intero dispositivo ad un filesystem cifrato questo non è un problema, ed anzi si avranno senz'altro delle prestazioni superiori, qualora però si voglia usare un dispositivo (ad esempio una chiavetta USB) anche per altro tutto questo diventa un problema. |
99 | 1 | Amministratore Truelite | |
100 | 4 | Simone Piccardi | Per risolvere anche questa difficoltà si può allora usare ancora il dispositivo di loopback, che in questo caso non si incaricherà più di gestire la cifratura (con i problemi che questo comportava) ma semplicemente permetterà di usare @/dev/loop@ come dispositivo associato al contenuto di un certo file. |
101 | |||
102 | 1 | Amministratore Truelite | In questo caso il primo passo da fare è creare il file che conterrà i nostri dati; per questo il file deve essere inizializzato con degli zeri. Per avere un filesystem cifrato da 50Mib si potrà allora usare il seguente comando per creare un file vuoto di queste dimensioni: |
103 | 4 | Simone Piccardi | |
104 | 1 | Amministratore Truelite | <pre> |
105 | dd if=/dev/zero of=cryptofile bs=1024k count=50 |
||
106 | </pre> |
||
107 | 4 | Simone Piccardi | |
108 | a questo punto occorre associare il file ad un dispositivo di loopback; questo si fa con il programma @losetup@, usando un comando del tipo: |
||
109 | |||
110 | 1 | Amministratore Truelite | <pre> |
111 | 3 | Amministratore Truelite | losetup /dev/loop1 cryptofile |
112 | 1 | Amministratore Truelite | </pre> |
113 | 4 | Simone Piccardi | |
114 | a questo punto si può riutilizzare il supporto crittografico del _device mapper_ usando il device @/dev/loop1@ appena creato con il comando: |
||
115 | |||
116 | |||
117 | 3 | Amministratore Truelite | <pre> |
118 | 1 | Amministratore Truelite | cryptsetup -y create reserved /dev/loop1 |
119 | 3 | Amministratore Truelite | </pre> |
120 | 1 | Amministratore Truelite | |
121 | 4 | Simone Piccardi | e di nuovo avremo il dispositivo @/dev/mapper/reserved@ sul quale operare in chiaro, mentre i dati saranno cifrati all'interno del nostro file. |
122 | 1 | Amministratore Truelite | |
123 | 4 | Simone Piccardi | Il comando cryptsetup prevede diverse altre opzioni, in particolare si può usare -c per indicare il nome dell'algoritmo di cifratura da utilizzare (fra quelli eventualmente presenti in @/proc/crypto@). Di default viene usato proprio l'AES, che è il motivo per cui non si è utilizzata questa opzione. |
124 | |||
125 | 1 | Amministratore Truelite | Inoltre si può verificare l'avvenuta mappatura del dispositivo con il comando: |
126 | 4 | Simone Piccardi | |
127 | 3 | Amministratore Truelite | <pre> |
128 | 1 | Amministratore Truelite | monk:/home/piccardi# dmsetup ls |
129 | vg-usr (254, 0) |
||
130 | vg-var (254, 1) |
||
131 | reserved (254, 3) |
||
132 | vg-home (254, 2) |
||
133 | </pre> |
||
134 | che ci mostra come insieme ai volumi logici di LVM sia presente anche il nostro dispositivo cifrato; si può verificare lo stato di quest'ultimo con: |
||
135 | 3 | Amministratore Truelite | <pre> |
136 | 1 | Amministratore Truelite | monk:/home/piccardi# cryptsetup status /dev/mapper/reserved |
137 | 3 | Amministratore Truelite | /dev/mapper//dev/mapper/reserved is active: |
138 | 1 | Amministratore Truelite | cipher: aes-cbc-plain |
139 | keysize: 256 bits |
||
140 | device: /dev/loop1 |
||
141 | offset: 0 sectors |
||
142 | size: 102400 sectors |
||
143 | mode: read/write |
||
144 | </pre> |
||
145 | 4 | Simone Piccardi | |
146 | 1 | Amministratore Truelite | Una volta che abbiamo definito il nostro dispositivo cifrato lo potremo formattare; se scegliamo di usare un filesystem ext3 potremo farlo con il comando: |
147 | 4 | Simone Piccardi | |
148 | 1 | Amministratore Truelite | <pre> |
149 | monk:~# mkfs.ext3 /dev/mapper/reserved |
||
150 | mke2fs 1.36-rc5 (27-Jan-2005) |
||
151 | Filesystem label= |
||
152 | OS type: Linux |
||
153 | Block size=1024 (log=0) |
||
154 | Fragment size=1024 (log=0) |
||
155 | 12824 inodes, 51200 blocks |
||
156 | 2560 blocks (5.00%) reserved for the super user |
||
157 | First data block=1 |
||
158 | 7 block groups |
||
159 | 8192 blocks per group, 8192 fragments per group |
||
160 | 1832 inodes per group |
||
161 | Superblock backups stored on blocks: |
||
162 | 8193, 24577, 40961 |
||
163 | |||
164 | Writing inode tables: done |
||
165 | Creating journal (4096 blocks): done |
||
166 | Writing superblocks and filesystem accounting information: done |
||
167 | |||
168 | This filesystem will be automatically checked every 24 mounts or |
||
169 | 180 days, whichever comes first. Use tune2fs -c or -i to override. |
||
170 | </pre> |
||
171 | 4 | Simone Piccardi | |
172 | 1 | Amministratore Truelite | L'ultimo passo è montare il nostro dispositivo che contiene il filesystem cifrato; per questo sarà sufficiente il comando: |
173 | 4 | Simone Piccardi | |
174 | 1 | Amministratore Truelite | <pre> |
175 | mount /dev/mapper/reserved /mnt/crypto |
||
176 | </pre> |
||
177 | 4 | Simone Piccardi | |
178 | 1 | Amministratore Truelite | e potremo operarvi creando nuovi file. |
179 | 3 | Amministratore Truelite | |
180 | 1 | Amministratore Truelite | Una volta completate le nostre operazioni potremo smontare il disco cifrato e poi cancellare la mappatura con: |
181 | 4 | Simone Piccardi | |
182 | 1 | Amministratore Truelite | <pre> |
183 | cryptsetup remove reserved /dev/loop1 |
||
184 | </pre> |
||
185 | 4 | Simone Piccardi | |
186 | 1 | Amministratore Truelite | infine si potrà rimuovere, se si è usato un file, l'associazione dello stesso con il dispositivo di loopback con: |
187 | 4 | Simone Piccardi | |
188 | 1 | Amministratore Truelite | <pre> |
189 | 3 | Amministratore Truelite | losetup -d /dev/loop1 |
190 | 1 | Amministratore Truelite | </pre> |
191 | 4 | Simone Piccardi | |
192 | A questo punto per poter riaccedere di nuovo al contenuto in chiaro del filesystem dovremo ripetere la creazione del dispositivo cifrato con il comando @cryptsetup@ create (ed eventualmente la creazione del loopback). In questo caso non sarà più necessario usare l'opzione @-y@ in quanto la password dovrà essere quella usata in precedenza. |
||
193 | 1 | Amministratore Truelite | |
194 | Si tenga presente che il device mapper non controlla mai se la password è giusta o meno, si limita a creare una mappatura fra un dispositivo fisico ed uno virtuale cifrando (se si scrive) o decifrando (se si legge) con la password che gli si è data. Pertanto ci si accorgerà di un eventuale errore di digitazione della password solo quando si andrà a cercare di montare il dispositivo, ottenendo un errore di filesystem non riconosciuto, in quanto i dati, non avendo usato la password giusta, non saranno decifrati correttamente e non avranno alcun significato. |
||
195 | |||
196 | Alcune risorse: |
||
197 | |||
198 | 3 | Amministratore Truelite | "Home page del _crypto device mapper_":http://www.saout.de/misc/dm-crypt/ |
199 | 1 | Amministratore Truelite | |
200 | 3 | Amministratore Truelite | "Wiki con HOWTO e documentazione":http://www.saout.de/tikiwiki/tiki-index.php |
201 | 1 | Amministratore Truelite | |
202 | 3 | Amministratore Truelite | "Una discussione sulla nuova interfaccia":http://kerneltrap.org/node/view/2433 |
203 | 1 | Amministratore Truelite | |
204 | 3 | Amministratore Truelite | "Una guida sui dischi cifrati in Debian":http://deb.riseup.net/storage/encryption/dmcrypt/ |