ToutSurTout.biz
Pass: The Standard Unix Password Manager


http://www.passwordstore.org/

Jusque-là, je stockais mes mots de passe complexes (20 chars générés aléatoirement avec pwgen et/ou le classique echo '< /dev/random tr -dc _A-Z-a-z-0-9 | head -c20') destinés aux sites web sur lesquels j'ai un compte dans des fichiers texte, un par site web, le tout planqué dans un dossier dans un conteneur luks. Mes passphrases (luks, système, ssh, systèmes distants, gpg) étaient seulement dans ma tête. Ça fait un petit moment que je m'interroge sur une meilleure solution (gestionnaire de mots de passe ? lequel ? un simple fichier texte chiffré + signé ?).

Qu'est-ce que pass apporte de plus ?
   * pass copie directement le mot de passe dans le presse-papier. On évite donc l'eavesdropping, c'est-à-dire, les regards indiscrets par-dessus notre épaule pendant un copier/coller manuel ;

   * En cas d'accès malveillant (luks protège contre le vol de l'ordinateur éteint mais pas contre une faille de sécu, un malware ou, plus simplement, une session non verrouillée), l'attaquant peut récupérer la liste des sites web sur lesquels j'ai un compte mais plus le login/mdp ;

   * Ça simplifie toute la chaîne, de la génération d'un mot de passe fiable à son accès en passant par son stockage. Tout est intégré dans un même outil ;

   * pass permet un partage sécurisé simplifié : il est possible de chiffrer toute l'arborescence ou seulement une partie avec plusieurs clés publiques dans l'optique de partager un ou plusieurs mots de passe. Super pratique au sein d'une équipe d'adminsys ;

On garde les autres avantages/inconvénients : git pour le versionning/synchro sur plusieurs machines, bête arborescence dossiers/fichiers et le fait que la liste des mots de passe est en claire (relire le point numéro 2 ci-dessus).

Quels sont les inconvénients de pass ?
   * On n'est pas protégé à 100% des regards indiscrets. Il n'est pas possible d'afficher tout sauf le mot de passe. Or, il y a des sites web relous (banques, administration,...) qui vous font saisir soit le login, soit le mdp sur un clavier virtuel. Dans le cas où le site web demande la saisie du mdp à la souris, on est foutu car on est obligé de l'afficher pour le recopier à la mano. Dans le cas d'un login, c'est dommage d'afficher aussi le mdp avec « pass show »... On peut écrire une fonction bash à mettre dans .bashrc pour masquer le mot de passe sauf si l'on passe une option « -f » à « pass show » :
   

Code :

function pass { passbin=/usr/bin/pass if [ "$1" = "show" ]; then if [ "$2" = "-c" ]; then $passbin $@ elif [ "$2" = "-f" ]; then $passbin show $3 else $passbin show $2 | tail -n +2 fi else $passbin $@ fi}

Utiliser le même nom permet de conserver l'autocompletion.

   * pass repose sur gnupg et donc sur une clé/configuration solide (pas d'algos moisis ou en dernier recours).


Pourquoi pas keepassX (= la version 1 mais multi-plateforme) ou keepass2 ?
   * + Keepass résout totalement le problème des regards indiscrets puisque le mot de passe est remplacé par des étoiles... Sauf à la demande de l'utilisateur ;

   * + La liste des sites web ne fuite pas avec un simple ls ;

   * + Keepass est multiplateformes. Je m'en fiche, ce n'est pas une propriété que je recherche ;

   * - pass repose sur OpenPGP qui est normalisé à l'IETF (voir https://tools.ietf.org/rfc/rfc4880.txt) alors que Keepass repose sur son propre format non normalisé ;

   * - KeepassX et Keepass2 sont écris en Microsoft .NET... NON, juste NON. Sans virer à la parano anti-MS, on peut argumenter qu'un soft en .NET sera toujours plus complexe que n'importe quel éditeur de texte (nano, vim, emacs). D'où un audit plus difficile et des failles potentielles en plus. Et puis même, j'suis pas là pour utiliser du .NET.

       Néanmoins, il existe plusieurs outils libres qui permettent de lire/écrire des bases de mots de passe au format Keepass sans recourir à Mono (implé .NET libre). Le seul qui est packagé dans Debian stable (sauf la lib perl Clipboard qu'il faut récup' en plus dans CPAN), c'est kpcli (http://kpcli.sourceforge.net/). C'est donc celui-ci que j'ai testé.
           * Il manque la fermeture auto du trousseau, ce que permet Keepass. pass permet ça grâce à l'agent gnupg. Il manque également le nettoyage auto du presse-papier : il faut venir saisir une commande (« xx »). C'est un coup à oublier. Ces points sont bloquants selon moi ;

           * Il faut patcher la lib Clipboard (voir https://github.com/lfont/dotfiles/blob/ … clip.patch).


En résumé, j'ai choisi pass avec quelques ajustements dans mon .bashrc :
   * Réduire le temps entre la mise dans le presse-papier d'un mot de passe et le nettoyage du presse-papier à 10 secondes au lieu de 45 : export PASSWORD_STORE_CLIP_TIME=10 ;

   * Changer l'emplacement du trousseau : export PASSWORD_STORE_DIR=/chemin/vers/le/trousseau/ . N'oubliez pas le « / » final sinon l'autocomplétion de l'arborescence ne fonctionnera pas.


Tout un écosystème a été développé autour de pass dont le plus intéressant me semble être l'extension Firefox « passff » (https://github.com/jvenant/passff) qui permet la complétion automatique des formulaires dans les pages web. Bien que cette extension soit pratique et bien fichue, je suis plutôt sceptique à l'idée de l'utiliser :
   * À la fin du README, il est écrit, en gros : « This is a beta. For testing purposes only. » ;

   * Du JavaScript qui manipule mes mots de passe pour éxecuter pass dans un sous-processus puis remplir les éléments DOM correspondant au formulaire de login ? Ok, c'est dans un cadre restreint prévu par Firefox mais quand même... Aucun risque de fuite avec un appel JS depuis un site web ? Vraiment ?

   * ATTENTION : ne pas utiliser les fonctions « Copy login » et « Copy password » : le presse-papier n'est JAMAIS nettoyé ! (voir la fin de la fonction « onCopyToClipboard », https://github.com/jvenant/passff/blob/ … nu.js#l246). Il faut utiliser seulement les fonctions « Fill [...] » qui n'utilisent pas le presse-papier. Si passff ne remplit pas un des champs, c'est que celui-ci a un nom stupide. Trouvez-le dans le source HTML et ajoutez-le dans « [...] input names » dans « Autofilling » dans les préférences de passff pour qu'il soit reconnu ;

   * https://stackoverflow.com/questions/333 … -xul-file. Je contribue sur une extension qui manipule des putain de mots de passe mais « I have no idea what I'm doing smile »...


Merci à benvii pour la découverte de pass, à blusky pour le débat animé sur les avantages et inconvénients de chaque solution et la découverte de kpcli et à johndescs pour son côté bash-nazi.