Encryption avec eCryptfs

De ArchwikiFR


Sommaire

Introduction

Cet article décrit l'utilisation basique du logiciel eCryptfs. Il vous guide afin que vous puissiez créer un dossier chiffré sécurisé à l'intérieur de votre répertoire $HOME, à l'intérieur duquel vous pourrez stocker toutes vos données privées et vos fichiers 'sensibles'. Si vous vous demandiez «Pourquoi devrais-je chiffrer mes données ?», alors commencez votre lecture par la première section de l'article dm-crypt, qui répond à quelques premières questions de théorie et de sécurité.

L'implémentation de eCryptfs diffère de celle de dm-crypt, qui fournit une couche de chiffrement du périphérique de bloc, tandis que eCryptfs est un vrai système de fichier, ou plutôt un système de fichier de chiffrement basé sur les fichiers pour être exact. Pour comparer les deux, vous pouvez vous référer au site d'ecryptfs.

En résumé, eCryptfs ne nécessite pas d'effort spécial pour son utilisation, telle une partition séparée : vous pouvez monter eCryptfs sur n'importe quel dossier afin de protéger celui-ci. Cela inclut par exemple votre dossier $HOME entier, ou bien des systèmes de fichiers de réseau (par exemple les partages NFS). Toutes les métadonnées cryptographiques sont stockées dans les en-têtes des fichiers, donc les données chiffrées sont déplaçables, archivables et récupérables facilement. Il y a d'autres avantages, mais il y a aussi des inconvénients, par exemple eCryptfs n'est pas conçu pour chiffrer complètement des partitions, ce qui signifie que vous ne pouvez pas lui demander de protéger votre espace swap (vous pouvez demander cela à dm-crypt.)

Les bases

eCrypts fait partie du noyau Linux depuis la version 2.6.19. Mais pour l'utiliser, il vous est nécessaire d'utiliser des outils utilisateurs : le paquet ecryptfs-utils qui requiert lui-même le paquet keyutils – des outils pour le système de gestion de clés du noyau. Ces deux paquets sont disponibles dans le AUR.

Une fois ces paquets installés, vous pouvez charger le module ecryptfs et poursuivre la configuration :

# modprobe ecryptfs

Le paquet ecryptfs-utils est distribué avec quelques scripts automatiques, qui vous aideront aux tâches de gestion des clés. Quelques-uns furent écrits pour automatiser le processus de configuration et d'installation d'un dossier chiffré dans $HOME (ecryptfs-setup-private), ou pour vous aider à combiner eCryptfs avec dm-crypt afin de protéger votre espace swap (ecryptfs-setup-swap). Malgré ces scripts, nous vous proposons ici de tout faire manuellement afin que vous compreniez vraiment ce qui se passe.

Avant que nous ne disions quoi que ce soit, il est conseillé que vous jetiez un coup d'œil à la documentation eCryptfs. Elle est distribuée avec d'excellentes pages d'aide, très complètes.

Installation

Créez d'abord vos dossiers privés, dans cet exemple nous les appellerons exactement comme ceci : Private

$ su -
# mkdir -m 700 /home/$USER/.Private
# mkdir -m 500 /home/$USER/Private
# chown $USER:$USER /home/$USER/{.Private,Private}

Résumons

  • Les données vraiment chiffrées seront stockées dans le dossier ~/.Private (appelé le dossier 'bas')
  • Tant qu'elles sont montées, les données apparaîtront déchiffées dans le dossier ~\Private (appelé le dossier 'haut')
    • Si elles ne sont pas montées, rien ne peut être écrit dans ce dossier
    • Tant qu'elles sont montées, elles ont les mêmes permissions que le dossier bas.

eCryptfs peut maintenant être monté sur le point de montage ~/Private.

# mount -t ecryptfs /home/$USER/.Private /home/$USER/Private

Il vous faudra répondre à quelques questions et fournir un mot de passe, qui sera ensuite utilisé pour monter le dossier. Cependant, vous pouvez aussi avoir des clés différentes qui chiffrent différents sets de données (cf ci-dessous). Par choix, nous limiterons ce guide à seulement une clé et une 'passphrase'. Voyons un exemple :

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

Résumons

  • Le mot de passe est votre passphrase de montage, qui sera rendu illisible («salé»), sera hashé et chargé dans le trousseau de clés de votre noyau.
    • Dans le jargon de eCryptfs, cette passphrase illisible et hashée est votre fekek, «file encryption key, encryption key».
  • eCryptfs permet différents chiffrements (AES, blowfish, twofish...). Ces chiffrements sont décrits sur Wikipédia.
  • L'option 'Plaintext passthrough' vous permet de stocker et travailler avec des fichiers déchiffrés stockés dans le dossier bas.
  • Le chiffrement des noms de fichiers est disponible depuis Linux 2.6.29.
    • Dans le jargon de eCryptfs, la clé utilisée pour protéger les noms de fichiers est appelée fnek, «filename encryption key».
  • La signature de ce(s) clé(s) est stockée dans /root/.ecryptfs/sig-cache.txt.

Puisque notre but in fine est d'être capable de monter ce dossier sans les privilèges de super-utilisateur, nous allons maintenant déplacer le répertoire de configuration de eCryptfs vers votre propre dossier personnel et vous transférer également la propriété de ce dossier :

# mv /root/.ecryptfs /home/$USER
# chown $USER:$USER /home/$USER/.ecryptfs

Votre configuration est désormais complète et le dossier est monté. Vous pouvez déposer n'importe quel fichier dans le dossier ~/Private et il sera chiffré. Avant que vous ne fassiez quoi que ce soit d'autre, vous devriez regarder le fichier /etc/mtab, en particulier l'entrée ecryptfs – nous en discuterons ci-dessous.

Maintenant, copiez quelques fichiers dans votre nouveau dossier privé, puis démontez-le. Si vous regardez les fichiers, vous verrez qu'ils sont illisibles – chiffrés. Vous voyez que c'est cool, mais maintenant comment faire pour les avoir de nouveau... cela nous amène à :

Montage

Lorsque vous avez besoin d'accéder à vos fichiers, vous pouvez recommencer la procédure de montage décrite ci-dessus, en utilisant la même passphrase et les mêmes options que vous aviez définies pour votre point de montage, mais vous pouvez aussi monter avec d'autres options et d'autres passphrases si vous voulez que différents mots de passe protègent des fichiers différents (imaginez un répertoire public partagé où les données sont chiffrées différemment selon les propriétaires des données.)

En tout cas, réaliser cette manœuvre à chaque fois peut être fastidieux. La première solution est de fournir toutes les options à la commande mount (c'est là que la ligne de mtab précédemment évoquée est utile), sauf que l'outil vous demandera votre mot de passe :

$ sudo mount -t ecryptfs /home/username/.Private /home/username/Private -o ecryptfs_cipher=aes,ecryptfs_key_bytes=16,key=passphrase

La deuxième solution, celle qui est recommandée, est de créer une entrée dans le fichier /etc/fstab pour ce point de montage :

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

REMARQUE :

Résumons

  • Vous remarquerez que nous avons défini une option utilisateur, ce qui permet de monter ce dossier en tant qu'utilisateur.
  • Remarquez l'option ecryptfs_sig, il faut remplacer XY par votre propre signature de clé (telle que vous l'avez vue à la ligne mtab auparavant et dans le fichier sig-cache.txt.)
  • Si vous activez le chiffrement des noms de fichiers alors il faut passer une autre option de montage : ecryptfs_fnek_sig=XY, où XY est la même signature que vous avez fourni avec l'option ecryptfs_sig.
  • La dernière option ecryptfs_unlink_sigs est là pour s'assurer que le trousseau de clés est effacé à chaque fois que le dossier est démonté.

Puisque votre clé est effacée à chaque démontage, vous devez à chaque montage l'insérer dans le trousseau. Vous pouvez utiliser l'utilitaire ecryptfs-add-passphrase ou l'outil ecryptfs-manager :

Lorsque la clé est insérée, vous pouvez monter le dossier :

$ ecryptfs-add-passphrase
  Passphrase: ThisIsAVeryWeakPassphrase

$ mount -i /home/username/Private

Vous remarquerez que nous avons utilisé l'option -i cette fois. Cela désactive l'assistant de montage. D'ailleurs, cette option s'accompagne automatiquement de nosuid, noexec et de nodev. Si vous voulez avoir des fichiers exécutables dans votre dossier privé, vous pouvez ajouter l'option exec à la ligne fstab.

Voici un bon endroit pour mentionner l'outil keyctl du paquet (précédemment mentionné) keyutils. Il peut être utilisé pour toute tâche de gestion avancée de clés. Les exemples suivants montrent comment lister le contenu du trousseau de clés et comment l'effacer :

$ keyctl list @u
$ keyctl clear @u

Utilisation

Vous pouvez non seulement utiliser ceci pour chiffrer vos données privées et sensibles, mais aussi pour protéger les données des logiciels. Par exemple, Firefox a un gestionnaire de mots de passe interne, mais ne protège pas l'historique ou le cache, qui peuvent s'avérer sensibles. Les protéger est facile :

 $ mv ~/.mozilla ~/Private/mozilla
 $ ln -s ~/Private/mozilla ~/.mozilla

Suppression

Si vous voulez déplacer un fichier hors de votre dossier protégé, il vous suffit de le déplacer tandis que ~/Private est monté. Remarquez qu'il n'y a pas de choses spéciales à faire si vous voulez supprimer votre dossier privé. Assurez-vous de l'avoir bien démonté, puis supprimer ~/.Private, avec tous les fichiers qu'il contient.

Sauvegarde

La configuration expliquée ici sépare le répertoire des données chiffrées du point de montage, afin que les données chiffrées soient disponibles pour sauvegarde à n'importe quelle moment. Si on utilise un montage superposé (par exemple ~/Secret monté par-dessus ~/Secret), le dossier bas, chiffré, est plus difficile d'accès. Aujourd'hui, avec les cronjobs automatiques et les logiciels de sauvegarde, les risques de laisser s'échapper des données sensibles est plus grand.

Nous expliquons ci-dessus que toutes les métadonnées cryptographiques sont stockées dans les en-têtes des fichiers. Vous pouvez effectuer simplement des sauvegardes, ou des sauvegardes incrémentales, de votre dossier ~/Private, comme vous le feriez pour n'importe quel autre dossier.

Davantage d'information

Cet article de wiki couvre seulement les étapes basiques d'utilisation d'un dossier chiffré privé. Il y a un autre article eCryptfs sur Arch Linux, qui propose de chiffrer votre $HOME tout entier, et de chiffrer votre espace swap sans casser l'hibernation (suspend to disk).

Cet article inclut bien d'autres étapes (par exemple l'activation des modules PAM et du montage automatique) et l'auteur était opposé à l'idée de reproduire ce contenu ici, parce qu'il n'y a pas de « bonne » façon de le faire. L'auteur propose quelques solutions et discute des implications de sécurité qui en découlent, mais ce sont ses propres solutions, peut-être pas les meilleures, peut-être pas celles que l'équipe de eCryptfs approuverait de toute façon.

Article: eCryptfs and $HOME de Adrian C. (anrxc).

Montage PAM

L'article «eCryptfs et $HOME» ci-dessus utilise un fichier d'initiation du type 'terminal' pour monter le dossier /home. La même chose peut être utilisée en utilisant pam_mount avec un bénéfice : $HOME est démonté quand toutes les sessions sont déconnectées. Comme eCryptfs a besoin du signal -i, la configuration lclmount a besoin d'être modifiée. J'utilise la chose suivante dans le fichier /etc/security/pam_mount.conf.xml:

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

Souvenez-vous bien de régler la définition du volume (dans ~/.pam_mount.conf.xml, et décommentez luserconf).

<pam_mount>
<volume noroot="1" fstype="ecryptfs" path="/home/user/.Private" mountpoint="/home/user"/>
</pam_mount>

noroot est nécessaire (dans ma configuration en tout cas) parce que toutes les clés de chiffrement sont ajoutées au trousseau de l'utilisateur.

Pour éviter de perdre du temps à rendre clair («unwrap») votre mot de passe, vous pouvez créer un script qui vérifie que pmvarrun ne montre pas de session ouverte :

#!/bin/sh
#
#    /usr/local/bin/doecryptfs

exit $(/usr/sbin/pmvarrun -u$PAM_USER -o0)

Avec le module suivant ajouté avant le module de «unwrap» dans votre stack PAM :

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

Cet article suggère d'ajouter ceci à /etc/pam.d/login, mais ces changements devront être ajoutés partout où vous vous loguez, dans /etc/pam.d/kde par exemple.

Outils personnels