Encfs : Mise en place d'Encfs avec FUSE
Contents
- 1 Introduction
- 2 Installation
- 3 Configuration
- 4 Utilisation
- 5 Pam et Encfs
- 6 FAQ
- 6.1 Is there an example configuration file ?
- 6.2 What command will pam_encfs run to mount a directory ?
- 6.3 My KDE doesn't work
- 6.4 Can I mount multiple under one login directories with pam_encfs ?
- 6.5 pam_encfs does not find my encfs executable
- 6.6 It works on normal login, but not in gdm
- 6.7 It asks me for my password twice
- 6.8 I've tried to use pam_encfs as my main authentication scheme, it doesn't work !
- 6.9 I can't login to X because the filesystem doesn't support locks
- 6.10 I can't create hard link
- 6.11 Encfs in an OpenVZ VE
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 :
aptitude |
aptitude install encfs fuse-utils |
Maintenant, vérifions que vous avez ce qu'il faut dans votre noyau :
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 :
pkg_add |
pkg_add -r fusefs-encfs |
Ensuite, ajoutez cette ligne dans votre rc.conf :
/etc/rc.conf |
... fusefs_enable="YES" |
Ensuite, si vous voulez que n'importe quel utilisateur puisse utiliser fuse, lancez cette commande :
sysctl |
sysctl vfs.usermount=1 |
3 Configuration
Nous allons réer le système de fichier encrypté :
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é :
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 :
encfs |
encfs --public ~/.crypt ~/crypt |
4.2 Multi Utilisateurs
Créer un fichier pour qu'il soit crypté à la volée :
touch |
touch ~/crypt/toto |
Vérifions notre fichier :
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é :
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 :
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 :
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 :
/etc/modules |
... # Load Fuse fuse ... |
Puis chargez le dynamiquement pour y avoir accès ensuite :
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) :
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.