Dans les diverses structures par lesquelles je suis passé j’ai connu les mots de passe stockés dans des fichiers Excel, puis dans Keepass, puis dans 1Password. De toutes ces solutions je retiendrai Keepass et 1Password. Le premier est open source, léger, pratique, standard et validé ANSSI. Le second est payant, propriétaire, beau, fonctionnel, et permet la gestion de plusieurs coffres fort avec des droits en fonction des équipes.

Je cherchais donc la synthèse des ces deux produits. Je suis d’abord tombé sur Passbolt, qui m’a laissé une impression de « bof bof ». Et enfin j’ai trouvé Teampass. Ce dernier est simple de mise en œuvre, accepte l’import de données Keepass, possède du 2FA sous plusieurs formes et est Français.
Développé par une seule personne (Nils Laumaillé) j’ai toute de suite aimé ce projet efficace et complétement en phase avec les réalités du travail en équipe. Je vous propose dans cet article de découvrir avec moi ce projet qui gagne à être connu.

Pré-requis

Nous installerons Teampass sur une Debian 10 fraichement mise à jour.
La machine mise en place possédera 2go de RAM et 2 vCPU.

Nous sécuriserons le serveur avec HTTPS grâce à la création d’une autorité de certification racine.
Le domaine local est domaintest.loc et le FQDN du serveur web teampass.domaintest.loc.

Installation des pré-requis

Tout d’abord nous vérifierons que le serveur est bien à jour :

apt update && apt upgrade

Nous installerons sudo :

apt install sudo -y

Puis nous installerons Apache :

apt install apache2 -y

Nous activerons Apache au démarrage de la machine :

systemctl enable apache2

Puis nous installerons la base de données, ici MariaDB :

apt install mariadb-server -y

Et nous installerons les modules annexes nécessaires :

apt install php libapache2-mod-php php-mysql -y

apt install php-{curl,mbstring,bcmath,common,gd,xml,fpm}

Nous installerons Git :

apt install git -y

Configuration de MariaDB

Nous initialiserons la base de données MariaDB et nous répondrons aux questions comme ci-dessous :

mysql_secure_installation

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Change the root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!

Remove anonymous users? [Y/n] Y
 ... Success!

Disallow root login remotely? [Y/n] Y
 ... Success!

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

Nous nous connecterons à la base de données avec les identifiants précédemment rentrés. Nous créerons une base de données pour Teampass et un utilisateur ayant les droits pour accéder à cette base :

mysql -u root -p

create database teampassdb character set utf8 collate utf8_bin;

grant all privileges on teampassdb.* to teampass@localhost identified by 'votre_mot_de_passe';

flush privileges;

quit

Clonage du projet

Nous récupérerons les sources de l’outil et les placerons dans le bon répertoire avec la commande suivante:

git clone https://github.com/nilsteampassnet/TeamPass.git /var/www/html/teampass.domaintest.loc/

Puis nous donnerons les droits adéquats:

chown -R www-data:www-data /var/www/html/teampass.domaintest.loc/

chmod -R 775 /var/www/html/teampass.domaintest.loc/

Configuration de PHP

Nous devrons reconfigurer quelques paramètres dans PHP dont le temps de session, la mémoire et la taille des pièces jointes:

nano /etc/php/7.3/apache2/php.ini

Puis nous modifierons les lignes comme ci dessous:

max_execution_time = 60
memory_limit = 256M
upload_max_filesize = 100M

Sécurisation du serveur web via HTTPS

Afin de sécuriser au mieux le service web Teampass nous aurons besoin de mettre en place un certificat HTTPS.
Si le serveur est connecté à internet nous pourrons utiliser Let’s Encrypt.
Ici par soucis de sécurité nous ne connecterons pas ce serveur vers l’extérieur. Nous générerons donc notre propre autorité de certification et le certificat associé au nom de domaine (teampass.domaintest.loc).
Il sera nécessaire de diffuser le certificat racine via une GPO sur tous les postes de notre domaine.

Nous commencerons par créer le dossier de travail nécessaire à ce domaine spécifique et nous nous y placerons:

mkdir /etc/ssl/teampass.domaintest.loc/
cd /etc/ssl/teampass.domaintest.loc/

Nous commencerons par générer la clé RSA pour l’autorité de certification:

openssl genrsa -out domaintest.loc.ca.key 2048

Puis nous générerons le certificat public de l’autorité de certification à destination des clients:

openssl req -x509 -new -nodes -key domaintest.loc.ca.key -sha256 -days 3650 -out domaintest.loc.ca.cer -subj "/O=DOMAINTEST/CN=DOMAINTEST CA - Certification authority/OU=DOMAINTEST CA - Certification authority"

Nous créerons la clé privée pour Apache et la demande de signature associée:

openssl req -new -sha256 -nodes -out domaintest.loc.csr -newkey rsa:2048 -keyout domaintest.loc.key -subj "/O=DOMAINTEST/CN=teampass.domaintest.loc"

Nous créerons un fichier contenant les paramètres pour notre certificat HTTPS:

nano domaintest.loc.sslv3.txt

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = teampass.domaintest.loc
DNS.2 = *.domaintest.loc

Enfin nous créerons la signature du certificat et obtiendrons le certificat public pour Apache:

openssl x509 -req -in domaintest.loc.csr -CAkey domaintest.loc.ca.key -CA domaintest.loc.ca.cer -CAcreateserial -CAserial domaintest.loc.serial -out domaintest.loc.crt -days 3650 -sha256 -extfile domaintest.loc.sslv3.txt

Configuration du VHost Apache

Nous devrons ensuite configurer le VHost nécessaire a la publication du site. Nous exécuterons donc la commande:

nano /etc/apache2/sites-available/teampass.domaintest.loc.conf

Et nous compléterons ce fichier comme ci dessous:

NameVirtualHost teampass.domaintest.loc:443

<VirtualHost *:80>
     DocumentRoot /var/www/html/teampass.domaintest.loc
     ServerName teampass.domaintest.loc
     Redirect permanent / https://teampass.domaintest.loc/
     ErrorLog ${APACHE_LOG_DIR}/teampass_error.log
     CustomLog ${APACHE_LOG_DIR}/teampass_access.log combined
</VirtualHost>

<VirtualHost *:443>
     ServerAdmin admin@example.com
     DocumentRoot /var/www/html/teampass.domaintest.loc
     ServerName teampass.domaintest.loc
     SSLEngine On
     SSLCertificateFile /etc/ssl/teampass.domaintest.loc/domaintest.loc.crt
     SSLCertificateKeyFile /etc/ssl/teampass.domaintest.loc/domaintest.loc.key
     <Directory /var/www/html/teampass.domaintest.loc>
          Options FollowSymlinks
          AllowOverride All
          Require all granted
     </Directory>

     ErrorLog ${APACHE_LOG_DIR}/teampass_error.log
     CustomLog ${APACHE_LOG_DIR}/teampass_access.log combined

</VirtualHost>

Nous activerons le module Apache SSL:

sudo a2enmod ssl

Nous créerons le lien symbolique et redémarrerons Apache:

ln -s /etc/apache2/sites-available/teampass.domaintest.loc.conf /etc/apache2/sites-enabled/teampass.domaintest.loc.conf

systemctl restart apache2

Configuration du pare-feux IPTABLES

Nous commencerons par installer iptables-persistent afin de mieux sauvegarder les règles que nous allons créer:

apt-get install iptables-persistent

Puis nous rentrerons les règles autorisant uniquement le ssh le HTTP et le HTTPS:

sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -P INPUT DROP

Puis nous sauvegarderons les règles:

sudo iptables-save

Initialisation de l’application

Nous nous connecterons à l’application via le nom de domaine configuré sur le serveur DNS https://teampass.domaintest.loc. A l’écran d’accueil nous cliquerons sur NEXT.

A l’écran « Server Checks » nous cliquerons sur LAUNCH. Avec les configurations précédemment effectuées, tous les points de vérifications seront au vert. Nous nous assurerons cependant que l’URL est bien en HTTPS.

Nous cliquerons ensuite sur NEXT.

A l’écran « Database connection » nous utiliserons les valeurs précédemment créées, à savoir :

  • Host : 127.0.0.1
  • Database Name : teampassdb
  • Login : teampass
  • Password : mot de passe choisi à la création de la BDD
  • Port : 3306 (port par défaut mariadb)

Nous cliquerons ensuite sur LAUNCH pour vérifier la bonne connexion et sur NEXT si tout est OK.

A l’écran « Preparation » nous donnerons ensuite le préfixe des tables.
Nous retournerons en SSH sur le serveur pour créer le répertoire de la clé de salage :

mkdir /var/teampass
chown www-data:www-data /var/teampass/

Et nous indiquerons le répertoire que nous venons de créer (/var/teampass).
Nous donnerons également le mot de passe administrateur de Teampass.

Nous cliquerons ensuite sur LAUNCH et sur NEXT si tout est OK.

A l’écran « Tables creation » Nous cliquerons sur LAUNCH pour créer les tables de la BDD. Puis sur NEXT.

A l’écran « Finalization » nous cliquerons sur LAUNCH pour écrire les paramètres dans les fichiers de configuration, puis sur NEXT pour terminer l’installation.

Enfin nous cliquerons sur « Move to home page » pour accéder à notre Teampass.

 

Premières connexions et paramétrages

Nous nous connecterons au portail avec nos identifiants /mots de passe:

Puis sur l’icône de notre utilisateur (en haut à droite) nous éditerons notre profil et nous rajouterons l’adresse e-mail de l’admin. Nous modifierons également la TimeZone et la langue.

Dans le menu Paramètres ( icône: )nous changerons la TimeZone et la langue par défaut.

Nous activerons le répertoire personnel et y appliquerons un mot de passe fort.

Nous activerons l’import de données depuis Keepass.

Nous activerons l’icône de copie dans le presse papier.

Nous désactiverons le mode hors ligne pour des raisons de sécurité

Dans la rubrique « envoi de fichiers » nous passerons la taille maximale à 20mo et activerons le redimensionnement des images.

Dans la rubrique « E-mail » nous paramétrerons l’envoi de mails de manière classique avec le compte mail de notre choix.

Nous pourrons activer l’authentification à deux facteurs dans le menu « Options 2FA ». Attention, quand nous activerons cette option les paramètres SMTP devront absolument être fonctionnels.

Fonctionnement Général

Teampass fonctionne selon l’architecture dossier, utilisateur, groupe (Roles).
Nous créerons donc des dossiers sur lesquels des groupes ont des droits. Les groupes contenant bien évidement des utilisateurs.

Pour commencer nous cliquerons sur l’icône des dossiers:

Puis nous cliquerons sur l’icône d’ajout:

Puis nous remplirons le formulaire suivant:

Nous définirons le nom du répertoire, le répertoire parent (cela permet de créer une arborescence complexe), la complexité des mots de passe contenus, la période de renouvellement des mots de passe. Nous pourrons également autoriser la création et la modification d’un élément même si il ne respecte pas les critères mentionnés plus haut.

Nous irons ensuite dans le menu de gestion des rôles:

Puis nous cliquerons sur le bouton de création d’un rôle:

Nous remplirons le formulaire en donnant un nom et une complexité. Nous cliquerons sur « enregistrer » pour valider.

Puis nous donnerons les droits sur les dossiers choisis au rôle que nous venons de créer. Pour cela nous cliquerons sur la petite main rouge:

Nous donnerons alors un accès en « Ecriture« . Et nous validerons.

Nous irons ensuite dans le menu de gestion des utilisateurs pour en créer un nouveau:

Nous cliquerons sur le bouton d’ajout.

Nous remplirons le formulaire en donnant un nom, un prénom, un identifiant, un mot de passe temporaire (à générer avec le bouton , ce dernier sera envoyé par mail à l’utilisateur) et le rôle qui lui donnera accès aux dossiers précédemment configurés. Nous pourrons passer outre les droits de base en indiquant les répertoires supplémentaires auxquels l’utilisateur aura accès et en interdire d’autres. Nous veillerons à ce que le répertoire personnel soit activé.

Une fois ceci fait l’utilisateur recevra un mail avec ses identifiants et pourra alors se connecter.

Maintenances

  • Il peut arriver que le répertoire personnel ne réussisse pas à se créer correctement. Nous pourrons alors lancer la création de ce dernier via le compte Administrateur, via le menu « Action Spécifique« . Nous cliquerons alors sur le bouton « Actualiser le répertoire personnel ».

Pour importer un coffre fort de type Keepass, il vous faudra prévoir de l’exporter au format CSV et de le réimporter dans Teampass via un compte utilisateur.

Conclusion

Simple d’utilisation et rapide a mettre en place, Teampass est un outil parfait pour le travail en équipe. Il est à implémenter dans tous les corps de métier et devrait éviter l’épineux phénomène des post-it collés sur l’écran.

Bibliographie:

Documentation officiel Teampass
Configuration APACHE

Merci à Charlotte pour la relecture et l’optimisation rédactionnelle.

Comments are closed