Blog

#AstuceDeCode 12 : avoir un espace de stockage sécurisé pour les mots de passe avec eCryptFS

Astuce de code-un espace de stockage sécurisé pour les mots de passe avec eCryptFS
Share Button

Sur les vrais systèmes il est parfaitement possible de crypter des répertoires de manière transparente. Ceci peut intervenir notamment si vous avez des applications qui ont besoin d’accéder à un magasin de mots de passe de manière sécurisée. Ca paraît stupide mais passer par un webservice ou autre pour obtenir ces mots de passe ne garantit aucune sécurité, étant donné que n’importe qui peut faire la bonne requête pour récupérer les mots de passe. Avec un système de fichiers crypté c’est différent.

 

Débloque les + belles offres tech en 10 mins

Présentation d’eCryptFS

eCryptFS est à l’origine un outil développé par Canonical pour Ubuntu. Il a été designé avant tout pour permettre de crypter les dossiers personnels, d’ailleurs l’installeur d’Ubuntu vous propose à l’installation un tel cryptage.

Néanmoins ce n’est pas son seul usage, et on peut s’en servir aussi pour contrôler l’accès à des magasins de données sensibles comme les mots de passe. Et pour le coup ce genre de protection résiste bien à des attaques du type liveCD, ou encore récupération de trames réseau.

L’implémentation d’eCryptFS est normalement faite pour que le dossier personnel crypté soit déchiffré quand l’utilisateur ouvre une session, mais il est possible de le faire au démarrage de la machine également. On va voir comment.

Installation de eCryptFS

L’installation de eCryptFS est on ne peut plus simple, puisqu’il suffit d’installer le paquet ecryptfs-utils. Le nom est le même sur les distributions à base Debian que celles à base RedHat. Pour les autres vous appartient de vous renseigner.

Mise en place de eCryptFS

La mise en place de eCryptFS est en fait assez simple, et fonctionne comme n’importe quel autre point de montage. Bref vous aurez un dossier qui contient les données cryptées, et qui ne sera pas lisible directement puisque crypté, et un dossier correspondant à votre point de montage, qui lui permettra de lire les données décryptées. Pour rendre le tout sympa il vaut mieux que le dossier contenant les données cryptées, autrement dit non monté, soit caché.

Là où les choses deviennent intéressantes est qu’il est parfaitement possible (et en fait recommandé) de définir des droits d’accès sur ces dossiers, pour que seuls les utilisateurs autorisés y aient accès. Ainsi des droits 700 ou 750 sont parfaitement appropriés.

Commençons par créer les dossiers. Les commandes données dans cette section doivent être exécutées en tant que root. Pour ce faire on commence avec les commandes suivantes :


mkdir -p /foo/bar/{.encrypted,encrypted}
chown user:group /foo/bar/{.encrypted,encrypted}
chmod 750 /foo/bar/{.encrypted,encrypted}

Un point très important est qu’il ne faut pas que ces dossiers contiennent de liens symboliques. Si c’est le cas faites la résolution des liens manuellement pour cette étape, ça aura son importance plus tard.

Pour info la notation avec les accolades est appelée expansion de paramètres en bash. Ca sort du sujet, mais c’est sympa à connaître pour les flemmards. Plus d’infos ici.

Premier montage du dossier crypté

Revenons à nos moutons donc. On veut maintenant monter les dossiers, et si possible que ça se fasse de manière automatique au démarrage. La première chose à faire est de créer un fichier dénommé /root/.ecryptfsrc. Son contenu doit être comme suit :


key=passphrase:passphrase_passwd=<votre_mot_de_passe>
ecryptfs_sig=5826dd62cf81c615
ecryptfs_cipher=aes
ecryptfs_key_bytes=16
ecryptfs_passthrough=n
ecryptfs_enable_filename_crypto=n

Voici les détails des champs les plus importants de ce fichier.

  • key désigne la clef de cryptage utilisée. Vous pouvez la stocker directement dans ce fichier, ou dans un fichier annexe. En toute honnêteté dans le cas d’un point de montage devant être restauré automatiquement à chaque démarrage il n’y a aucun souci à la laisser en clair en root, de toute façon le dossier /root n’est pas accessible au commun des mortels.
  • ecryptfs_sig désigne une signature, utilisée pour le cryptage. Vous pouvez y mettre une valeur hexadécimale arbitraire, ou de préférence celle contenu dans le fichier root/.ecryptfs/sig-cache.txt. Dans le cas où la signature n’est pas présente dans ce dernier, eCryptFS vous proposera de l’y ajouter.
  • ecryptfs_enable_file_name_crypto active ou désactive l’encryptage des noms de fichiers. La performance peut s’en ressentir.

Désormais vous pouvez monter une première fois votre dossier pour vérifier que tout va bien. Cela se fait avec la commande suivante :


mount -t ecryptfs /foo/bar/{.encrypted,encrypted}

Si tout va bien en vous connectant en tant que user, cf. plus haut, vous pourrez lire et écrire des fichiers dans <code. Une fois ce test fait, vous pouvez défaire le montage avec la commande suivante :


umount /foo/bar/encrypted

Montage automatique du dossier crypté au démarrage

Comme évoqué plus haut eCryptFS a avant tout été conçu pour que le dossier crypté soit ouvert lorsqu’un utilisateur ouvre sa session. Le problème est que dans notre cas on souhaite que ce dossier soit ouvert au démarrage de la machine, sans que personne n’intervienne dessus. Et là vous ne pouvez pas passer par /etc/fstab car sinon vous n’arriverez pas à vos fins. Il se peut que le problème ait été résolu sur les derniers noyaux Linux, mais sur une RHEL 6.x par exemple ça ne fonctionne pas.

La solution est donc de passer par une cron. Pour faire les choses bien, on va créer un fichier dans le dossier /etc/cron.d nommé openEcryptFS. C’est toujours plus propre que d’éditer une crontab à la main avec la commande crontab -e. Bref voici le contenu de la cron :


*/1 * * * *   root    /bin/grep -qs /foo/bar/encrypted /proc/mounts || /bin/mount -t ecryptfs /foo/bar/.encrypted /foo/bar/encrypted

Plusieurs choses ici :

– Premièrement, dans une cron, la variable PATH n’est pas définie. C’est pour ça qu’on spécifie les chemins complets de toutes les commandes.
– Le grep suivi du ou || permet de garantir que le montage n’est fait qu’une fois. C’est très important, sinon vous aurez un problème au redémarrage de la machine. Il faut noter toutefois que le chemin indiqué pour /foo/bar/encrypted ne doit pas contenir de lien symbolique. Il doit être défini de la manière où il apparaît dans /proc/mounts.

Limite de eCryptFS

eCryptFS souffre actuellement d’une grosse limitation, à savoir que le dossier crypté ne doit en aucun cas être sur un stockage distant monté en NFS. Sinon vous verrez vos fichiers… disparaître quand vous ferez un ls. Il resteront accessibles si vous les ouvrez en indiquant explicitement les chemins de ceux-ci, mais il faudra les connaître par coeur étant donné que même les dossiers n’apparaîtront pas visible.

A l’heure où j’écris cet article, ce problème fait l’objet de plusieurs rapports de bug, toujours pas corrigés. C’est d’ailleurs gênant pour ceux qui auraient un home directory stocké sur un serveur distant comme ça arrive en entreprise.

Débloque les + belles offres tech en 10 mins

Cet article vous a plu ? Vous aimerez sûrement aussi :

 

JulienJulien
Moi c’est Julien, ingénieur en informatique avec quelques années d’expérience. Je suis tombé dans la marmite étant petit, mon père avait acheté un Apple – avant même ma naissance (oui ça date !). Et maintenant je me passionne essentiellement pour tout ce qui est du monde Java et du système, les OS open source en particulier.

Au quotidien, je suis devops, bref je fais du dév, je discute avec les opérationnels, et je fais du conseil auprès des clients.

Son Twitter - Son LinkedIn

Share Button

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>