Uso di ecryptfs per crittografare cartelle di dati importanti.

Girovagando per internet, mi sono imbattuto in uno dei tanti post sulla configurazione ed utilizzo di ecryptfs-utils per poter usare cartelle crittografate da montare al momento del bisogno. Al solito, il post, ha diversi errori per cui alla fine il risultato non è quello che uno si aspetta. Questa situazione, era quella quella che odiavo maggiormente quando ero un novizio: seguire un howto alla lettera ed alla fine non ottenere quello che nel documento era promesso, e non per errori miei, ma per errori di chi aveva scritto il documento stesso.

Per cui eccomi qui a riscriverlo di sana pianta con l’auspicio che, chi si imbatta in questo post ne, possa trovare vantaggio ottenendo quello che che gli viene promesso, quindi iniziamo.

Innanzi tutto verificate che il pacchetto ecryptfs-utils sia installato: se non ne siete certi, o non lo è, provvediamo con il solito comando:

sudo apt install ecryptfs-utils

Fatto questo possiamo iniziare. Per prima cosa decidiamo se convertire una cartella già esistente o se creare una cartella ex novo. Consiglio la seconda opzione, perché testando la prima ho avuto risultati non sempre coerenti, di conseguenza consiglio di creare cartella vuota e poi copiarci i dati dentro.

cd $HOME; mkdir cartella.enc

Nel dubbio fossimo in una qualsiasi cartella per qualunque cosa stessimo facendo prima di fare questo lavoro, meglio riportarsi nella cartella home dell’utente con il classico cd $HOME.

A questo punto eseguiamo un comando un po’ strano, forse all’apparenza, ma che è quello che ci serve per rendere la nostra cartella criptata:

sudo mount -t ecryptfs $HOME/cartella.enc/ $HOME/cartella.enc/

Uso anche qui il formato $HOME perché non credo interessi voi come si chiama la mia cartella home.

Dato l’invio ci verranno richieste alcune cose:

Passphrase:

Qui digitiamo la nostra frase di sicurezza: al solito più sarà complessa e più staremo tranquilli !

Select cipher:

1) aes: blocksize = 16; min keysize = 16; max keysize = 32

2) blowfish: blocksize = 8; min keysize = 16; max keysize = 56

3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24

4) twofish: blocksize = 16; min keysize = 16; max keysize = 32

5) cast6: blocksize = 16; min keysize = 16; max keysize = 32

6) cast5: blocksize = 8; min keysize = 5; max keysize = 16

Selection [aes]:

Qui, io, seleziono di solito 1 per AES come sistema di cifratura: voi scegliete quello che preferite.

Select key bytes:

1) 16

2) 32

3) 24

Selection [16] 32

Io qui ho scelto 32, ma come prima ognuno scelga quello che meglio crede, e sopratutto quello che meglio si adatta al proprio hardware.

Enable plaintext passthrough (y/n) [n]: n

Permettete, o meno, che esistano file non criptati nella cartella? Io uso NO

Enable filename encryption (y/n) [n]: y

Volete, che una volta smontata la cartella quindi resa crittografata siano crittografati anche i nomi dei file? Chiaramente dipende da cosa vi serve: io rispondo SI

Filename Encryption Key (FNEK) Signature [f03739fa01061ee7]:

Viene generata una chiave per questa cartella usata per crittografare i nomi file, di solito corrisponde a quella usata per crittografare l’intera cartella e viene proposta: questo perché potreste avere diverse cartelle crittografate, quindi la chiave dipende da quale cartella state montando. Se premete invio accettate quella proposta, che in fase di creazione chiaramente e quella corretta.

Attempting to mount with the following options:

ecryptfs_unlink_sigs

ecryptfs_fnek_sig=f03739fa01061ee7

ecryptfs_key_bytes=32

ecryptfs_cipher=aes

ecryptfs_sig=f03739fa01061ee7

WARNING: Based on the contents of [/root/.ecryptfs/sig-cache.txt],

it looks like you have never mounted with this key

before. This could mean that you have typed your

passphrase wrong.

Would you like to proceed with the mount (yes/no)? :

Non spaventatevi: vi viene presentato un riassunto delle risposte che avete dato sino ad ora; inoltre vi dice che in base al contenuto del file /root/.ecryptfs/sig-cache.txt, che chiaramente al momento è vuoto, il sistema rileva che: o è la prima cartella che crittografate oppure avete sbagliato password e vi chiede, inoltre, se volete confermare i dati e proseguire con il tentativo di eseguire il mount. Chiaramente direte di si, ma questa volta non sarà sufficiente solo la prima lettera ma dovrete digitare l’intera parola yes e senza maiuscole.

Quindi digitate yes ed invio:

Would you like to append sig [f03739fa01061ee7] to

[/root/.ecryptfs/sig-cache.txt]

in order to avoid this warning in the future (yes/no)? :

Qui vi chiede se, per evitare in futuro che il sistema vi ponga la stessa domanda di prima, ogni volta che montate questa cartella, volete che la chiave identificativa della cartella venga scritta nel file /root/.ecryptfs/sig-cache.txt; se dite di si eviterete la domanda ad ogni mount; io di solito rispondo si, quindi anche qui la parola, per itero, yes più invio ed otterrete infine:

Successfully appended new sig to user sig cache file

Mounted eCryptfs

Ok adesso verifichiamo ce la cartella risulta correttamente montata con il comando

df -h

/home/xxxx/cartella.enc on /home/xxxx/cartella.enc type ecryptfs

L’inizio dell’ultima riga deve corrispondere a quanto ho riportato sopra in particolare la tipologia del filesystem deve essere ecryptfs. Se così non fosse avete sbagliato qualcosa: cancellate la cartella che avete creato e cancellate i vari file di supporto dell’utente root con un bel sudo rm -r /root/.ecryptfs* e ripartite da zero.

Lo dico senza tema di smentita, perché ho seguito da zero queste stesse istruzioni e funziona perfettamente, quindi pazienza e ripetete.

Ora facciamo una prova per verificare come funziona: copiamo un file qualsiasi nella nostra cartella ora montata come crittografata e controlliamone il contenuto con il comando cat:

cp /etc/hosts $HOME/cartella.enc

cat $HOME/cartella.enc/hosts

e ci troverete informazioni leggibili tipo queste:

# The following lines are desirable for IPv6 capable hosts

::1 ip6-localhost ip6-loopback

fe00::0 ip6-localnet

ff00::0 ip6-mcastprefix

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

Ora smontiamo la nostra cartella rendendola così crittografata per chiunque cerchi di leggerla, usando il comando:

sudo umount $HOME/cartella.enc

e proviamo a listarne il contenuto della cartella dopo l’umount:

ls -la $HOME/cartella.enc

ora: il risultato dipende se durante il mount avete deciso di crittografare, o meno, anche il nome dei file (ricordate la domanda Enable filename encryption (y/n) [n]: y durante l’esecuzione del comando mount di prima ?) Se avete risposto no allora vedrete questo:

drwxr-xr-x 2 xxxx xxxx 4096 gen 17 11:36 .

drwxr-xr-x 49 xxxx xxxx 4096 gen 17 11:11 ..

-rw-r–r– 1 xxxx xxx 386 gen 17 11:36 hosts

mentre, se avete riposto yes, vedrete qualcosa di simile a questo:

drwxr-xr-x 2 xxxx xxxx 4096 gen 17 11:36 ./

drwxr-xr-x 49 xxxx xxxx 4096 gen 17 11:11 ../

-rw-r—r—1 xxxx xxxx 12288 gen 17 11:36 YPTFS_FNEK_ENCRYPTED.FWbkBnbu-MStkb2H8D3GpqxRIv.3j9JeEtRiMnzn–

Come potete notare, in seguito alla vostra richiesta, il nome del file è stato crittografato quindi hosts è diventato una serie casuale di lettere, numeri e caratteri di punteggiatura.

Ora: in entrambi in casi se eseguite il comando cat per vendere il contenuto del file, otterreste qualcosa somigliante a quanto segue:

#��”*>ˣ��###�###”3DUfw`N���7�GHO#��>|&PbtM�{{��#z����#�#_CONSOLE�79�###�R���#B���Pp���W2V:>#���l5f���?”���֩���y�H�c`��JIIԌ3���3^:#u��#|{x#�.�#&ܵ#;�f#�#����(�v�e�~�J?�ʂ)q>�

Questo perché il contenuto del file è crittografato e finché non lo rimonterete con i giusti parametri i dati non saranno più leggibili.

Problema: adesso ogni volta che vorrete montare la vostra cartella per poterci lavorare dovrete eseguire sempre il comando:

sudo mount -t ecryptfs $HOME/cartella.enc/ $HOME/cartella.enc/

e fin qui nulla di male, è la procedura; il guaio è che vi richiederà tutti i parametri che vi ha chiesto la prima volta, oltre a, naturalmente, chiedervi la passphrase: bella rottura eh ??? Ovviamente possiamo risolvere la faccenda creando un file di configurazione nella cartella di root; il file sarà /root/.ecryptfsrc ed il nome non è arbitrario, ma deve essere questo.

Creiamo il file con il nostro editor preferito vi o nano, io uso vi di norma quindi eseguiamo:

sudo vi /root/.ecryptfsrc

ed al suo interno ci ricopiamo quanto segue:

key=passphrase:passphrase_passwd=Vostra-PassPhrase

ecryptfs_fnek_sig=chiave-vostra-cartella

ecryptfs_sig=chiave-vostra-cartella

ecryptfs_cipher=aes

ecryptfs_key_bytes=32

ecryptfs_passthrough=n

ecryptfs_enable_filename_crypto=y

salviamo e chiudiamo il file e vediamo un po’ cosa dovete modificare.

Ora un po’ di chiarimenti riga per riga:

Seconda riga: ecryptfs_fnek_sig=chiave-vostra-cartella qui il valore che dovete mettere è quello che vi viene segnalato durante il mount; (ricordate ecryptfs_sig=f03739fa01061ee7 ?) quindi il valore corretto sarà:

ecryptfs_fnek_sig=f03739fa01061ee7

Stessa cosa per la riga numero tre:

ecryptfs_sig=f03739fa01061ee7

Per la quarta riga il tipo di codifica che avete scelto: io avevo scelto AES quindi

ecryptfs_cipher=aes

Per la quinta riga inseriamo la lunghezza della chiave: io avevo impostato 32 quindi

ecryptfs_key_bytes=32

Per la sesta riga: avevo detto che non volevo file in chiaro nella cartella, quindi

ecryptfs_passthrough=n

Per la settima riga: avevo richiesto che i nomi dei file, una volta smontato la cartella, fossero crittografati, quindi:

ecryptfs_enable_filename_crypto=y

E la riga numero uno dire voi ???? Giusto !! La riga numero uno. Qui tutto dipende dal fatto che siate:

– pigri

– mediamente portati alla sicurezza

– fortemente portati alla sicurezza.

Se siete pigri ma avete comunque una bassa preoccupazione sulla sicurezza allora potete inserire la prima riga con la vostra password scritta in chiaro in questo formato:

key=passphrase:passphrase_passwd=Vostra-PassPhrase

L’unico utente che, comunque, potrebbe leggerla sarebbe root o un utente con l’accesso al comando sudo.

Se siete pigri, però comunque volete un minimo di sicurezza allora montate una chiavetta usb, createci un file con nome miapassw.txt, per esempio, ed all’interno mettete questa riga:

passphrase:passwd=Vostra-Pasword

e sostituite la prima riga del file /root/.ecryptfsrc con:

key=passphrase:passphrase_passwd_file=/percorso/vostro/file/miapassw.txt

In questo modo la password sarà si in chiaro su un file di testo, ma quanto meno su una chiavetta che si presume inserirete solo quando vi sarà necessario montare la vostra cartella crittografata.

Se invece siete ligi alla massima sicurezza allora omettete di scrivere la prima riga ed il sistema, ad ogni mount, vi chiederà la passphrase per poter proseguire. A questo proposito: dimenticate la vostra passphrase ed addio dati! Non esiste, ad oggi, un modo per recuperare i dati crittografati in questo modo.

Con questo direi che abbiamo visto tutto per quanto riguarda la creazione e manutenzione di una cartella crittografata usando ecryptfs-utils.

Chiaramente esistono altre soluzioni come VeraCrypt, TreuCrypt (obsoleto), DmCrypt e così via, ma questa ha il vantaggio di essere utilizzabile con programmi di sistema che di solito son già installati a fine attrezzaggio di una distribuzione. Chiaramente la cartella crittografata può essere portata su altro sistema *nux, ed utilizzata con gli stessi programmi. Basta un tar, e magari una compressione se la cartella è grossa, e potrete spostarla su altro sistema con *nux a bordo, via cd, chiavetta usb o trasferimenti diretti tipo ftp (mi auguro non ci sia chi lo usa ancora) o sftp o scp oppure, ancora, allegandolo come file ad un mail, a seconda delle dimensioni della cartella chiaramente.

Insomma avrete un contenitore crittografato in cui tenere o vostri dati importanti trasportabile da una distribuzione all’altra senza alcun problema.

ATTENZIONE: non ho, e ripeto non ho, verificato se la cartella così crittografata possa essere gestita anche si sistemi *BSD come OpenBSD o FreeBSD o oSX. Quindi considerate valido questo metodo SOLO per sistemi *nux.

Buon lavoro !!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *