Gérer vos mots de passe avec pass

Posté par Fabrice le lundi 22 avril 2019 Mis-à-jour le samedi 24 février 2024 Traduction : en

Comme nous vivons dans un monde dangereux où les failles de sécurité sont découvertes tous les jours et où les fuites de données sont devenues monnaies courantes, il est recommandé d’utiliser un mot de passe différent pour chacune de nos identités numériques. Cependant, cela devient vite une horreur à maintenir manuellement, j’avais essayé d’utiliser un bloc note en 2003 que j’ai perdu au bout d’un mois (et les mots de passe avec).

Heureusement, les gestionnaires de mots de passes ont fleuri depuis, et plusieurs proposent des fonctionnalités de base similaires : mufti plateforme (en particulier sur les téléphones intelligents), génération de mots de passe « sécurisés », intégration navigateur…

Je ne vais pas pour faire une comparaison détaillée, mais si vous souhaitez jeter un coup d’œil, Wikipédia propose une table de comparaison détaillée par ici (en).

Dans cette recherche, grâce à moviuro, mon choix s’est porté sur pass avec pass-otp (et passmenu). Je n’ai pas non plus la prétention de faire un guide détaillé sur pass, comme ceux-ci sont déjà faciles à trouver sur internet, par exemple par ici (en).

En résumé, pass est un script bash qui fait appel à des outils de base comme git, gpg, et est écrit par zx2c4.

Voici quelques commandes que j’utilise souvent :

pass generate -i <pass-name>

Pour regénérer un mot de passe, l’option -i ici est importante puisqu’elle permet de ne réécrire que la première ligne du fichier (en général le mot de passe). Cela évite donc de devoir utiliser du git sale pour retirer l’erreur de l’arbre des commits vu que pass <cmd> fait automatiquement un commit atomique à la fin de la commande. Je l’oublie parfois, c’est pourquoi je laisse ça ici en guise de rappel.

Sur certains services, il arrive que l’on ait besoin de spécifier un ensemble de caractères admissibles pour les mots de passe. Cela peut être fait via la variable d’environnement PASSWORD_STORE_CHARACTER_SET. Le contenu de cette variable est transmis à la commande tr. Ainsi, pour créer un code PIN, on peut spécifier la valeur suivante : PASSWORD_STORE_CHARACTER_SET='[:digit:]' et indiquer la longueur désirée du mot de passe en dernier argument de la commande.

Par exemple, pour générer un code PIN de 6 chiffres :

PASSWORD_STORE_CHARACTER_SET='[:digit:]' pass generate <pass-name> 6

Je n’ai en revanche pas trouvé comment forcer la présence de caractères spéciaux… je lance donc la commande plusieurs fois dans ces cas avec l’option -i pour écrire en place après la première tentative. Ce n’est pas la meilleure solution, qui en plus pollue l’historique git mais bon… ça fonctionne.

Par exemple, pour générer un mot de passe sur un service fictif qui supporterait les caractères spéciaux suivants: -_@$<> pour des mots de passe d’au plus 20 caractères, on peut utiliser la commande suivante :

PASSWORD_STORE_CHARACTER_SET='[:alnum:]-_@$<>' pass generate <pass-name> 20

Si on souhaite faire de la rotation de clefs ou simplement mettre à jour ses identités, il est possible de relancer la commande pass init, où on peut y spécifier l’identifiant de la nouvelle clef… ou plusieurs identifiants. Cela peut être utile pour avoir plusieurs clefs sur des périphériques différents pour mieux contrôler les risques de fuite de clef. On peut également avoir des sous dossiers de son dossier $HOME/.password-store/ chiffrés sous des clefs spécifiques (cela se contrôle avec l’option -p/--path= de pass init). Une application possible étant de séparer les clefs personnelles des clefs professionnelles (qui peuvent alors être chiffré sous une clef partagée entre les personnes ayant accès au jeu de mots-de-passe). On pourrait imaginer coupler ça avec les sous-modules git, mais je ne m’y suis pas aventuré…

Pour finir :

pass git <ce que vous voulez>

Pour faire ce que vous voulez avec gite, spécialement du git sale 😉

Finalement, j’utilise password-store sur mon téléphone.

tags: pass, git, cli