Crypter son $HOME avec EncFS

Mardi 22 juillet 2008

Introduction

Vous êtes sous Ubuntu (Bubuntu, Kubuntu, etc.) et vous souhaitez protéger vos données contre un éventuel espion ? Vous ne voulez pas que vos sauvegardes soient accessibles à tout le monde ? Alors ce tutoriel est fait pour vous.

Il existe de nombreuses manières de chiffrer des données. Chaque méthode a des avantages et des inconvénients. Je ne compte pas débattre du bienfondé de ma solution, je vous laisse vous tourner vers les nombreux forums de discussions sur le sujet. Je vais simplement vous présenter la méthode que j’ai choisie : EncFS.

Choix de la méthode

Suivant vos motivations et vos contraintes techniques, vous ne choisirez pas nécessairement la même méthode de chiffrement. À titre personnel, j’en ai testé plusieurs avant de trouver celle qui me convenait. Pourquoi ai-je choisi EncFS ? Je voulais :

  • pouvoir crypter les données en temps réel sur mon ordinateur portable ;
  • avoir des fichiers de tailles sensiblement équivalentes aux originaux ;
  • ne pas avoir de baisse des performances générales ;
  • être en mesure de chiffrer la totalité de mon répertoire personnel, données et répertoires de configurations inclus ;
  • avoir la possibilité de copier les données cryptées vers mon serveur de sauvegarde ;
  • conserver la possibilité d’utiliser PartImage.

L’ensemble de ces désirs et contraintes ma conduit à utiliser EncFS. Il s’agit d’une librairie (utilisant Fuse) pour chiffrer les données selon plusieurs algorithmes.

Plusieurs avantages en découlent :

  • la partition reste en EXT3, pas en LVM, PartImage peut donc continuer de la traiter comme avant (de même pour GParted) ;
  • le répertoire contenant les données cryptées est accessible en parallèle du répertoire contenant les données claires (possibilités de sauvegardes) ;
  • la baisse des performances est imperceptible.

À cela s’ajoute cependant un inconvénient majeur : la difficulté de mise en place...

Configuration du répertoire chiffré

Rappel : la démarche ci-dessous permet de chiffrer la totalité de votre répertoire $HOME. Vous devrez peut-être l’adapter, notamment si vous souhaitez chiffrer uniquement une partie de votre arborescence, auquel cas la procédure sera sensiblement plus simple.

Il faut tout d’abord installer le paquet encfs.

Nous allons maintenant créer le répertoire où seront stockées les données chiffrées. Nous pouvons par exemple utiliser le répertoire /var :

sudo mkdir /var/crypte

Nous avons également besoin d’un répertoire temporaire afin de copier les données depuis notre répertoire personnel :

mkdir /tmp/clair

Passons maintenant à la configuration d’EncFS proprement dite :

encfs /var/crypte /tmp/clair

— 

Création du nouveau volume encrypté.
Veuillez choisir l'une des options suivantes :
entrez "x" pour le mode de configuration expert
entrez "p" pour le mode paranoïaque préconfiguré,
toute autre entrée ou une ligne vide sélectionnera le mode normal.
?> x

— 

Mode de configuration manuelle sélectionné
Les algorithmes suivants sont disponibles :
1. AES : 16 byte block cipher
-- supporte des tailles de clé de 128 à 256 bits
-- supporte des blocs de 64 à 4096 octets
2. Blowfish : Cryptage en bloc de 8 octets
-- supporte des tailles de clé de 128 à 256 bits
-- supporte des blocs de 64 à 4096 octets
3. blowfish-compat : algorithme compatible avec EncFS 0.2-0.6
-- taille de clé 160 bits
-- taille de bloc 64 octets
Entrez le numéro correspondant à votre choix : 1

— 

Algorithme sélectionn "AES"
Veuillez choisir une taille de clé en bit.
L'algorithme que vous avez sélectionné supporte
des clés de 128 à 256 bits par paliers de 64 bits.
Par exemple :
128, 192, 256
Taille de clé sélectionnée : 128

— 

Veuillez choisir une taille de bloc en octets.
L'algorithme que vous avez sélectionné supporte
des blocs de 64 à 4096 octets par paliers de 16 octets.
Ou appuyez sur entrée pour la valeur par défaut (512 octets).
taille du bloc de système de fichiers : 512

— 

Les algorithmes d'encodage de noms de fichiers suivants sont disponibles :
1. Block : E
2. Null : No encryption of filenames
3. Stream : Encodage de flux, garder les noms de fichiers, aussi courts que possible.
Entrez le numéro correspondant à votre choix : 1

— 

Acceptez ensuite par défaut toutes les options suivantes. À la fin, le configurateur vous demandera de saisir par deux fois le mot de passe que vous souhaitez utiliser pour chiffrer vos données.

Attention : il ne faut en aucun cas utiliser le mode « paranoïaque ». Celui-ci est trop restrictif pour un répertoire $HOME et empêcherait votre système de fonctionner correctement.

Copie des données

Vous voilà donc avec vos deux dossiers crypté et décrypté. Il s’agit maintenant de transférer les données depuis votre répertoire personnel vers votre espace protégé (l’opération peut être très longue).

cd /tmp/clair
cp -av $HOME/* .
cp -av $HOME/.* .

Pour ne pas risquer de perdre toutes vos données, ne supprimez pas votre dossier personnel tout de suite, déplacez-le simplement pour créer un répertoire vide :

sudo mv $HOME ${HOME}.old
sudo mkdir $HOME
sudo chown $USERNAME:$USERNAME $HOME

Lorsque vous serez satisfait de votre configuration, n’oubliez pas de venir supprimer ce dossier qui contient l’ensemble de vos données en clair...

Montage de la partition chiffrée

Il faut désormais configurer votre système pour qu’il monte la partition chiffrée en lieu et place de votre dossier personnel au démarrage de votre machine. Pour que le système fonctionne au mieux, j’ai choisi de monter la partition le plus tôt possible, en mode console. Vous pouvez évidemment utiliser une autre technique si celle-ci ne vous convient pas.

On installe le paquet dialog.

On crée ensuite un script de démarrage /etc/init.d/encfs :

#!/bin/sh
case $1 in
  start)
     res=1
     while test $res -ne 0
     do
        dialog --passwordbox "Entrez le mot de passe..." 0 0 2> /tmp/pass
        echo "" >> /tmp/pass
        cat /tmp/pass | encfs -S /votre/repertoire/crypte /home/votre_user
        mount | grep "encfs" > /dev/null 2>&1
        res=$?
     done
     rm /tmp/pass
     if test $? -ne 0
     then
        halt -p
        exit 1
     fi
     exit 0
  ;;
  stop)
     umount -f encfs
  ;;
  restart|reload)
     $0 stop
     $0 start
  ;;
esac

N’oubliez pas de remplacer /votre/repertoire/crypte et /home/votre_user par vos valeurs propres.

Activons ensuite ce script au démarrage :

sudo chmod +x /etc/init.d/encfs
sudo update-rc.d encfs defaults 03

Enfin, nous devons désactiver la barre de chargement du démarrage sans quoi la boîte de dialogue restera masquée. Éditons donc le fichier /boot/grub/menu.lst et modifions la ligne

# defoptions=quiet splash locale=fr_FR

de manière à retirer « splash »

# defoptions=quiet locale=fr_FR

Validons enfin ces modifications :

sudo update-grub

Conclusion

Voilà, vous êtes désormais en possession d’un répertoire crypté qui se monte au démarrage de votre machine uniquement dans le cas où vous avez saisi le mot de passe correspondant. Vous avez maintenant toute latitude pour sauvegarder les données cryptées sur tout support physique sans compromettre la sécurité de vos données.