Comment synchroniser sa base KeePass

Comme dit dans un article précédent, je synchronisai mes mots de passe en passant par Telegram. Vu que c’était à faire à la mimine, ça m’a vite saoulé et j’ai mis en place une solution automatisée, hébergée sur mon VPS.

Les possibilités

En cherchant un peu ce que les gens faisaient pour synchroniser leur base KeePass, j’ai beaucoup rencontré DropBox et Google Drive. Mais je ne voulais pas mettre mes mots de passe sur des serveurs qui sont les cibles privilégiées des pirates. J’ai ensuite regardé du côté des plugins KeePass où j’ai trouvé du SCP, SFTP etc. Mais il fallait faire attention à ce que KeePass2Android était capable de prendre en charge vu qu’on ne peut pas lui ajouter de plugin.

Inquiétude inutile, vu qu’il prends en charge beaucoup de protocoles dont le WebDAV, qui nécessite juste un serveur web supportant cette extension de HTTP, ce qui est le cas de nginx que j’utilise déjà pour le blog. De plus, c’est aussi supporté nativement par KeePass, du coup, même plus besoin d’un autre plugin. Parfait !

Configuration de nginx

server {
  # configuration du site web
  # ...

  # configuration webdav
  location /passwords_files {
    root /var/www/;
    client_body_temp_path /var/www/passwords_files/tmp;
    autoindex on;
    dav_methods PUT DELETE MKCOL COPY MOVE;
    dav_ext_methods   PROPFIND OPTIONS;
    dav_access user:rw;
    auth_basic "Keyring";
    auth_basic_user_file /etc/nginx/.htpasswd;
  }
}

On défini le dossier qui sera accessible par WebDAV avec location (passwords_files dans notre exemple). Dans la section, on donne le chemin du répertoire parent avec root. Attention ici, root désigne juste le parent, pas le chemin complet du dossier à partager. Je précise parce que j’avais mal compris et j’avais spécifié /var/www/passwords_file dans root m’obligeant à avoir sur le disque dur /var/www/passwords_file/passwords_file, ce qui fait un peu con. :p

Avec cette configuration, /var/www/passwords_files est l’endroit sur le disque où la base de données KeePass sera stockée. Je passe le reste des options pour m’arrêter sur auth_basic_user_file qui va désigner un fichier htpasswd pour sécuriser le répertoire et éviter que n’importe qui puisse lire/écrire sur ce dossier.

Pour créer ce fichier, il faut soit avoir le paquet apache2-utils installé (pour Debian, je ne connais pas les autres distrib :p), soit utiliser openssl :

printf "USER:`openssl passwd -apr1`\n" >> .htpasswd

Tapez votre mot de passe et le fichier .htpasswd sera créé avec USER comme login et le mot de passe attendu, chiffré, bien entendu :).

Copiez votre base KeePass sur votre serveur et vous voilà prêt à synchroniser tout vos devices !

Configuration de KeePass

Sur le desktop lancez KeePass et faites File->Open->Open URL.... Remplissez le formulaire avec l’adresse de la base de données, nom de fichier compris, le login défini dans le .htpasswd et le mot de passe associé.

Personnellement, je laisse KeePass se souvenir de tout ça pour ne pas avoir à taper le mot de passe WebDAV en plus de celui qui protège la base.

Répétez l’opération pour chacun de vos PC bien sûr. La base sera mise à jour automatiquement à la sauvegarde.

Configuration de KeePass2Android

KeePass2Android propose deux version, l’une n’ayant pas accès au réseau. Il faut donc prendre l’autre pour pouvoir se connecter au WebDAV. :)

Ici rien de sorcier, choisir Open file..., WebDAV, remplir les informations nécessaires et voilà ! La base est synchro sur le mobile aussi !

Avertissement

Alors la base est mise à jour sur le serveur à la sauvegarde, mais je ne crois pas que KeePass gère les conflits. Alors le dernier à sauvegarder à le dernier mot. Du coup, faites gaffe à combien d’appareils ont accès à la base simultanément !

Conclusion

Maintenant, mon flow de gestion de mots de passe est finalisé et j’en suis très content.

Quelque soit votre choix, il faut utiliser un gestionnaire de mots de passe afin de ne pas utiliser le même sur des services différents, les fuites quasi mensuelles de base de données le prouvent.