Volumi criptati LUKS - Creazione e uso con cryptmount: differenze tra le versioni

corretta gerarchia titoli
Nessun oggetto della modifica
(corretta gerarchia titoli)
Riga 1: Riga 1:
{{Versioni compatibili|Debian Lenny 5.0<br/>Debian Squeeze|}}
{{Versioni compatibili|Debian Lenny 5.0<br/>Debian Squeeze|}}
=Introduzione=
== Introduzione ==
Generalmente si tende a pensare che un accesso indesiderato ai nostri dati possa avvenire da un'intrusione da rete. Certamente questo è lo scenario tipico, ma non bisognerebbe scordare che il più delle volte per accedere a un dato contenuto su un certo supporto, basta avere accesso "fisico" al supporto stesso.
Generalmente si tende a pensare che un accesso indesiderato ai nostri dati possa avvenire da un'intrusione da rete. Certamente questo è lo scenario tipico, ma non bisognerebbe scordare che il più delle volte per accedere a un dato contenuto su un certo supporto, basta avere accesso "fisico" al supporto stesso.
Questo è molto più importante oggi giorno di quanto non fosse fino a pochi anni fa a causa della diffusione di sistemi di memorizzazione di massa portabili, estremamente comodi e che ci stiamo abituando ad avere sempre con noi, nello zaino, in una tasca o marsupio.
Questo è molto più importante oggi giorno di quanto non fosse fino a pochi anni fa a causa della diffusione di sistemi di memorizzazione di massa portabili, estremamente comodi e che ci stiamo abituando ad avere sempre con noi, nello zaino, in una tasca o marsupio.
Riga 8: Riga 8:
Le tecniche mostrate in questa guida sono ancora "rozze" nel senso che richiedono per l'utente che le usa di autenticarsi come root, però possono costituire una base di partenza. {{Box|Disclaimer|Appena riuscirò a trovare la tecnica per evitare l'autenticazione come root, aggiornerò questa guida, rendendo la cifratura più adatta a sistemi multi-utente}}
Le tecniche mostrate in questa guida sono ancora "rozze" nel senso che richiedono per l'utente che le usa di autenticarsi come root, però possono costituire una base di partenza. {{Box|Disclaimer|Appena riuscirò a trovare la tecnica per evitare l'autenticazione come root, aggiornerò questa guida, rendendo la cifratura più adatta a sistemi multi-utente}}
La distribuzione cui ci si riferisce è Lenny, ma il discorso dovrebbe subire modifiche minime o nulle sia per Etch che per Sid.
La distribuzione cui ci si riferisce è Lenny, ma il discorso dovrebbe subire modifiche minime o nulle sia per Etch che per Sid.
=Prerequisiti e preparazione del sistema=
== Prerequisiti e preparazione del sistema ==
==Kernel precompilato Debian==
=== Kernel precompilato Debian ===
{{Box|Hardware|A livello hardware la cifratura con algoritmo AES è molto leggera quindi può essere eseguita anche su macchine molto datate, o piccoli sistemi embedded.}}
{{Box|Hardware|A livello hardware la cifratura con algoritmo AES è molto leggera quindi può essere eseguita anche su macchine molto datate, o piccoli sistemi embedded.}}
La prima cosa da controllare prima di cimentarsi nella criptazione è l'abilitazione del kernel a usare l'algoritmo AES. I nuovi kernel precompilati di Lenny non contengono più, come quelli di Etch, i moduli necessari. Per abilitarli bisogna installare un pacchetto:<pre># aptitude install loop-aes-modules-`uname -r`</pre>
La prima cosa da controllare prima di cimentarsi nella criptazione è l'abilitazione del kernel a usare l'algoritmo AES. I nuovi kernel precompilati di Lenny non contengono più, come quelli di Etch, i moduli necessari. Per abilitarli bisogna installare un pacchetto:<pre># aptitude install loop-aes-modules-`uname -r`</pre>
Riga 67: Riga 67:
Infine l'ultimo modulo da caricare nel kernel è <code>dm-crypt</code>, la cui assenza impedisce a cryptsetup di completare le operazioni richieste.<pre># modprobe dm-crypt</pre>
Infine l'ultimo modulo da caricare nel kernel è <code>dm-crypt</code>, la cui assenza impedisce a cryptsetup di completare le operazioni richieste.<pre># modprobe dm-crypt</pre>


==Kernel personalizzato==
=== Kernel personalizzato ===
Se non usiamo un kernel precompilato Debian, dobbiamo controllare che l'algoritmo di cifratura sia stato compilato: dal menu "'''Linux Kernel Configuration'''" seguiamo la voce "'''Cryptographic options  --->'''" e abilitiamo la voce <pre>AES cipher algorithms</pre> o la strettamente legata <pre>AES cipher algorithms (i586)</pre>
Se non usiamo un kernel precompilato Debian, dobbiamo controllare che l'algoritmo di cifratura sia stato compilato: dal menu "'''Linux Kernel Configuration'''" seguiamo la voce "'''Cryptographic options  --->'''" e abilitiamo la voce <pre>AES cipher algorithms</pre> o la strettamente legata <pre>AES cipher algorithms (i586)</pre>


Sistemato il kernel passiamo all'installazione del software necessario:<pre># aptitude install cryptsetup</pre>che installerà tutte le dipendenze necessarie (piccole: l'installazione completa di tutte le sue dipendenze sta sotto i 2MB di spazio disco!).
Sistemato il kernel passiamo all'installazione del software necessario:<pre># aptitude install cryptsetup</pre>che installerà tutte le dipendenze necessarie (piccole: l'installazione completa di tutte le sue dipendenze sta sotto i 2MB di spazio disco!).


=Preparazione del file o della periferica=
== Preparazione del file o della periferica ==
==Creare una loop device da un file==
=== Creare una loop device da un file ===
Per preparare un file di dimensione fissata (in base alla quantità e tipo di dati che vorremo salvare cifrati) usiamo il comando dd:<pre>$ dd if=/dev/zero of=/home/nomeutente/immagine_cifrata ibs=1M count=10</pre>per creare un file da poi usare di 10MB nella home di "nomeutente" (perdonate la poca fantasia).
Per preparare un file di dimensione fissata (in base alla quantità e tipo di dati che vorremo salvare cifrati) usiamo il comando dd:<pre>$ dd if=/dev/zero of=/home/nomeutente/immagine_cifrata ibs=1M count=10</pre>per creare un file da poi usare di 10MB nella home di "nomeutente" (perdonate la poca fantasia).


Autentichiamoci come root e montiamo il file appena creato in loop. Prima di tutto impostiamo il file appena creato come una loop device (ammettendo che questa sia la prima periferica in loop del sistema):<pre># /sbin/losetup /dev/loop/0 /home/nomeutente/immagine_cifrata</pre>
Autentichiamoci come root e montiamo il file appena creato in loop. Prima di tutto impostiamo il file appena creato come una loop device (ammettendo che questa sia la prima periferica in loop del sistema):<pre># /sbin/losetup /dev/loop/0 /home/nomeutente/immagine_cifrata</pre>
==Creare la partizione criptata==
=== Creare la partizione criptata ===
Per chi invece di cifrare un file montato in loop, deve cifrare una block device ordinaria, basta che sappia quale nome le abbia assegnato il kernel (con precisione, perché la procedura seguente cancellerà tutti i dati nella periferica).
Per chi invece di cifrare un file montato in loop, deve cifrare una block device ordinaria, basta che sappia quale nome le abbia assegnato il kernel (con precisione, perché la procedura seguente cancellerà tutti i dati nella periferica).
{{Box|Periferiche|D'ora in poi chiameremo <code>/dev/periferica</code> la block device sulla quale scriveremo i dati cifrati, sia essa la periferica in loop del paragrafo precedente (<code>/dev/loop/0</code>) o una periferica ordinaria}}
{{Box|Periferiche|D'ora in poi chiameremo <code>/dev/periferica</code> la block device sulla quale scriveremo i dati cifrati, sia essa la periferica in loop del paragrafo precedente (<code>/dev/loop/0</code>) o una periferica ordinaria}}
Riga 83: Riga 83:


WARNING!
WARNING!
========
========  ========
This will overwrite data on /dev/periferica irrevocably.
This will overwrite data on /dev/periferica irrevocably.


Riga 90: Riga 90:
Verify passphrase:
Verify passphrase:
Command successful.</pre>
Command successful.</pre>
==Mappare e montare la partizione criptata==
=== Mappare e montare la partizione criptata ===
A questo punto dobbiamo dare istruzioni al device mapper di mappare la periferica LUKS appena creata in una block device virtuale sulla quale scrivere i nostri dati in chiaro (e poi essi saranno scritti cifrati su <code>/dev/periferica</code>):<pre># cryptsetup luksOpen /dev/periferica criptata</pre>Questo creerà la periferica <code>'''/dev/mapper/criptata'''</code>, sulla quale noi andremo a creare il file system che più ci interessa (su periferiche piccole come quella in esempio non conviene usare un file system con indicizzazione come reiserfs o ext3, bensì un più semplice ext2 o una fat):<pre># mkfs -t ext2 /dev/mapper/criptata</pre>Non ci rimane che montarla in una cartella di prova per verificare che sia tutto corretto (funzionamento, dimensioni desiderate ecc.):<pre># mount -t auto /dev/mapper/criptata /mnt/prova</pre>
A questo punto dobbiamo dare istruzioni al device mapper di mappare la periferica LUKS appena creata in una block device virtuale sulla quale scrivere i nostri dati in chiaro (e poi essi saranno scritti cifrati su <code>/dev/periferica</code>):<pre># cryptsetup luksOpen /dev/periferica criptata</pre>Questo creerà la periferica <code>'''/dev/mapper/criptata'''</code>, sulla quale noi andremo a creare il file system che più ci interessa (su periferiche piccole come quella in esempio non conviene usare un file system con indicizzazione come reiserfs o ext3, bensì un più semplice ext2 o una fat):<pre># mkfs -t ext2 /dev/mapper/criptata</pre>Non ci rimane che montarla in una cartella di prova per verificare che sia tutto corretto (funzionamento, dimensioni desiderate ecc.):<pre># mount -t auto /dev/mapper/criptata /mnt/prova</pre>


=Rimozione della periferica criptata=
== Rimozione della periferica criptata ==
Per rimuovere la periferica cifrata bisogna innanzi tutto smontarla, poi bisogna dire a ''cryptsetup'' di chiudere la periferica (il che automaticamente eliminerà il nodo creato dal device mapper):<pre># umount /mnt/prova
Per rimuovere la periferica cifrata bisogna innanzi tutto smontarla, poi bisogna dire a ''cryptsetup'' di chiudere la periferica (il che automaticamente eliminerà il nodo creato dal device mapper):<pre># umount /mnt/prova
# /sbin/cryptsetup luksClose criptata</pre>
# /sbin/cryptsetup luksClose criptata</pre>
==Rimozione di una loop device==
=== Rimozione di una loop device ===
Nel caso in cui la nostra periferica sia un file montato in loop, è consigliabile eliminare il collegamento che il nostro file immagine ha con la periferica loop cui l'abbiamo associato; questo ci permetterà di spostare o eliminare il file senza creare malfunzionamenti nelle periferiche di loop, così come ci consentirà di aprire nuove periferiche in loop ripartendo dalla numero 0:<pre># /sbin/losetup -d /dev/loop0</pre>
Nel caso in cui la nostra periferica sia un file montato in loop, è consigliabile eliminare il collegamento che il nostro file immagine ha con la periferica loop cui l'abbiamo associato; questo ci permetterà di spostare o eliminare il file senza creare malfunzionamenti nelle periferiche di loop, così come ci consentirà di aprire nuove periferiche in loop ripartendo dalla numero 0:<pre># /sbin/losetup -d /dev/loop0</pre>


=Automatizzazione dei passi necessari=
== Automatizzazione dei passi necessari ==
A questo punto dobbiamo solo creare uno script da eseguire come root, per fare tutte le operazioni di creazione e montaggio, o viceversa di smontaggio e rimozione automaticamente.
A questo punto dobbiamo solo creare uno script da eseguire come root, per fare tutte le operazioni di creazione e montaggio, o viceversa di smontaggio e rimozione automaticamente.
Di seguito sono riportati due script, uno per il caso di file montato ricorsivamente, l'altro per il caso di periferica ordinaria.
Di seguito sono riportati due script, uno per il caso di file montato ricorsivamente, l'altro per il caso di periferica ordinaria.
In entrambi i casi il montaggio della periferica criptata avviene nella cartella "criptata" nella home dell'utente; è necessario quindi creare la cartella:<pre>$ mkdir /home/'''nomeutente'''/criptata</pre>
In entrambi i casi il montaggio della periferica criptata avviene nella cartella "criptata" nella home dell'utente; è necessario quindi creare la cartella:<pre>$ mkdir /home/'''nomeutente'''/criptata</pre>
==Script per file immagine==
=== Script per file immagine ===
<pre>#Utilizzo di un file immagine come periferica criptata
<pre>#Utilizzo di un file immagine come periferica criptata
#!/bin/bash
#!/bin/bash
Riga 157: Riga 157:
Se non si inserisce quella riga, programmi di backup (che spesso si appoggiano su ''librsync'') non possono accorgersi che il file cifrato è stato cambiato o è stato aperto di recente e non lo considerano nel sincronizzare le varie copie.
Se non si inserisce quella riga, programmi di backup (che spesso si appoggiano su ''librsync'') non possono accorgersi che il file cifrato è stato cambiato o è stato aperto di recente e non lo considerano nel sincronizzare le varie copie.


==Script per periferica ordinaria==
=== Script per periferica ordinaria ===
In questo esempio viene usata la prima partizione di una scheda di memoria SD (<code>/dev/mmcblk0p1</code> con lettore compatibile con il modulo sdhci).
In questo esempio viene usata la prima partizione di una scheda di memoria SD (<code>/dev/mmcblk0p1</code> con lettore compatibile con il modulo sdhci).
<pre>#!/bin/bash
<pre>#!/bin/bash
1 508

contributi