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=<strong><votre_mot_de_passe></strong>
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 fichierroot/.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 :
- #AstuceDeCode 11 : mettre des flags de compilation globaux et autres variables globales dans CMake
- Trucs et astuces Linux
- Introduction à la création de paquets avec RPM
Julien
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.