Partager des mots de passe en sécurité
Voici un problème récurrent avec les allers et venues dans les sociétés. Comment partager les mots de passe d'une plateforme, la maintenir de tout changement, et éviter les fuites d'informations ?
Certains choisissent d'avoir un mot de passe unique ... C'est mal.
D'autres préconisent d'avoir un mot de passe avec une partie mémotechnique variable (liée par exemple, au nom du serveur). C'est prédictible donc c'est mal.
Certains reposent sur une centralisation des identifiants (avec un LDAP ou un Active Directory) et se partagent les informations via des fichiers type KeePassX. On se rapproche de quelque chose. Cependant, subsiste le problème d'accès à la base et de son maintient.
On va avancer sur cette solution et voir à la fiabiliser.
Avant propos
Juste quelques rappels avant d'exposer quelques bonnes méthodes à appliquer à cette solution.
A chaque mouvement de personnel, il faut révoquer les accès de l'utilisateur, et modifier les accès administrateurs sur les différents serveurs/services. La centralisation des comptes et le maintient d'une base d'information prend tout son sens.
Chaque modification sur la base nécessite d'être conservé (trace de la modification et conservation d'un historique des mots de passe à la rigueur).
Je ne traiterais pas de la centralisation des comptes. Guillaume Vaillant vous propose un billet sur le sujet orienté LDAP et je verrais peut-être à en rédiger un orienté Active Directory sous peu.
Sécuriser la donnée
On va se baser sur l'outil KeePass 2 (avec le plugin IOProtocolExt). Ce logiciel permet de sauvegarder les différents mots de passe dans une base encrypté (en AES256 de base). Le plugin quant à lui permet de centraliser la base sur un serveur SFTP.
Installer une distribution Linux ne doit pas être top un problème, donc on passe. Installer un serveur SSH, aussi.
On modifie les utilisateurs concernés par l'accès à la base en les affectant à un groupe dédié :
groupadd keepass gpasswd -a francois keepass
Ensuite, on crée un dossier, et on le prépare au niveau des droits et ACL (on pense à installer le package acl) :
mkdir /home/keepass chgrp keepass /home/keepass chmod 070 /home/keepass chmod g+s /home/keepass setfacl -Rmd g:keepass:rwx /home/keepass
On rajoute le logging des actions en SFTP en éditant le fichier /etc/ssh/sshd_config puis en relançant le service ssh :
sed -i '^Subsystem sftp /usr/lib/openssh/sftp-server^Subsystem sftp /usr/lib/openssh/sftp-server -l INFO^' /etc/ssh/sshd_config /etc/init.d/ssh reload
Installer KeePass 2
Sur Windows
Pour une fois, au grand dam des trolleurs du vendredi, ce sont aux amis de Windows qui s'en sortent le plus facilement. Une simple installation en clic-next fait son affaire. Concernant le plugin, on copie les fichiers dans le dossier d'installation de KeePass et on relance l'application.
Sur Linux
Bien que des packages soient disponibles pour les distributions majeurs, le plugin pour le SFTP utilisent des classes .NET non disponibles sur Mono. Obligé de passer par Wine. On part d'un préfixe wine vierge :
cd ~ winetricks dotnet40 wine Downloads//KeePass-2.20.1-Setup.exe
On copiera là encore les fichiers de plugin dans le dossier qui va bien.
SUR MAC OS X
Même problème que sur Linux. Même solution : wine. Il faut donc installer MacPorts puis wine :
sudo port install wine cd ~ winetricks dotnet40 wine KeePass-2.20.1-Setup.exe
On copiera là encore les fichiers de plugin dans le dossier qui va bien.
Générer la donnée
Il faut bien initialiser la base. On a donc installé KeePass 2. On crée une nouvelle base. On la sauvegarde. On la transfert en scp sur le serveur dans le bon dossier (avec WinSCP, FileZilla, ssh, ...). Pour sécuriser la base, on va utiliser un master key sous la forme d'un fichier générer par l'entropie de la souris. On garde le fichier dans un coin.
On supposera que la base s'appelle base.kdbx et la clé base.key.
Accéder à la donnée
La partie simplissime : File > Open > Open URL. On renseigne les informations :
- URL : sftp://ip/home/keepass/base.kbdx
- user name : votre identifiant
- password : votre mot de passe (il n'y a pas de gestion par clé pour le moment)
Le fichier sera chargé automatiquement.
Mise à jour de la donnée
La modification des informations se fait simplement en sauvegardant (File > Save – et non File > Save As).
Il est intéressant de sauvegarder une copie locale pour des raisons de mobilité par exemple ou d'indispo du serveur. Pour se faire : File > Save As > Save copy to file
La gestion des mises à jour par plusieurs utilisateurs et des risques de conflit se fait de la manière suivante :
- Les mises à jours se font seulement sur les entrées modifiées ; KeePass 2 se base principalement sur la date de modification
- Quand l’utilisateur A sauvegarde ses modifications sur le serveur, il récupère au même moment les mises à jour des autres utilisateurs
- S’il y a un conflit (A et B mettent à jours la même entrée en base), l’entrée la plus récente sera conservée (date de modification prise en compte)
- Le serveur prévient et demande une confirmation de l’action à mener au moment de la sauvegarde
Derniers points
Pensez à transmettre le master key aux bons utilisateurs.
Pensez à mettre à jour régulièrement la master key surtout lors des départs d'utilisateurs.
Ne déposez pas la base sur des partages publiques, même si elle est encryptée (GDrive, DropBox, ...).
Ne transmettez pas la master key par email (surtout jointe avec les informations "vitales").