8 points par GN⁺ 2025-09-15 | 2 commentaires | Partager sur WhatsApp
  • 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

 
ndrgrd 2025-09-15

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.

 
GN⁺ 2025-09-15
Commentaires Hacker News
  • Il y a ici beaucoup d’avis positifs sur pass, mais aussi quelques inconvénients majeurs assez évidents

    • Comme 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 existantes

    • Autrement 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 diff ne donne rien d’utile, et restaurer l’historique ou corriger des erreurs avec les outils en ligne de commande est peu pratique

    • Le 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, pass prend en réalité en charge une configuration .gitattributes permettant à git de convertir les fichiers gpg en texte pour afficher les diff

      • Par exemple, ajouter *.gpg diff=gpg dans ~/.password-store/.gitattributes
      • Puis définir dans .git/config une section [diff "gpg"] avec textconv = gpg2 -d ...
      • Dans ce cas, on peut faire un diff simple même sur le contenu chiffré
    • Voici d’autres problèmes rencontrés en utilisant pass

      • Des procédures importantes ne sont pas documentées (par ex. quand on déplace le dépôt pass vers un autre ordinateur, on ne sait pas clairement quoi copier)
      • Dans un environnement non packagé, par exemple pour l’installer sur un NAS headless, c’est très difficile à cause de problèmes comme la cross-compilation de gpg
      • pass est 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)
      • Plusieurs organisations essaient aujourd’hui de migrer de GnuPG vers des outils de chiffrement plus simples comme age https://github.com/FiloSottile/age
      • L’association de pass et 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 pratique
      • Globalement je continue à utiliser pass, mais il n’existe pas vraiment de meilleure solution généraliste
      • Il y a bien FiloSottile/passage pour remplacer gpg par age, mais sans support Android
      • gopass a l’air meilleur (fonctionne sur tous les Unix, compatible avec pass, propose un plugin age, https://www.gopass.pw), mais là encore il n’y a pas de packaging Android
    • Le problème de structuration des données est résolu avec l’arborescence de dossiers

      • Pour chaque site, je gère séparément des fichiers username, password, email
      • J’ajoute parfois un fichier notes (notes non structurées), ou dans certains cas particuliers un fichier json (pour lecture par machine)
      • Il est dommage que les métadonnées ne soient pas chiffrées, mais dans l’ensemble c’est une solution satisfaisante
    • Pour ma part, je trouve au contraire que l’absence de structure est un grand avantage

      • En pratique, si on écrit dans un format du type Username: xxx, un plugin de navigateur comme browserpass le reconnaît et remplit automatiquement les champs
    • Retour sur les questions de structuration des données et d’historique, fonctionnalité par fonctionnalité

      • Le fait que chacun puisse utiliser ses propres conventions est vu comme un avantage
      • Même si pass generate écrase tout, on peut gérer les éléments dans des fichiers séparés comme site/pass, site/secret-question
      • L’approche basée sur l’arbre de répertoires est plutôt bonne en soi
      • Suivre les mots de passe générés via git diff est difficile, mais ce qui compte vraiment est la dernière date de modification (visible avec git log) et, au besoin, on peut restaurer avec git checkout -d
      • Dans le terminal, taper $ pass fait remonter les paquets liés, donc le problème de recherche n’est pas si grave
  • Un gestionnaire de mots de passe du navigateur avec passkeys est bien plus pratique, mais un coffre pass reste utile pour stocker des codes de récupération et des clés d’API

    • Ce qui m’a toujours semblé le plus ambigu avec pass, c’est le modèle de menace

    • Si le cache de l’agent GPG est actif, n’importe quel script (npm postinstall, etc.) peut parcourir tous les identifiants via pass ls

    • À ce stade, cela revient presque à tout stocker dans un simple fichier ~/passwords.txt

    • Mais 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

      • De toute façon, une interaction physique reste nécessaire, donc si mon environnement est sûr, c’est en pratique une deuxième forme d’authentification
      • Contrairement à FIDO2, avec OpenPGP on ne saisit le PIN qu’une seule fois, puis la clé reste déverrouillée tant qu’elle est branchée
      • En revanche, il faut toucher la clé à chaque déchiffrement de mot de passe, ce qui est pour moi à la fois parfait et pratique
      • Sur mobile aussi, la combinaison openkeychain + password store fonctionne bien
      • Même si plus personne ne maintient tout cela, je considère que le chiffrement matériel de la YubiKey suffit largement
    • 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

      • Pour être en sécurité, il faut le verrouiller quand on ne l’utilise pas
      • Dans un cas comme Bitwarden, intégré au navigateur, la surface d’attaque est aussi plus large (serveur distant, extension, etc.)
      • Récemment, des vulnérabilités ont été trouvées dans presque tous les gestionnaires de mots de passe basés sur le navigateur, permettant à un attaquant distant d’envoyer des mots de passe vers le navigateur de la victime
      • J’utilise Bitwarden, mais je traite toujours les identifiants vraiment critiques à part
    • Si vous avez un port USB libre, une Nano key peut aussi simplement rester branchée

      • Même si un malware récupère le PIN de la YubiKey, pour voler tous les mots de passe il faudrait encore me convaincre d’appuyer mille fois sur l’appareil
    • Moi, je stocke les mots de passe dans une base sqlite sur une partition chiffrée

      • Le script referme la partition immédiatement après lecture du mot de passe
      • Sinon, on peut aussi stocker chaque mot de passe dans un fichier chiffré individuellement
      • En cas de besoin, je déchiffre le fichier de mot de passe puis je vide le gpg-agent
    • Sur une YubiKey, on peut configurer l’usage du PIN ou du toucher pour exiger une validation à l’utilisation de la clé GPG

      • Le plus gros problème de pass, c’est sa mauvaise compatibilité avec la YubiKey sur iOS
  • J’aime vraiment beaucoup cet outil et je l’utilise tous les jours

    • La combinaison clé OpenPGP + YubiKey est particulièrement impressionnante
    • Comme chaque mot de passe doit être déverrouillé individuellement, même si un attaquant compromet complètement mon ordinateur, seules les entrées que j’ai physiquement validées sont exposées
    • Contrairement à keepass ou Bitwarden, où un seul déverrouillage ouvre tout, le risque d’exposition de l’ensemble de la base est plus faible
  • Pour les gens qui aiment la CLI, pass est intéressant, mais pour un utilisateur lambda, une combinaison KeepassXC sur desktop, KeepassDX sur Android et accès distant via Wireguard semble plus adaptée

    • Une 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

      • La plupart des gestionnaires de mots de passe sont conçus autour d’un vault unique, avec l’hypothèse implicite que tous les mots de passe exigent le même niveau de sécurité
      • Dans mon cas, environ 70 % concernent des sites sans importance, et c’est agaçant de devoir saisir un long mot de passe maître à chaque connexion
      • Avec keepass, je peux mettre ces 70 % de données peu sensibles dans un vault séparé avec un mot de passe plus court, ce qui demande moins d’effort
    • Je pense que la notion d’« utilisateur lambda » est relative

      • Moi, j’utilise simplement 1Password et je fais confiance au résultat
    • N’oubliez pas non plus keepassxc.cli

      • C’est vraiment utile pour injecter ou extraire des secrets de manière programmatique
      • J’ai autrefois essayé d’utiliser GNU pass pour créer des bundles de secrets chiffrés, mais j’ai fini par abandonner à cause de la complexité de gestion de gnupg et du stockage de valeurs dans le répertoire personnel
      • pass est très répandu, mais ne correspond pas bien à un workflow de type « copier un seul fichier », donc je suis revenu à KeepassXC
    • Un 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

      • Même avec un vault dédié, partager les informations existantes finit par demander du copier-coller manuel
      • Du coup, je me suis installé sur Vaultwarden, et c’est plus stable que je ne le pensais
  • pass est une solution amusante pour un usage individuel, mais il faut être prudent quand on partage avec plusieurs personnes

    • Si 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 pratique

    • En 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 pass aussi, on peut affiner les accès par groupe ou par personne en appliquant différentes clés (ou plusieurs clés) selon les répertoires

      • Par exemple : le dossier admins avec une clé admin, le dossier techs accessible à la fois aux clés admin et tech
      • On peut aussi attribuer une clé personnelle à chaque employé pour gérer précisément qui a accès à quel site
      • On peut contrôler le périmètre d’accès par employé avec des sous-modules git
      • Et grâce à l’historique git, on peut suivre quand et à qui un mot de passe a été communiqué
    • Dans mon entreprise, on utilise 1Password

      • Il offre diverses fonctions comme des vaults partagés par groupe, des comptes de service, la commande op run via des fichiers .env, et l’intégration CI
    • Je 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

      • Il repose sur un modèle à clé publique : les mots de passe en clair ne sont visibles qu’en local chez chaque utilisateur, et les mots de passe partagés sont rechiffrés avec la clé publique de chaque utilisateur
    • Dans notre entreprise, nous utilisons bien un outil assez obscur appelé pa https://git.j3s.sh/pa

      • Il est basé sur age et permet de chiffrer avec plusieurs clés
    • Il 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 Vaultwarden

    • Dans un environnement où les applis GUI sont installées via flatpak, l’intégration entre l’extension Firefox et pass ne fonctionnait pas, ce qui était pénible

    • En 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éale

    • Le 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 à KeePassXC

      • De la même manière, j’avais stocké plusieurs centaines de secrets dans pass
      • J’ai changé parce que la synchronisation entre plusieurs appareils est simple, et qu’il devenait difficile de ne garder que les mots de passe les plus importants sur téléphone ou portable
      • KeePassXC se synchronise facilement sous forme d’un fichier unique, et il existe même deux bonnes applis Android
      • Le transfert manuel des données m’a pris environ trois heures, mais j’en ai profité pour faire du tri
      • La gestion des mots de passe est une sorte d’application d’archives qu’on consulte rarement, donc déplacer un seul fichier sur le réseau suffit largement à synchroniser trois machines
    • Il existe aussi un outil appelé passmenu

      • On l’appelle via un raccourci clavier, puis on choisit le mot de passe voulu dans un menu avec autocomplétion avant de le copier dans le presse-papiers
      • C’est pratique parce qu’il n’y a pas besoin de saisir la commande et le chemin dans un prompt
    • Je ne savais pas que l’application Android de pass avait été abandonnée

      • En regardant le fork, j’ai été rassuré de voir qu’il y avait encore une activité soutenue
      • Je me demande pourquoi le projet officiel et le fork n’ont pas été transmis ensemble (peut-être à cause de questions de sécurité)
      • Personnellement, je préfère copier directement avec pass -c depuis un prompt plutôt que via un plugin
      • Les plugins posent une question de confiance : soit ils déverrouillent la clé gpg au lancement du navigateur, soit leur auteur pourrait volontairement exfiltrer mes mots de passe
    • Je suis curieux de l’expérience d’usage hors ligne avec Vaultwarden

      • J’ai parfois absolument besoin de consulter ou de mettre à jour des identifiants dans des environnements au réseau instable
      • Je n’ai pas encore testé moi-même jusqu’où Vaultwarden couvre ce besoin
  • Il existe aussi l’extension pass-otp https://github.com/tadfisher/pass-otp

    • Une application Android pour pass est également assez bonne https://play.google.com/store/apps/details?id=dev.msfjarvis.aps

    • Cela 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 ~/bin et à utiliser pass avec oathtool pour générer les OTP

      • Je récupère la clé avec pass, puis je génère le code TOTP avec oathtool
    • Certaines anciennes applications Android pour pass ne peuvent même plus être installées sur mon appareil

      • L’intégration GPG étant pénible, cela ne fonctionnait de toute façon pas très bien
  • Si vous utilisez age au lieu de GPG, l’outil passage peut être utile https://github.com/FiloSottile/passage

    • Il existe plusieurs gestionnaires de type pass qui utilisent age
  • Ces 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

      • Tant qu’on dispose d’une fonction de hash standard, on peut générer ses mots de passe dans n’importe quel environnement
      • Le problème est que les métadonnées (liste des sites, règles, etc.) deviennent visibles, ce qui laisse subsister des préoccupations de sécurité
      • Au fond, cela ne me semble pas fondamentalement très différent d’une approche par 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

      • J’utilise désormais la génération déterministe de mots de passe
      • La collection d’applications open source de SECUSO est également intéressante
    • Partager la passphrase augmente fortement la surface d’exposition : en cas de fuite, plusieurs identifiants peuvent être compromis d’un coup

  • J’utilise pass depuis plus de 8 ans et j’y stocke 1300 mots de passe

    • Je le synchronise entre mes appareils avec git, et j’en suis vraiment très satisfait

    • « Comment peut-on avoir 1300 mots de passe ? »

      • Je n’ai jamais vraiment compté, et à vrai dire je ne me rends même pas compte moi-même du nombre réel