J’ai rencontré un problème assez étrange avec mon répertoire personnel chiffré avec fscrypt. Je partage maintenant mon temps entre deux bureaux physiques séparés et pour des raisons pratiques, j’utilise deux ordinateurs différents. En fait, je me sers du second poste pour me connecter à l’autre en ssh et j’utilise tmux pour n’ouvrir qu’une seule connexion. L’ordinateur se met en veille à l’heure du déjeuner et je perds donc ma connexion ssh. Lorsque je me reconnecte, je rattache tmux à la session ouverte le matin, et lorsque j’ouvre une nouvelle fenêtre, certains fichiers ne sont pas accessibles - comme par exemple l’historique de zsh - et j’obtiens le message suivant :
zsh: locking failed for /home/huy/.zsh_history: clé requise non disponible: reading anyway
En fait, le déchiffrement du dossier est réalisé par le module pam de fscrypt à la connexion ; la clé est ajoutée au trousseau de clés de la session qui est créé à ce moment là. Ce trousseau est transmis aux processus créés par la suite puis détruit lorsque le dernier processus qui le référence se termine (voir http://man7.org/linux/man-pages/man7/session-keyring.7.html). Dans mon cas, il s’agit de la connexion ssh qui est interrompue lorsque l’ordinateur se met en veille. Donc lorsque je rattache mon client tmux, il n’a plus accès à ce trousseau puisqu’il n’existe plus, d’où le message ci-dessus. Et contrairement à ce que je pensais, un utilisateur qui n’a pas la clé de chiffrement n’aura donc pas accès aux fichiers qui n’ont pas été déchiffrés, même si le volume a été déverrouillé.
Malheureusement, je n’ai pas trouvé de solution idéale, le plus simple est de fermer la session et d’en ouvrir une autre, sinon il est toujours possible de créer un nouveau trousseau session et d’y lier les clés de l’utilisateur avec les commandes suivantes :
keyctl session
keyctl link @u @s
Le problème est qu’il faut le faire pour toutes les nouvelles fenêtres.
Pour plus d’informations sur le fonctionnement de fscrypt, il faut lire https://docs.google.com/document/d/1GBbuCMe-wLuXosVI87cv8CuRkqwncpnNdXAJDECP-6w/.