Plusieurs solutions existent pour la gestion des mots de passe, chacune présentant ses avantages et inconvénients.

Je présente ici pass, un script bash permettant de gérer des mots de passe chiffrés avec GPG dans un dépôt git. Je l'ai choisi pour plusieurs raisons :

  • Très simple d'utilisation.
  • Très léger (et sans interface graphique, même s'il en existe).
  • L'utilisation de GPG permet de s'assurer de toujours pouvoir lire les mots de passe, même si pass ne fonctionne pas sur une machine (absence de pass, bug, abandon, etc.).
  • L'utilisation de git permet un versionning et un partage simples, sans devoir mettre en place un nouveau service (puisque j'utilise déjà un serveur git personnel).
  • La possibilité et la souplesse de l'utilisation en équipe.

Installation

Sous Debian, il suffit d'installer le paquet pass. D'autres paquets permettent de bénéficier de fonctionnalités supplémentaires :

  • git : Versionnement et partage simple du dépôt de mots de passe.
  • pwgen : Génération automatique de mots de passe aléatoires.
  • xclip : Copie d'un mot de passe dans le presse-papier de Xorg pendant une durée définie.

Tous ces paquets sont disponibles dans les dépôts Debian :

$ sudo apt install --no-install-recommends pass git pwgen xclip

Initialisation du dépôt

L'utilisation de pass nécessite tout d'abord d'intialiser un dépôt, dans lequel les mots de passe seront conservés, au moyen de la commande pass init.

$ pass init <gpg-id>

Le dépôt de mot de passe est placé par défaut à l'emplacemenbt ~/.password-store, mais il est possible de définir un autre emplacement dans la variable d'environnement PASSWORD_STORE_DIR.

Dans le cas où le dépôt de mots de passe doit être partagé entre plusieurs personnes, il est possible de définir plusieurs identités GPG, soit pour tout le dépôt, soit pour une partie seulement. Cela permet donc l'utilisation d'un unique dépôt de mots de passes partagé, sans pour autant permettre à tous les utilisateurs de lire tous les mots de passe qu'il contient. Par exemple :

$ pass init admin1@example.com admin2@example.com user1@example.com user2@example.com
$ pass init -p Admin admin1@example.com admin2@example.com
$ pass init -p Projects/project1 admin1@example.com user1@example.com
$ pass init -p Projects/project2 admin1@example.com admin2@example.com user2@example.com
$ pass init -p Private/admin1 admin1@example.com
$ pass init -p Private/admin2 admin2@example.com
$ pass init -p Private/user1 user1@example.com
$ pass init -p Private/user2 user2@example.com

Appeler de nouveau la commande pass init permet de modifier la liste des clés GPG utilisées.

Initialisation du dépôt git

Pour permettre le versionnement et le partage des mots de passe avec git, il est nécessaire d'initialiser un dépôt git dans le dépôt de mots de passe :

$ pass git init
$ pass git remote add origin <user@host:git-path/password-store>
$ pass git config branch.master.rebase true
$ pass git push --all -u

Toutes les commandes git sont utilisables en les préfixant par la commande pass git au lieu de simplement git. Lors de la modification du contenu du dépôt, pass fait automatiquement un commit. Les opérations de push/pull restent par contre manuelles.

Note : Définir le paramètre branch.master.rebase à true permet que git effectue un rebase automatiquement lors de chaque opération de pull. De cette manière, il n'y aura pas de commits de merge inutiles dans le dépôt.

Récupération d'un dépôt existant

Lorsque le dépôt de mots de passe existe déjà, il est possible de le récupérer au moyen d'un simple git clone :

$ git clone <user@host:git-path/password-store> ~/.password-store
$ pass git config branch.master.rebase true

Ajout d'un mot de passe

Il est possible d'ajouter un mot de passe dans le dépôt au moyen de la commande pass insert. Le mot de passe sera alors demandé deux fois, de manière interactive.

$ pass insert <Path/password-name>

Le paramètre --multiline (abrégé -m) permet d'ajouter le mot de passe depuis l'entrée standard, ou depuis l'éditeur de texte par défaut, si aucun flux n'est envoyé sur la sortie standard. Cela permet aussi d'ajouter plusieurs lignes de contenu dans le fichier, la première ligne correspondant au mot de passe, et le reste à des métadonnées.

$ pass insert -m <Path/password-name>
$ echo 'bad password' | pass insert -m <Path/password-name>

Lister les mots de passe

Il est possible d'afficher la liste totale ou partielle des mots de passe au moyen de la commande pass ls, qui est la sous-commande par défaut lorsqu'on donne un répertoire comme paramètre :

$ pass
$ pass ls
$ pass <Path>
$ pass ls <Path>

Pour afficher les mots de passe en cherchant un terme précis dans le chemin, il faut utilser la commande pass find :

$ pass find <terme>

Enfin, pour chercher un terme dans les fichiers de mots de passe, on peut utiliser la commande pass grep :

$ pass grep <terme>

Note : Cette dernière commande met beaucoup plus de temps à s'exécuter, puisqu'elle nécessite de déchiffrer tous les fichiers de mots de passe, afin d'y rechercher le terme spécifié.

Lire un mot de passe

Lire le contenu d'un fichier de mots de passe est possible avec la commande pass show, qui est la sous-commande par défaut lorsqu'on donne un fichier de mots de passe comme paramètre. Sans autre parmètre, cette commande affiche le contenu complet du fichier de mots de passe dans le terminal. En ajoutant le paramètre --clip (abrégé -c), le mot de passe (première ligne du fichier) sera automatiquement copié dans le presse-papier de Xorg pendant une durée définie (par défaut 45 secondes), puis le contenu précédent y sera remis automatiquement. Rien n'est alors affiché dans le terminal.

$ pass <Path/password-name>
$ pass --clip <Path/password-name>

La durée de présence du mot de passe dans le presse-papier est modifiable au moyen de la variable d'environnement PASSWORD_STORE_CLIP_TIME.

Modifier un mot de passe

La modification du contenu d'un fichier de mot de passe se fait au moyen de la commande pass edit, qui ouvre l'éditeur de texte par défaut afin d'y faire les modifications voulues.

$ pass edit <Path/password-name>

Génération automatique d'un mot de passe

Pour générer un mot de passe aléatoirement, il faut utiliser la commande pass generate :

$ # Génération simple d'un nouveau mot de passe aléatoire
$ pass generate <Path/password-name> <size>
$ # Génération d'un mot de passe aléatoire et copie du mot de passe généré dans le presse-papier
$ pass generate --clip <Path/password-name> <size>
$ # Génération d'un mot de passe aléatoire en remplacement d'un mot de passe existant
$ pass generate --in-place <Path/password-name> <size>
$ # Génération d'un mot de passe aléatoire sans caractères spéciaux
$ pass generate --no-symbols <Path/password-name> <size>

Déplacer un mot de passe

Il est possible de déplacer un mot de passe en utilisant la commande pass mv :

$ pass mv <Path/password-name>

Supprimer un mot de passe

Lorsqu'un mot de passe ne sera plus utile, utiliser la commande pass rm permet de le supprimer :

$ pass rm <Path/password-name>

Migration depuis d'autres gestionnaires de mots de passe

Il existe différents scripts permettant la migration des données depuis un autre gestionnaire de mots de passe dans pass. Ils sont listés sur le site officiel de pass.


Utilisation basique de GPG

dim. 25 févr. 2018 by Marmotte

GNU Privacy Guard (GPG) est un logiciel permettant de chiffrer et/ou signer des documents (fichiers, emails, commits git...), fonctionnant principalement à partir d'un système de paires de clés publique et privée.

Cet article est simplement un résumé des commandes basiques nécessaires à l'utilisation de GPG. J'explique ici l'utilisation de …

read more

Sauvegarde et restauration avec Borg

jeu. 11 janv. 2018 by Marmotte

Borg est un logiciel de sauvegarde doté de fonctionnalités avancées comme la déduplication et le chiffrement.

Cet article explique la manière dont je l'utilise pour sauvegarder mes systèmes.

Pourquoi utiliser Borg ?

J'ai récemment revu l'organisation des sauvegardes de mes machines. En effet, j'utilisais jusque là un script très basique à …

read more

Limiter les attaques par force brute sur le service SSH

dim. 07 janv. 2018 by Marmotte

Le service SSH (Secure SHell) permet d'obtenir l'accès à un terminal sur une machine distante, ce qui le rend donc très pratique pour l'administration. De ce fait, il est disponible sur un grand nombre de serveurs. Malheureusement, cela le rend donc aussi très attirant pour les personnes cherchant à contrôler …

read more

Un serveur PXE pour les booter tous

sam. 06 janv. 2018 by Marmotte

Après avoir mis au point le menu de boot dynamique de ma clé USB, j'ai eu envie de faire la même chose sur mon serveur PXE. Comme j'ai déjà une configuration de grub qui le fait, j'ai donc remplacé pxelinux par grub sur le serveur PXE, puis j'ai repris la …

read more

Une clé USB pour les booter vraiment tous

sam. 30 sept. 2017 by Marmotte

Lorsqu'on bidouille des machines, il arrive que le système ne démarre plus. Que seul le boot loader soit cassé, ou que ce soit le système complet, il est donc important d'avoir à disposition un moyen de démarrer la machine, pour réparer les dégâts.

J'explique ici la manière dont j'ai configuré …

read more

LXC sur Debian Jessie

ven. 03 mars 2017 by Marmotte

LXC, pour Linux Containers, permet de lancer plusieurs environnements Linux sur une même machine, de manière isolée, comme le fait OpenVZ. Par rapport à des machines virtuelles, les performances sont donc bien meilleures, puisque les différents systèmes fonctionnent directement sur le noyau, sans couche de virtualisation intermédiaire. Cela implique aussi …

read more

Installer Debian Jessie avec debootstrap

ven. 03 mars 2017 by Marmotte

Sur la plupart de mes machines, j'utilise la version stable de Debian, soit Jessie actuellement. J'explique ici la manière dont j'installe un système avec Debootstrap.

Note : Cet article est une mise à jour de celui qui expliquait l'installation de Debian Wheezy.

Pourquoi ne pas utiliser l'installeur Debian ?

L'installeur ajoute …

read more

Le système de fichiers BTRFS

ven. 03 mars 2017 by Marmotte

BTRFS est un système de fichiers, comparable à ZFS, encore en développement très actif, mais déjà intégré au noyau Linux et considéré stable pour un bon nombre de fonctionnalités. Il est cependant conseillé d'avoir un noyau Linux le plus récent possible pour l'utiliser.

Il a un fonctionnement de type Copy-on-Write …

read more

Configuration du pare-feu avec iptables

sam. 28 janv. 2017 by Marmotte

Le paquet iptables fournit une collection de commandes permettant de configurer netfilter, le pare-feu intégré au noyau Linux. Cet article contient toutes les notes que j'ai prises lorsque j'ai voulu savoir réellement configurer le pare-feu sur mes serveurs Debian, autrement qu'en appliquant au hasard des règles en espérant qu'elles conviennent …

read more