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