Marbel

Iscritto il 9 ott 2007
nessun oggetto della modifica
Nessun oggetto della modifica
 
Nessun oggetto della modifica
Riga 1: Riga 1:
Mi chiamo Marco Bellumori e abito a Lucca, ma sono nato in provincia di Grosseto nel 1960. Ho iniziato con il software e con i personal computer in genere nel 1982. Per mestiere mi occupo di contabilità, amministrazione e anche di IT in generale. Costruisco programmi di contabilità e amministrazione aziendale come dipendente di una società di capitali. Per scelte aziendali e non certo mie, nel lavoro, per programmare, non utilizzo sistemi operativi GNU/Linux e software per questi sistemi. In ufficio c'è soltanto una macchina Debian, che viene utilizzata quasi esclusivamente con OpenOffice.org. Di consequenza sono obbligato a conoscere molto bene i sistemi operativi e i software proprietari. Ne farei volentieri a meno, ma..... così a meno, che per utilizzo personale (home) e per la programmazione al di fuori dell'ambito lavorativo, nel 1997 ho deciso di abbandonare i sistemi operativi proprietari per passare ai sistemi operativi GNU/Linux. Per la verità non ho iniziato con Debian GNU/Linux, ma con Slackware 3.2 (autunno 1997). Dopo circa un anno, ho voluto provare la Debian (hamm). E' stato un amore a prima vista e, a parte una parentesi nel 2000, perchè in quel periodo non possedevo una macchina personale, non ho più abbandonato Debian (oggi, in due partizioni distinte, utilizzo Etch 4.0 e testing Lenny + inserimenti da Sid , tutto rigorosamente con Fluxbox, quando mi serve un W.M.). In quasi 10 anni di utenza Debian Gnu/Linux, ho installato e utilizzato questa distribuzione sulle molte macchine che ho posseduto (oggi utilizzo un portatile Packard Bell) e ho aiutato ad installare e utilizzare Debian su molte macchine di amici e conoscenti. Molti di loro sono ormai diventati molto bravi e autosufficienti. Alcuni hanno abbandonato Debian per utilizzare delle derivate (a loro dire più semplici), altri hanno cambiato tipo di distribuzione. Altri ancora hanno addirittura optato per i sistemi proprietari. Io sono ancora quì, con le mie idee e le mie convinzioni.
Un accesso indesiderato ai nostri dati si tende a pensare che 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.
Durante questi anni ho anche ricavato delle piccole partizioni sul mio hard disk per provare altre distribuzioni (quasi sempre Debian/derivate), ma dopo qualche mese di prova (la prova di Ubuntu è durata quasi un anno) non mi hanno convinto come Debian GNU/Linux. In questo momento come ho già detto, in due partizioni distinte, ho installato Etch 4.0 e testing Lenny + inserimenti da Sid. Dal 1999 fino alla metà del 2007 ho utilizzato anche l'ambiente grafico GNOME e devo ammettere che è una bella comodità. Dalla metà del 2007, ho abbandonato Gnome per motivi "politici" e oggi utilizzo il windows manager Fluxbox per gestire i programmi grafici. I programmi generici che utilizzo più frequentemente sono: Gnu/Emacs21, Mutt, Nano, Blue Fish, Kompozer, OpenOffice,org (tutto), Gimp, Scribus, Totem-Xine, XineUi, Rhythmbox, Iceweasel, Claws-mail . Per quanto riguarda invece i programmi di utilità e per la manutenzione utilizzo: Bash, Eterm, Xterm, Midnight Commander, Boot Up Manager, Deb Orphan, Gparted, K3b, PCmanFM, XFE.
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.
Altro scenario interessante � quello nel quale i dati in questione sono contenuti in un computer acceso e connesso alla rete, ma sono dati che ci interessa avere a disposizione esclusiva del nostro utente, e quindi se un'intrusione ci deve proprio essere � utile rendere all'intruso la vita molto dura nell'ottenimento di quei dati sensibili.
In questa guida sono contenuti i passi necessari per cifrare una partizione o una periferica (rimovibile o meno) o creare un file che useremo come loop device cifrata (con il vantaggio di essere estremamente trasportabile e archiviabile). Questo sar� mostrato nello scenario pi� semplice, quello con accesso ai file da parte di un singolo utente. La tecnologia usata per� � quella nota col nome di [http://luks.endorphin.org/ LUKS] (Linux Unified Keys Setup) che consente l'utilizzo della crittografia in scenari molto pi� articolati, con una base di compatibilit� che andr� sempre crescendo in tutto il mondo linux (questo � uno degli obiettivi del progetto). � bene fare le cose fin da subito compatibili con uno standard che sar� sempre pi� importante oltre che ricco di potenzialit�, soprattutto pensando a quanto la riservatezza dei propri dati digitali sia sempre pi� sentita come importante anche dagli utenti semplici.
 
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 � Etch, ma il discorso dovrebbe subire modifiche minime o nulle sia per Lenny che per Sid.
=='''Prerequisiti e preparazione del sistema'''==
{{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 kernel precompilati di debian sono tutti gi� abilitati, quindi il controllo non dovrebbe essere necessario. In un terminale eseguiamo<pre>cat /proc/crypto</pre> e con il kernel 2.6.18 di etch dovremmo ottenere (in base anche ai moduli caricati) qualcosa tipo<pre>name        : sha256
driver      : sha256-generic
module      : sha256
priority    : 0
type        : digest
blocksize    : 64
digestsize  : 32
 
name        : aes
driver      : aes-generic
module      : aes
priority    : 100
type        : cipher
blocksize    : 16
min keysize  : 16
max keysize  : 32
 
...</pre>
Ovviamente a noi interessa la sezione che inizia con '''name        : aes'''. Se non dovesse comparire dobbiamo controllare che il modulo '''aes''' sia caricato e ottenere un'output simile a questo: <pre>lsmod | grep aes
aes                    28160  2</pre>.
Se l'output dovesse essere vuoto dobbiamo caricare il modulo '''aes''' con l'usuale comando '''modprobe aes'''.
 
Se non usaimo 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!).
 
=='''Preparazione del file o della periferica'''==
==='''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).
 
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'''===
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 kenrel (con precisione, perch� la procedura seguente canceller� tutti i dati nella periferica).
{{Box|Periferiche|D'ora in poi chiameremo /dev/periferica la block device sulla quale scriveremo i dati cifrati, sia essa la periferica in loop del paragrafo precedente (/dev/loop/0) o una periferica ordinaria}}
Creiamo la partizione LUKS:<pre>cryptsetup --verify-passphrase --verbose --hash=sha256 --cipher=aes-cbc-essiv:sha256 --key-size=256 luksFormat /dev/periferica
 
WARNING!
========
This will overwrite data on /dev/periferica irrevocably.
 
Are you sure? (Type uppercase yes):  </pre>Come dice il messaggio bisogna rispondere con uno '''YES''' interamente maiuscolo.
Ci verr� di seguito chiesta una parola d'ordine e la sua conferma; mentre le digiteremo non vedremo nulla cambiare nel terminale:<pre>Enter LUKS passphrase:
Verify passphrase:
Command successful.</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 /dev/periferica):<pre>cryptsetup luksOpen /dev/periferica criptata</pre>Questo creer� la periferica '''/dev/mapper/criptata''', 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 periferca 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
/sbin/cryptsetup luksClose criptata</pre>
==='''Rimozione di una loop device'''===
Nel caso che 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'''==
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.
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>
==='''Scritp per file immagine'''===
<pre>#Utilizzo di un file immagine come periferica criptata
#!/bin/bash
 
case $1 in
        monta)
                if [ -f /home/'''nomeutente'''/immagine_cifrata ]; then
                    echo "Impostazione periferica ricorsiva (loop)."
                    /sbin/losetup /dev/loop0 /home/'''nomeutente'''/immagine_cifrata
                fi
 
                if [ $? = 0 ]; then
                    /sbin/cryptsetup luksOpen /dev/loop0 criptata
                else
                    echo "Impostazione periferica ricorsiva non riuscita."
                fi
 
                if [ $? = 0 ]; then
                    mount /dev/mapper/criptata /home/'''nomeutente'''/criptata
                fi
 
                if [ $? !=0 ]; then
                    echo "Impossibile montare la periferica criptata."
                    /sbin/cryptsetup luksClose criptata
                    /sbin/losetup -d /dev/loop0
                fi
        ;;
        smonta)
                umount /dev/mapper/criptata
 
                if [ $? = 0 ]; then
                    /sbin/cryptsetup luksClose criptata
                else
                    echo "Smontaggio non riuscito."
                fi
 
                if [ $? = 0 ]; then /sbin/losetup -d /dev/loop0
                else echo "Chiusura periferica criptata non riuscita."
                fi
        ;;
        *)
        echo "Usage: $1 {monta|smonta}" >&2
        exit 1
        ;;
esac</pre>
==='''Scritp per periferica ordinaria'''===
In questo esempio viene usata la prima partizione di una scheda di memoria SD (/dev/mmcblk0p1 con lettore compatibile con il modulo sdhci).
<pre>#!/bin/bash
 
case $1 in
        monta)
                echo "Verifica presenza SD:"
                if [ -b /dev/mmcblk0p1 ] ; then
                    echo "."
                else
                    echo "La periferica non � inserita!"
                    exit 2
                fi
 
                if [ $? = 0 ]; then /sbin/cryptsetup luksOpen /dev/mmcblk0p1 criptata
                fi
 
                if [ $? = 0 ]; then
                    mount /dev/mapper/criptata /home/'''nomeutente'''/criptata
                fi
 
                if [ $? != 0 ]; then
                    echo "Il file system cifrato non pu� essere montato."
                    /sbin/cryptsetup luksClose criptata
                fi
        ;;
        smonta)
#Smonto il file system criptato e controllo che lo smontaggio sia avvenuto correttamente
                umount /dev/mapper/criptata
                if [ $? != 0 ]; then
                    echo "Smontaggio non riuscito."
                fi
 
#Chiudo il nodo in /dev/mapper e controllo
                /sbin/cryptsetup luksClose criptata
                if [ $? = 0 ]; then
                    echo "Nodo cifrato in /dev/mapper rimosso."
                else echo "Chiusura periferica criptata non riuscita"
                fi
        ;;
        *)
        echo "Usage: $1 {monta|smonta}" >&2
        exit 1
        ;;
esac</pre>
 
 
: [[Utente:GipPasso|GipPasso]]
12

contributi