Encfs : Mise en place d'Encfs avec FUSE

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

1 Introduction

EncFS est un système de fichier crypté, qui permet donc de stocker sur son disque dur des fichiers dont on voudrait que les autres n'aient pas accès, même si la machine part dans la nature.

EncFS me semble particulièrement intéressant :

  • Pas besoin d'être root pour l'utiliser
  • Mise en oeuvre super simple. Utilisation triviale (cf. infra)
  • Encryptage séparé de chaque fichier. Cela peut paraître mois sûr (on peut connaitre les tailles, nom, dates de modifs des fichiers) mais ça a l'énorme avantage d'être plus efficace (pas besoin de re-encrypter tout le volume si un seul fichier change) et adaptable (pas besoin de prévoir à l'avance la taille que prendra le système de fichier)
  • (avis subjectif) le mec qui a fait ça m'a l'air de bien comprendre les outils crypto. À vous de vérifier mes dires. ;-)

2 Installation

2.1 Debian

Nous allons récupérer les paquets nécessaires :

Command aptitude
aptitude install encfs fuse-utils

Maintenant, vérifions que vous avez ce qu'il faut dans votre noyau :

Command grep
grep FUSE < /boot/config-2.6.19 

Vous devriez avoir une de ces 2 lignes :

CONFIG_FUSE_FS=y
CONFIG_FUSE_FS=m

Si ce n'est pas le cas, il faut recompiler votre noyau et mettre FUSE en module ou l'intégrer en dur.

2.2 FreeBSD

Sur FreeBSD, il est préférable de prendre les versions packagées tellement la partie compilation est longue et requiert de dépendances :

Command pkg_add
pkg_add -r fusefs-encfs

Ensuite, ajoutez cette ligne dans votre rc.conf :

Configuration File /etc/rc.conf
...
fusefs_enable="YES"

Ensuite, si vous voulez que n'importe quel utilisateur puisse utiliser fuse, lancez cette commande :

Command sysctl
sysctl vfs.usermount=1

3 Configuration

Nous allons réer le système de fichier encrypté :

Command encfs
encfs ~/.crypt ~/crypt

Répondre aux questions :

 The directory "/home/deimos/.crypt" does not exist. Should it be created? (y,n) y
 The directory "/home/deimos/crypt" does not exist. Should it be created? (y,n) y
 Création d'un nouveau volume chiffré.
 Veuillez choisir au moins une des options suivantes :
  entrez "x" pour le mode de configuration expert,
  entrez "p" pour un mode pré-configuré paranoïaque,
  n'importe quoi d'autre ou une ligne vide sélectionnera le mode standard.
 ?> p

Nous n'allons pas nous prendre la tête ici et configurer en mode Paranoïaque pour avoir le must en matière de cryptage :-) :

 Configuration paranoïaque sélectionnée.
 
 Configuration terminée. Le système de fichiers sur le
 point d'être créé a les caractéristiques suivantes :
 Chiffrement de système de fichiers "ssl/aes", version 2:1:1
 Encodage du nom de fichier : "nameio/block", version 3:0:1
 Taille de clé : 256 bits
 Taille de bloc : 512 octets, y compris 8 octets d'en-tête MAC
 Chaque fichier comprend un en-tête de 8 octets avec des données IV uniques.
 Nom de fichiers chiffrés en utilisant le mode de chaînage IV.
 L'IV des données du fichier est chaînée à l'IV du nom de fichier.
 
 Vous allez maintenant devoir entrer un mot de passe
 pour votre système de fichiers.
 Vous allez devoir absolument vous souvenir de ce mot de passe,
 comme il n'y a aucun mécanisme de secours.
 Cependant, le mot de passe pourra être changé plus tard
 en utilisant encfsctl.

Choisissez votre mot de passe :

 Nouveau mot de passe EncFS:  
 Vérifiez le mot de passe EncFS:

4 Utilisation

4.1 Mono Utilisateur

Pour monter notre dossier crypté :

Command encfs
encfs ~/.crypt ~/crypt

Entrez maintenant votre mot de passe. (Lire la version Multi Utilisateurs pour la suite des explications). Si vous souhaitez que tout le monde puisse accéder à votre partage crypté, il faut rajouter --public :

Command encfs
encfs --public ~/.crypt ~/crypt

4.2 Multi Utilisateurs

Créer un fichier pour qu'il soit crypté à la volée :

Command touch
touch ~/crypt/toto

Vérifions notre fichier :

Command ls
> ls -l ~/crypt/toto
-rw-r--r--  1 deimos deimos 0 2005-04-20 21:27 /home/deimos/crypt/toto

Et maintenant dans le dossier crypté :

Command ls
> ls -l ~/.crypt/
 total 0
-rw-r--r--  1 deimos deimos 0 2005-04-20 21:27 FmIxHB3JurWr9jUCCgsUI8Ei

4.3 Démonter un volume

Pour démonter le volume :

Command fusermount
fusermount -u ~/crypt/

Voilà, c'est aussi simple que ça :-)

4.4 Changer le mot de passe

Si vous souhaitez changer le mot de passe d'un volume encfs, faite comme ceci :

Command encfsctl
encfsctl passwd ~/.crypt

5 Pam et Encfs

Put pam_encfs.conf in /etc/security and modify your pam to load (for example):

auth required        pam_encfs.so

and if you want to auto umount on logout:

session        required        pam_encfs.so

(note that setting "encfs_default --idle=1", means it'll auto umount after 1 minute idletime, so you can ignore this if you want to)

If you want gdm working you'll have to do this: (to allow use of --public / allow_root / allow_other)

echo "user_allow_other" >> /etc/fuse.conf
adduser testuser # (put him in the fuse group if you have one)
mkdir -p /mnt/storage/enc/testuser 

Setup your /etc/pam_encfs.conf (default should work)

chown testuser:testuser /mnt/storage/enc/testuser
su testuser
encfs /mnt/storage/enc/testuser /home/testuser

Use same password as your login atm :

fusermount -u /home/testuser

when you login, the directory should be mounted.

Example to enable encryption for existing user (logout of any important things, turn off your apps, preferably do this in terminal login/as root) :

sudo mkdir -p /mnt/storage/enc/anders /mnt/storage/enc/tmp
Use your main password on next part :
encfs /mnt/storage/enc/anders /mnt/storage/enc/tmp -- -o allow_root
cd /home/anders
find . -print -xdev | cpio -pamd /mnt/storage/enc/tmp
fusermount -u /mnt/storage/enc/tmp
cd /
sudo mv /home/anders /home/anders.BAK
sudo mkdir /home/anders
sudo chown anders:anders /home/anders
sudo rmdir /mnt/storage/enc/tmp
exit

On next login (in theory) your homedir should be mounted ;)

6 FAQ

6.1 Is there an example configuration file ?

Yes, both in svn (link at http://hollowtube.mine.nu/wiki/index.php?n=Projects.PamEncfs ), and in the downloaded archive from my release. Some distributions have chosen an extreamly simple example configuration file, mine is a bit more explained.

6.2 What command will pam_encfs run to mount a directory ?

It depends on your options, but something like :

encfs -S --idle=1 -v /mnt/storage/enc/test /home/test -- -o allow_other,allow_root,nonempty
  

6.3 My KDE doesn't work

Login through KDE sometimes fails because KDE tries to store files to the home directory before mounting, and expect them to be there afterwards. To work around this you'll need to set 3 things in /etc/kde3/kdm/kdmrc, "DmrcDir=/tmp" (in the general section). And "UserAuthDir,ClientLogFile", both can be set to /tmp, these are in the [X-*-Core] section.
There might be security related issues with this solution, I haven't looked into that. If your paranoid about it you could make a temp directory tmp/user that only you have access to.

6.4 Can I mount multiple under one login directories with pam_encfs ?

No, there is however an unofficial patch here : http://bugs.gentoo.org/show_bug.cgi?id=102112 (https://joshua.haninge.kth.se/~sachankara/pam_encfs-0.1.3-multiple-mount-points.patch ). This has not been applied to the main tree, as it segfaults when I test it with a very basic encfs configuration file (but might work with more advanced ones).

6.5 pam_encfs does not find my encfs executable

pam_encfs uses execvp, that means that in some systems it wont find it if it's in /usr/local/bin, make a symlink to /usr/bin.

6.6 It works on normal login, but not in gdm

  • Problem1, /etc/pam.d/gdm has a different system than /etc/pam.d/login, fix it ;).
  • Problem2, You dont have the fuse option user_allow_root(or other) set,
    • Make sure /etc/fuse.conf has user_allow_other (or user_allow_root).
    • Make sure /etc/pam_encfs.conf has fuse_default allow_root, or the fuse option allow_root set.

6.7 It asks me for my password twice

Try adding use_first_pass after pam_unix (or any other module that supports it).

6.8 I've tried to use pam_encfs as my main authentication scheme, it doesn't work !

I return PAM_IGNORE on errors, this can't work reliably as a main system, because of for example logging in twice (in which case the directory would already be mounted, and we therefor can't check password ok).

6.9 I can't login to X because the filesystem doesn't support locks

This could be a problem if your not using drop_permission, use it. And if you REALLY want to mount as root, put:

export XAUTHORITY=/tmp/.Xauthority-$USER
export ICEAUTHORITY=/tmp/.ICEauthority-$USER

in your ~/.bashrc

My system-auth file on gentoo:

auth       required     pam_env.so
auth       sufficient   /lib/security/pam_encfs.so
auth       sufficient   /lib/security/pam_sha512.so pwdfile /etc/security/pam.sha
auth       sufficient   pam_unix.so likeauth nullok
auth       required     pam_deny.so
 
account    required     pam_unix.so
 
password   required     pam_cracklib.so retry=3
password   sufficient   pam_unix.so nullok md5 shadow use_authtok
password   required     pam_deny.so
 
session    required     pam_limits.so
session    required     pam_unix.so

Here it'll ask for the password twice, my modules (pam_encfs/pam_sha512) will try to use any previous password if it finds one.
So if you move pam_unix.so in auth to under pam_env.so, it'll ask for the password once.
Note that if pam_unix gets a password it finds ok, pam_encfs/pam_sha512 wont be used at all.

6.10 I can't create hard link

This is because of the External IV Chaining :

There is a cost associated with this. When External IV Chaining is enabled, hard links will not be allowed within the filesystem, as there would be no way to properly decode two different filenames pointing to the same data.
 
Also, renaming a file requires modifying the file header. So renames will only be allowed when the user has write access to the file.
 
Because of these limits, this option is disabled by default for standard mode (and enabled by default for paranoia mode).

If you create as the paranoia mode a crypted partition, this mode will be automatically enable. So use the default mode or create as expert mode without this :-)

6.11 Encfs in an OpenVZ VE

Si vous souhaitez faire de l'encfs dans un VE, vous risquez de vous heurter à des problèmes de droit:

 EncFS Password: 
fuse: device not found, try 'modprobe fuse' first
fuse failed.  Common problems:
 - fuse kernel module not installed (modprobe fuse)
 - invalid options -- see usage message

Sachez donc qu'il faut déjà au niveau du VZ charger le module fuse pour que les VE en héritent. Ajoutez ceci sur votre VZ pour ne pas avoir à charger le module à chaque boot :

Configuration File /etc/modules
...
# Load Fuse
fuse
...

Puis chargez le dynamiquement pour y avoir accès ensuite :

Command modprobe
modprobe fuse

Pour les contourner on va donc créer le device fuse depuis l'host sur le VE en question et lui rajouter les droits d'admin (un peu moyen en terme de sécu, mais pas le choix) :

Command
vzctl set $my_veid --devices c:10:229:rw --save
vzctl exec $my_veid mknod /dev/fuse c 10 229
vzctl set $my_veid --capability sys_admin:on --save

Il est possible que la deuxième ligne ne fonctionne pas quand le VE est éteint. Lancez là alors une fois allumée puis montez votre partition encfs.