In questi giorni mi sto divertendo a giocare con i filesystem cifrati in tutte le salse possibili.
Questa volta ho scritto alcuni script per gestire dei filesystem cifrati su file che rispetto ai filesystem tradizionali sono molto più comodi da gestire.
#!/bin/bash # #lettura parametri FILE=$1 DIR=$2 SIZE=$3 uso() { PROG=`basename $0` echo "uso : $PROG NomeArchivio DirectoryDiCreazione DimensioneMiB" exit 1 } #verifica parametri [ -n "$3" ] || uso; #crea se necessario directory DIRO=`pwd` [ -d $DIR ] || mkdir -p $DIR cd $DIR #crea file cifrato dd if=/dev/zero of=$FILE.luks bs=1M count=$SIZE #crea punto di mount mkdir $FILE #trova deviceloop libero LOOP=`losetup -f` #collega il deviceloop al file cifrato losetup $LOOP $FILE.luks #formattazione luks del file cifrato cryptsetup luksFormat $LOOP #apertura del file cifrato cryptsetup luksOpen $LOOP $FILE #formattazione del filesystem mke2fs -j /dev/mapper/$FILE #montaggio del filesystem cd $DIRO mount /dev/mapper/$FILE $DIR/$FILE
Questo script accetta 3 parametri che sono:
- NomeArchivio -> Nome dell'archivio cifrato e del punto di mount
- DirectoryDiCreazione -> Directory dove verrà salvato il file cifrato e verrà creato il punto di mount (File NomeArchivio.luks, punto di mount NomeArchivio)
- DimensioneMiB -> Dimensione dell'archivio in MiB
Lo script può essere salvato nella cartella /sbin con il nome CreaFs
La sequenza d'esecuzione, nel caso vada tutto bene, è più o meno la seguente:
# ./CreaFs.sh ArchivioRoot01 /root/ArchiviCifrati 256 256+0 record dentro 256+0 record fuori 268435456 byte (268 MB) copiati, 2,16538 s, 124 MB/s WARNING! ======== This will overwrite data on /dev/loop0 irrevocably. Are you sure? (Type uppercase yes): YES
Scrivere YES in maiuscolo
Enter LUKS passphrase: Verify passphrase:
Inserire 2 volte la password di cifratura
Enter passphrase for /dev/loop0:
Reinserire la password di cifratura per aprire il filesystem
Key slot 0 unlocked. mke2fs 1.41.12 (17-May-2010) Etichetta del filesystem= Tipo SO: Linux Dimensione blocco=1024 (log=0) Dimensione frammento=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 65536 inode, 261628 blocchi 13081 blocchi (5.00%) riservati per l'utente root Primo blocco dati=1 Maximum filesystem blocks=67371008 32 gruppi di blocchi 8192 blocchi per gruppo, 8192 frammenti per gruppo 2048 inode per gruppo Backup del superblocco salvati nei blocchi: 8193, 24577, 40961, 57345, 73729, 204801, 221185 Scrittura delle tavole degli inode: fatto Creating journal (4096 blocks): fatto Scrittura delle informazioni dei superblocchi e dell'accounting del filesystem: fatto Questo filesystem verrà automaticamente controllato ogni 28 mount, o 180 giorni, a seconda di quale venga prima. Usare tune2fs -c o -i per cambiare. #
#!/bin/bash # #lettura parametri FILE=$1 DIR=$2 uso() { PROG=`basename $0` echo "uso : $PROG NomeArchivio DirectoryDiCreazione" exit 1 } #verifica parametri [ -n "$2" ] || uso; #trova deviceloop libero LOOP=`losetup -f` #collega il deviceloop al file cifrato losetup $LOOP $DIR/$FILE.luks #apertura del file cifrato cryptsetup luksOpen $LOOP $FILE #montaggio del filesystem mount /dev/mapper/$FILE $DIR/$FILE
Questo script accetta 3 parametri che sono:
- NomeArchivio -> Nome dell'archivio cifrato e del punto di mount
- DirectoryDiCreazione -> Directory dove verrà salvato il file cifrato e verrà creato il punto di mount (File NomeArchivio.luks, punto di mount NomeArchivio)
Lo script può essere salvato nella cartella /sbin con il nome ApriFs
La sequenza d'esecuzione, nel caso vada tutto bene, è più o meno la seguente:
# ./ApriFs.sh ArchivioRoot01 /root/ArchiviCifrati Enter passphrase for /dev/loop0: Key slot 0 unlocked. #
Inserire una volta la password di cifratura del filesystem
#!/bin/bash # #lettura parametri FILE=$1 uso() { PROG=`basename $0` echo "uso : $PROG NomeArchivio" exit 1 } #verifica parametri [ -n "$1" ] || uso; #smontaggio del filesystem umount /dev/mapper/$FILE #chiusura del file cifrato cryptsetup luksClose $FILE #ricerca del deviceloop assegnato LOOP=`losetup -a | grep $FILE | awk -F: '{print $1}'` #scollegamento del deviceloop losetup -d $LOOP
Questo script accetta 3 parametri che sono:
- NomeArchivio -> Nome dell'archivio cifrato e del punto di mount
Lo script può essere salvato nella cartella /sbin con il nome ChiudiFs
La sequenza d'esecuzione, nel caso vada tutto bene, è più o meno la seguente:
# ./ChiudiFs.sh ArchivioRoot01 #
Questo genere di filesystem cifrati si basa su di una infrastruttura stratificata su vari livelli.
# ls -l /root/ArchiviCifrati totale 262145 drwxr-xr-x 3 root root 1024 2010-06-14 17:21 ArchivioRoot01/ -rw------- 1 root root 268435456 2010-06-14 17:21 ArchivioRoot01.luks #
La cartella è il punto di montaggio dell'archivio cifrato mentre ArchivioRoot01.luks è il file che materialmente contiene il filesystem cifrato.
# losetup -a /dev/loop0: [0806]:7130 (/root/ArchiviCifrati/ArchivioRoot01.luks) #
Il file ArchivioRoot01.luks viene collegato, tramite il comando losetup, ad un Device Loop, in questo caso /dev/loop0.
Il comando losetup -a elenca tutti i Device Loop attivi
# ls -l /dev/mapper/ totale 0 lrwxrwxrwx 1 root root 7 2010-06-14 15:47 ArchivioRoot01 -> ../dm-0 crw-rw---- 1 root root 10, 58 2010-06-14 10:44 control #
Tramite il comando cryptsetup luksOpen viene creato il Device Mapper ArchivioRoot01 in /dev/mapper e che utilizza il Device Loop
# mount /dev/sda6 on / type ext4 (rw,relatime) ......... ......... /dev/mapper/ArchivioRoot01 on /root/ArchiviCifrati/ArchivioRoot01 type ext3 (rw) #
Come ultimo livello il Device Mapper viene montato, tramite il solito comando mount, nel punto di mount indicato ed a questo punto il filesystem è completamente accessibile.
Ora sono alla ricerca di soluzioni più "user friendly" al problema e che magari permettano di gestire queste cose direttamente agli utenti.
Ciao Ciao, Moreno
Commenti
Inviato da manson il Dom, 20/06/2010 - 20:46.
Re: Scripts per gestire da filesystem cifrati su file
Essendo de coccio e curioso (brutta accoppiata), non mi è chiara la funzione di questo script, la sua utilità, eventuali implementazioni.
Mi illumineresti?
[=4]Cooker x86_64 - Kde 4.5.76 kernel - 2.6.36-desktop-2mnb - Mandriva 2010.1 Free kde 4.5.3 - kernel 2.6.35.8-desktop-nrj.69mib - Pentium(R) Dual-Core CPU x86_64 E5200 2.50GHz - 2 Gb Ram - NVidia 256.44 GeForce 9600 GT - [b]
Inviato da Moreno il Dom, 20/06/2010 - 21:03.
Re: Scripts per gestire da filesystem cifrati su file
Ciao
Beh, come già detto, l'utilità è limitata dal fatto che possono essere usati solo da root.
Lo scopo degli script è quello di:
- creare un archivio cifrato
- montare un archivio cifrato
- smontare un archivio cifrato
L'archivio cifrato non è altro che un file che però viene trattato come se fosse un disco, cifrato appunto e su cui si opera come su qualsiasi altro disco.
Ciao Ciao, Moreno
Addio, e grazie per tutto il pesce.
Avatar by moonlight-dream.
Inviato da manson il Dom, 20/06/2010 - 23:10.
Re: Scripts per gestire da filesystem cifrati su file
Ti ringrazio.
Uhm... cmq il suo utilizzo non è proprio intuitivo, ma questi giorni ci giocherò un pò per capirci qualcosa, ancora grazie!
[=4]Cooker x86_64 - Kde 4.5.76 kernel - 2.6.36-desktop-2mnb - Mandriva 2010.1 Free kde 4.5.3 - kernel 2.6.35.8-desktop-nrj.69mib - Pentium(R) Dual-Core CPU x86_64 E5200 2.50GHz - 2 Gb Ram - NVidia 256.44 GeForce 9600 GT - [b]
Inviato da Moreno il Lun, 21/06/2010 - 07:31.
Re: Scripts per gestire da filesystem cifrati su file
Ciao
Beh sempre meglio che darsi tutti i comandi a mano, se non ci fosse il maledetto limite di root, si potrebbe fare anche una piccola GUI grafica ma così non ne vale la pena.
Ciao Caio, Moreno
Addio, e grazie per tutto il pesce.
Avatar by moonlight-dream.