Pass - Gestionnaire de mots de passe Unix
(passwordstore.org)- Pass est un outil simple de gestion de mots de passe qui suit la philosophie Unix et stocke chaque mot de passe dans un fichier chiffré avec GPG
- Les mots de passe peuvent être organisés de façon structurée avec une arborescence de dossiers, et l’outil en ligne de commande permet d’ajouter, modifier, générer, consulter et supprimer facilement des entrées
- Grâce à l’intégration avec Git, il est possible de suivre l’historique des modifications et de synchroniser les mots de passe, ce qui le rend utile sur plusieurs ordinateurs et en équipe
- Il offre une grande liberté utilisateur, permettant d’organiser librement la structure des fichiers et le format des données stockées selon ses besoins
- Grâce à son extensibilité et à sa forte compatibilité, de nombreuses extensions ainsi que des clients/GUI pour différentes plateformes sont activement développés et distribués
Présentation de Pass
- La gestion des mots de passe doit rester simple et suivre la philosophie Unix
- Pass conserve chaque mot de passe sous la forme d’un fichier chiffré avec GPG, dont le nom correspond au site web ou à la ressource associée
- Ces fichiers chiffrés peuvent être classés dans l’arborescence de dossiers de votre choix. Les commandes classiques de gestion de fichiers permettent aussi de les copier, déplacer ou supprimer facilement d’un ordinateur à l’autre
- Pass fournit des commandes spécialisées pour l’ajout, la modification, la génération et la consultation de chaque fichier de mot de passe, ceux-ci étant stockés par défaut sous
~/.password-store - Il est implémenté uniquement sous forme de simple script shell
- Il utilise Git pour la copie du mot de passe dans le presse-papiers et pour l’enregistrement de l’historique des modifications
- L’édition peut aussi se faire avec les commandes shell de base, avec prise en charge de l’autocomplétion dans Zsh, Fish, Bash et d’autres shells
- De nombreuses extensions ainsi que des clients/GUI pour d’autres plateformes sont développés activement par une communauté dynamique
Utilisation du password store
- Possibilité de consulter la liste complète des mots de passe enregistrés
- Prise en charge de la consultation d’un mot de passe spécifique et de sa copie dans le presse-papiers (avec effacement automatique)
- Saisie du mot de passe et authentification facilitées via
gpg-agent - Ajout de nouveaux mots de passe, enregistrement multiligne dans un fichier existant (option
-m), et modification directe du fichier via l’éditeur de texte par défaut - Fonction de génération de mots de passe aléatoires via
/dev/urandom(avec inclusion/exclusion des symboles selon les options, et copie directe dans le presse-papiers) - Lors de la suppression d’un mot de passe, le fichier chiffré est aussi supprimé du système de fichiers
- Après initialisation comme dépôt Git, chaque modification de mot de passe génère un commit, avec synchronisation possible via
pass git push/pull - Voir la man page pour les fonctions supplémentaires et l’utilisation détaillée
Méthode de configuration de base
- Lors de l’initialisation du password store, il suffit de saisir une clé GPG pour démarrer facilement (la spécification de plusieurs clés GPG convient à un environnement d’équipe)
- Il est possible d’attribuer une clé GPG distincte à des dossiers spécifiques (option
-p) - L’initialisation en dépôt Git est également possible (avec définition facultative d’un remote)
- Toutes les opérations d’ajout, de suppression et de modification de mots de passe sont gérées sous forme de commits Git
- La man page présente des exemples d’initialisation plus avancés
Installation
- Debian/Ubuntu: apt-get install pass
- Fedora/RHEL: yum install pass
- Prise en charge de nombreuses plateformes, dont openSUSE/Gentoo/Arch/Macintosh/FreeBSD
- Téléchargement possible en tarball ou par clone direct du dépôt Git (toutes les releases sont fournies avec des tags signés)
Organisation des données et flexibilité
- Pass permet d’organiser librement les données selon les préférences de l’utilisateur (aucun schéma ni format imposé)
- Enregistrement multiligne, distinction des données via les noms de fichiers, structure en dossiers : plusieurs approches sont possibles
- Exemple : pour Amazon/bookreader, la première ligne peut contenir le mot de passe, suivie de l’URL, du nom d’utilisateur, des questions secrètes et d’autres informations
- Si nécessaire, chaque information peut aussi être gérée dans un fichier séparé (par exemple : password, secretquestion1, etc.)
- L’option de copie vers le presse-papiers ne copie que la première ligne, ce qui permet de concilier efficacement usage quotidien et stockage d’informations complémentaires
Extensions
- Les extensions sont prises en charge pour répondre à divers besoins utilisateurs
- Elles peuvent être installées dans le dossier système ou utilisateur, et leur activation est définie via des variables d’environnement
- La communauté développe et propose activement une grande variété d’extensions
Clients compatibles
- Des clients/GUI pour plusieurs plateformes sont développés et distribués par la communauté
- Les utilisateurs peuvent choisir le client adapté à leur système d’exploitation ou à leur environnement d’usage
Migration depuis d’autres gestionnaires de mots de passe
- Divers scripts de conversion et méthodes sont proposés pour migrer des données depuis d’autres gestionnaires de mots de passe
- L’utilisateur peut choisir l’organisation des données optimale selon ses besoins
Auteur et licence
- Développé par Jason A. Donenfeld (zx2c4.com)
- Utilisation et modification libres sous licence GPLv2+
2 commentaires
En réalité, il existe beaucoup d’outils qui se contentent de stocker, mais l’essentiel, ce sont les intégrations comme le remplissage automatique.
Commentaires Hacker News
Il y a ici beaucoup d’avis positifs sur
pass, mais aussi quelques inconvénients majeurs assez évidentsComme il s’agit de données non structurées, c’est en général peu pratique à manipuler
Par exemple, quand on veut utiliser un nom d’utilisateur et un mot de passe dans un script, il faut à chaque fois écrire soi-même le code de parsing, ce qui est pénible
Quand on crée un nouveau mot de passe avec
pass generate, cela écrase toutes les valeurs existantesAutrement dit, si un mot de passe et la réponse à une question secrète sont stockés ensemble, régénérer seulement le mot de passe fait disparaître la réponse
Il est très difficile de consulter l’historique
Comme tout est chiffré,
git diffne donne rien d’utile, et restaurer l’historique ou corriger des erreurs avec les outils en ligne de commande est peu pratiqueLe nom est trop générique, donc difficile à rechercher
Ces derniers temps, je développe un outil similaire appelé passworth (avec réflexion aussi sur l’usage de conteneurs/sandboxes) https://github.com/andrewbaxter/passworth
Sur la difficulté à consulter l’historique,
passprend en réalité en charge une configuration.gitattributespermettant à git de convertir les fichiers gpg en texte pour afficher les diff*.gpg diff=gpgdans~/.password-store/.gitattributes.git/configune section[diff "gpg"]avectextconv = gpg2 -d ...Voici d’autres problèmes rencontrés en utilisant
passpassvers un autre ordinateur, on ne sait pas clairement quoi copier)passest une interface extrêmement légère posée sur gpg, donc il hérite de tous les défauts de gpg (notamment les problèmes liés àgpg-agent)agehttps://github.com/FiloSottile/agepasset d’Android n’était pas terrible, le paquet officiel n’est plus maintenu, le fork n’est pas sur F-Droid, et l’UI est peu pratiquepass, mais il n’existe pas vraiment de meilleure solution généralisteage, mais sans support Androidgopassa l’air meilleur (fonctionne sur tous les Unix, compatible avecpass, propose un pluginage, https://www.gopass.pw), mais là encore il n’y a pas de packaging AndroidLe problème de structuration des données est résolu avec l’arborescence de dossiers
username,password,emailnotes(notes non structurées), ou dans certains cas particuliers un fichierjson(pour lecture par machine)Pour ma part, je trouve au contraire que l’absence de structure est un grand avantage
Username: xxx, un plugin de navigateur comme browserpass le reconnaît et remplit automatiquement les champsRetour sur les questions de structuration des données et d’historique, fonctionnalité par fonctionnalité
pass generateécrase tout, on peut gérer les éléments dans des fichiers séparés commesite/pass,site/secret-questiongit diffest difficile, mais ce qui compte vraiment est la dernière date de modification (visible avecgit log) et, au besoin, on peut restaurer avecgit checkout -d$ passfait remonter les paquets liés, donc le problème de recherche n’est pas si graveUn gestionnaire de mots de passe du navigateur avec passkeys est bien plus pratique, mais un coffre
passreste utile pour stocker des codes de récupération et des clés d’APICe qui m’a toujours semblé le plus ambigu avec
pass, c’est le modèle de menaceSi le cache de l’agent GPG est actif, n’importe quel script (
npm postinstall, etc.) peut parcourir tous les identifiants viapass lsÀ ce stade, cela revient presque à tout stocker dans un simple fichier
~/passwords.txtMais si on désactive le cache, il faut souffrir à saisir à chaque fois une longue passphrase GPG
J’ai aussi essayé d’utiliser une YubiKey pour déverrouiller à la demande, mais l’intégration est médiocre et c’est très pénible quand il faut souvent saisir des mots de passe
C’est pour cela que je suis passé à Bitwarden
Dans mon cas, je laisse simplement la YubiKey branchée en permanence
Tous les gestionnaires de mots de passe ont fondamentalement le même problème : quand le coffre est déverrouillé, le mot de passe maître peut rester en RAM ou dans le cache, exposant potentiellement tous les mots de passe
Si vous avez un port USB libre, une Nano key peut aussi simplement rester branchée
Moi, je stocke les mots de passe dans une base sqlite sur une partition chiffrée
gpg-agentSur une YubiKey, on peut configurer l’usage du PIN ou du toucher pour exiger une validation à l’utilisation de la clé GPG
pass, c’est sa mauvaise compatibilité avec la YubiKey sur iOSJ’aime vraiment beaucoup cet outil et je l’utilise tous les jours
Pour les gens qui aiment la CLI,
passest intéressant, mais pour un utilisateur lambda, une combinaison KeepassXC sur desktop, KeepassDX sur Android et accès distant via Wireguard semble plus adaptéeUne fonctionnalité utile de keepass dont on parle peu est la possibilité d’ouvrir plusieurs vaults en même temps et d’y faire des recherches
Je pense que la notion d’« utilisateur lambda » est relative
N’oubliez pas non plus
keepassxc.clipassest très répandu, mais ne correspond pas bien à un workflow de type « copier un seul fichier », donc je suis revenu à KeepassXCUn de mes cas d’usage n’est pas bien couvert par keepass : créer des mots de passe sur deux ordinateurs séparés puis les fusionner plus tard
J’aimerais essayer KeepassXC moi aussi, mais le partage d’identifiants avec mon conjoint n’y est pas simple
passest une solution amusante pour un usage individuel, mais il faut être prudent quand on partage avec plusieurs personnesSi on l’utilise pour gérer les mots de passe d’une entreprise, il n’y a aucun moyen de savoir qui a consulté quel secret et quand, donc il faut changer tous les mots de passe à chaque mouvement de personnel
Si quelqu’un a besoin d’un nouvel accès, il n’existe pas de méthode standard pour rechiffrer sélectivement certains fichiers : il faut l’implémenter soi-même
On utilise bien git pour stocker le tout, mais comme les messages de commit sont générés automatiquement, le gain réel n’est guère supérieur à Dropbox
Si on pousse par erreur un mauvais contenu et qu’on veut revenir en arrière, il faut réécrire l’historique git, ce qui peut casser les dépôts des autres utilisateurs
La simplicité et le côté manuel sont des avantages, mais c’est aussi un piège
C’est un peu comme l’idée élégante de
hash(site_name+main_password): séduisante en théorie, mais pleine de problèmes en pratiqueEn environnement professionnel aussi, il faut des fonctions comme le chiffrement end-to-end ou la vérification des empreintes entre utilisateurs ; Bitwarden semble être ce qui s’en rapproche le plus, mais je serais preneur de meilleures références s’il y en a
Dans
passaussi, on peut affiner les accès par groupe ou par personne en appliquant différentes clés (ou plusieurs clés) selon les répertoiresadminsavec une clé admin, le dossiertechsaccessible à la fois aux clés admin et techDans mon entreprise, on utilise 1Password
op runvia des fichiers.env, et l’intégration CIJe n’ai fait qu’évaluer l’outil sans expérience réelle en production, mais passbolt m’avait semblé être une bonne option pour le partage de mots de passe en équipe https://www.passbolt.com
Dans notre entreprise, nous utilisons bien un outil assez obscur appelé
pahttps://git.j3s.sh/paageet permet de chiffrer avec plusieurs clésIl semble aussi possible de construire une bonne solution sur la base de FOKS https://foks.pub
Je suis récemment passé de
passà Bitwarden et VaultwardenDans un environnement où les applis GUI sont installées via flatpak, l’intégration entre l’extension Firefox et
passne fonctionnait pas, ce qui était pénibleEn contournement, j’utilisais
pass -c <path>depuis la fenêtre d’exécution pour copier le mot de passe puis le coller dans le navigateur, mais ce n’était pas une expérience idéaleLe fait que l’application Android officielle ait été archivée a aussi joué, et même s’il existe un fork, je ne sais pas combien de temps il sera maintenu https://github.com/android-password-store/Android-Password-Store/discussions/3260
Aujourd’hui, j’auto-héberge Vaultwarden et je l’utilise avec plusieurs clients Bitwarden
Retour d’expérience sur un passage de
passà KeePassXCpassIl existe aussi un outil appelé
passmenuJe ne savais pas que l’application Android de
passavait été abandonnéepass -cdepuis un prompt plutôt que via un pluginJe suis curieux de l’expérience d’usage hors ligne avec Vaultwarden
Il existe aussi l’extension
pass-otphttps://github.com/tadfisher/pass-otpUne application Android pour
passest également assez bonne https://play.google.com/store/apps/details?id=dev.msfjarvis.apsCela fonctionne aussi dans termux
L’application Android Password Store a été archivée l’an dernier, puis forkée par agrahn avec de nombreuses améliorations
Mon alternative personnelle consiste à mettre un petit script dans
~/binet à utiliserpassavecoathtoolpour générer les OTPpass, puis je génère le code TOTP avecoathtoolCertaines anciennes applications Android pour
passne peuvent même plus être installées sur mon appareilSi vous utilisez
ageau lieu de GPG, l’outil passage peut être utile https://github.com/FiloSottile/passagepassqui utilisentageCes jours-ci, j’utilise depuis presque dix ans une approche différente
Toutes les métadonnées des mots de passe sont stockées dans du JSON en clair, chaque entrée enregistrant l’utilisateur, la version et les règles de mot de passe (longueur, types de caractères, etc.)
Les vrais mots de passe ne sont pas stockés : ils sont générés de manière « déterministe » à partir d’une passphrase et d’un hash des métadonnées
Il suffit de changer le numéro de version pour obtenir un mot de passe totalement nouveau, et l’historique est facile à suivre en ne modifiant que la « version »
L’inconvénient est qu’il est presque impossible de partager cela (il faudrait que l’autre personne connaisse la passphrase que j’utilise)
En cas de besoin de partage, j’ai envisagé un mode où le générateur produirait un texte chiffré à stocker séparément dans les métadonnées, mais en pratique je n’en ai jamais vraiment eu besoin
Cette approche par générateur de mots de passe est intéressante parce qu’elle réduit le risque de perdre son vault
J’ai découvert récemment cette méthode via le générateur de mots de passe SECUSO https://secuso.aifb.kit.edu/english/105.php
Partager la passphrase augmente fortement la surface d’exposition : en cas de fuite, plusieurs identifiants peuvent être compromis d’un coup
J’utilise
passdepuis plus de 8 ans et j’y stocke 1300 mots de passeJe le synchronise entre mes appareils avec git, et j’en suis vraiment très satisfait
« Comment peut-on avoir 1300 mots de passe ? »