Scripts per gestire da filesystem cifrati su file

Lun, 14/06/2010 - 17:40

Scripts per gestire da filesystem cifrati su file

Inviato da Moreno 4 commenti
1) Introduzione

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.

Non sono completamente soddisfatto di questa soluzione perché manca completamente di una GUI e cosa ancor più grave gli script possono essere usati solo come root.
2) Script
2.1) Creazione filesystem cifrato su file (CreaFs)

#!/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.
#

2.2) Apertura filesystem cifrato su file (ApriFs)

#!/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

2.2) Apertura filesystem cifrato su file (ChiudiFs)

#!/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
#

3) Qualche informazione utile

Questo genere di filesystem cifrati si basa su di una infrastruttura stratificata su vari livelli.

3.1) Livello 1 file e punto di mount

# 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.

Una volta smontato il filesystem cifrato l'operazione di backup è banale e consiste nella semplice copia, magari compressa, del file ArchivioRoot01.luks
3.2) Livello 2 Device Loop

# 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

3.3) Livello 3 Device Mapper Luks

# 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

3.4) Livello 4 Punto di montaggio

# 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.

Nella chiusura il processo si inverte, si parte da umount per smontare il Device Mapper, seguito da cryptsetup luksClose per scollegarsi dal Device Loop ed infine con losetup -d si scollega il Device Loop dal file

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

Ritratto di manson
#1

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]



Ritratto di Moreno
#2

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.



Ritratto di manson
#3

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]



Ritratto di Moreno
#4

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.