System Encryption with eCryptfs (Italiano)

From ArchWiki
Revision as of 15:20, 31 May 2009 by Leo72 (Talk | contribs) (Created page with '{{translateme}} =Introduzione= Questo articolo descrive l'utilizzo di base di [https://launchpad.net/ecryptfs eCryptfs] e guiderà attraverso il processo di creazione di una cart...')

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Tango-preferences-desktop-locale.pngThis article or section needs to be translated.Tango-preferences-desktop-locale.png

Notes: please use the first argument of the template to provide more detailed indications. (Discuss in Talk:System Encryption with eCryptfs (Italiano)#)

Introduzione

Questo articolo descrive l'utilizzo di base di eCryptfs e guiderà attraverso il processo di creazione di una cartella privata, cifrata e sicura, in $HOME, dove sarà possibile salvare tutti i dati sensibili. Se la domanda è "Perché dovrei usare la crittografia?" allora è bene iniziare leggendo l'articolo su dm-crypt che risponde alle domande di base sulla sicurezza.

A livello di implementazione eCryptfs differisce da dm-crypt: questo fornisce un layer virtuale cifrato su un dispositivo a blocchi, mentre eCryptfs è un filesystem a tutti gli effetti, per l'esattezza un filesystem con cifratura a livello di filesystem stesso. Questa tabella compara i due sistemi.

In sintesi eCryptfs permette di non doversi preoccupare di pre-allocare spazio su disco per memorizzare i propri file, come ad esempio il dover creare partizioni separate: è possibile montare eCryptfs sopra a qualunque cartella per proteggerla. Sono incluse, ad esempio, l'intera $HOME di un utente oppure filesystem di rete (avendo condivisioni NFS cifrati). Tutti i metadata crittografici sono memorizzati negli header dei file così che i dati cifrati possono essere spostati o salvati per backup e poi recuperati senza problemi. Ci sono altri vantaggi, ma anche degli inconvenienti: eCryptfs non può cifrare intere partizioni per cui non può essere utilizzato per proteggere lo spazio di swap (per far ciò può essere però utilizzato congiuntamente con dm-crypt).

Nozioni di base

eCryptfs fa parte di Linux fin dalla versione 2.6.19, ma per poterlo utilizzare sono richiesti gli strumenti per gestire lo spazio utente: va perciò installato il pacchetto ecryptfs-utils che a sua volta richiede il pacchetto keyutils (che contiene gli strumenti per gestire le chiavi di cifratura del portafoglio del kernel). Entrambi i pacchetti sono presenti in AUR.

Dopo l'installazione di questi pacchetti, potete caricare il modulo ecryptfs e continuare con il setup:

# modprobe ecryptfs

Il pacchetto ecryptgs-utils è distribuito con alcuni script che aiutano con la gestione della chiave ed altri compiti simili. Alcunu sono stati scritti per automatizzare l'intero processo di setup delle cartelle cifrate (ecryptfs-setup-private) o per aiutare a combinare ecryptfs con dm-crypt per proteggere lo spazio di swap (ecryptfs-setup-swap). Questa guida però non li utilizzerà descrivendo invece come procedere a livello manuale così da capire per bene come le cose vengono gestite.

Prima di procedere è bene consultare la documentazione di eCryptfs: questo tool è distribuito infatti con un completo e ben fatto insieme di pagine esplicative.

Setup

La prima cosa da fare è creare la cartella privata. Nell'esempio che segue è stata chiamata per comodità Private:

$ mkdir ~/Private
$ chmod 700 ~/Private

(chmod 700 serve ad assegnare i permessi di accesso al solo proprietario). Adesso eCryptfs può essere montato sopra ad essa con

$ sudo mount -t ecryptfs ~/Private ~/Private

La prima volta che monteremo la cartella, ecryptfs chiederà di rispondere ad alcune domande e di fornire una passphrase, una frase di cifratura che sarà utilizzata per montare la cartella in futuro. E' comunque possibile avere differenti chiavi di cifrature per crittare differenti dati (per ulteriori informazioni si legga più sotto): per comodità questa guida si limiterà ad esaminare il caso di una unica chiave e di una unica passphrase. Ecco un esempio:

Key type: passphrase
Passphrase: FraseDiCifraturaCortaEMoltoDebole
Cypher: aes
Key byte: 16
Plaintext passtrough: no
Filename encryption: no
Add signature to cache: yes 

Analizziamo le varie voci:

  • La passphrase è la passphrase di montaggio che sarà combinata con un salt, hashed and loaded into the kernel keyring.
    • In eCryptfs terms, this salted, hashed passphrase is your "file encryption key, encryption key", or fekek.
  • eCryptfs supports a few different cyphers (AES, blowfish, twofish...). You can read about them on Wikipedia.
  • Plaintext passtrough enables you to store and work with un-encrypted files stored in the same directory.
  • Filename encryption is available since Linux 2.6.29
    • In eCryptfs terms the key used to protect filenames is known as "filename encryption key", or fnek.
  • The signature of the key(s) will be stored in /root/.ecryptfs/sig-cache.txt

Your setup is now complete and directory is mounted. You can place any file in the ~/Private directory and it will get encrypted. Before you do anything else you should inspect your /etc/mtab file, the ecryptfs entry in particular - we will discuss the importance of it a few lines below.

Now copy a few files to your new private directory, and then un-mount it. If you inspect the files you will see that they are unreadable - encrypted. That was cool you say, but how do I get them back... and that brings us to:

Mounting

When ever you need your files available you can repeat the above mount procedure, using the same passphrase and options if you want to access your previously encrypted files or using a different passphrase (and possibly options) if for some reason you want to have different keys protecting different data (imagine having a publicly shared directory where different data is encrypted by different users (and their keys)).

In any case going trough those questions every time could be a bit tedious. First solution is that you provide all the options to the mount command (this is where the mtab line comes in) except for your passphrase for which you will be prompted:

$ sudo mount -t ecryptfs -o ecryptfs_cipher=aes,ecryptfs_key_bytes=16,key=passphrase,ecryptfs_unlink_sigs,ecryptfs_passthrough=no,ecryptfs_enable_filename_crypto=no

Or you can create an entry in the /etc/fstab file for this mount point:

# eCryptfs mount points
/home/username/Private /home/username/Private ecryptfs rw,user,noauto,ecryptfs_sig=XXX,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs 0 0

Let's summarize

  • You will notice that we defined the user option, it enables you to mount the directory as a user
  • Notice the ecryptfs_sig option, replace XXX with your own key signature (as seen in the mtab line earlier or in sig-cache.txt)

There is just one "problem" with this solution. The passphrase. When you un-mounted the directory your key was deleted from the kernel keyring, and in order to mount it you need to insert it into the keyring again. You can use the ecryptfs-add-passphrase utility or the ecryptfs-manager to do it. This would be a good place to also mention the keyctl utility from the (earlier installed) keyutils package, it can be used for any advanced key management tasks.

When the key is inserted you can mount the directory:

$ ecryptfs-add-passphrase
  Passphrase: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

$ mount -i /home/username/Private

You will notice that we used the "-i" option this time. It disables invoking the mount helper. Speaking of which, using "-i" by default mounts with: nosuid, noexec and nodev. If you want to have at least executable files in your private directory you can add the exec option to the fstab line.

Removing

If you want to move a file out of the private directory just move it to it's new destination while ~/Private is mounted. Also note that there are no special steps involved if you want to remove your private directory. Make sure it is un-mounted and delete it, along with all the files.

Advanced

This covers the basic setup of a private encrypted directory. There is another article on eCryptfs and Arch Linux that covers encryption of your entire $HOME and encrypting swap space without breaking hibernation (suspend to disk). It includes many more steps (i.e. using PAM modules and automatic mounting) and the author decided not to replicate it here because there is just no single "right" way to do it. The author proposes some solutions and discusses the security implications, but they are his solutions and as such might not be the best nor are they endorsed by the eCryptfs project in any way.

You can read the article here: eCryptfs and $HOME

PAM_Mount

The above article uses a profile to mount the home directory. The same can be done using pam_mount with the benefit that home is unmounted when all sessions are logged out. As eCryptfs needs the -i switch, the lclmount setting will need to be changed. I use the following in pam_mount.conf.xml

<lclmount>mount -i %(VOLUME) "%(before=\"-o\" OPTIONS)"</lclmount>

To avoid wasting time needlessly unwrapping the passphrase you can create a script that will check pmvarrun to see the number of open sessions.

#!/bin/sh
#/usr/bin/doecryptfs
exit $(/usr/sbin/pmvarrun -u$PAM_USER -o0)

With the following line added before the unwrap module

auth    [success=ignore default=1]    pam_exec.so     quiet /usr/bin/doecryptfs
auth    required                      pam_ecryptfs.so unwrap

The article suggests adding these to /etc/pam.d/login, but the changes will need to be added to all other places you login, such as /etc/pam.d/kde