En 2020 j’avais eu le plaisir d’écrire sur Teampass, un gestionnaire de mots de passe full web, collaboratif grâce à sa gestion d’équipe et de multiples utilisateurs, opensource, et français. A l’époque nous étions en version 2, la version 3 n’étant pas finalisée. Cette dernière nous offre une interface graphique plus au goût du jour et une nouvelle mécanique de chiffrement.

Je vous propose dans cet article de découvrir comment installer cet outil afin de le déployer dans vos structures.

Pré-requis

Nous installerons Teampass sur une Ubuntu 22.04 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 :

sudo apt-get install && sudo apt-get upgrade -y

Puis nous installerons Apache :

sudo apt-get install apache2 -y

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

sudo apt-get install mariadb-server -y

Et nous installerons les modules annexes nécessaires :

sudo apt-get install php libapache2-mod-php php-mysql -y
sudo apt-get install php-{curl,mbstring,bcmath,common,gd,xml,fpm,gmp}

Nous installerons Git :

sudo apt-get install git -y

Configuration de MariaDB

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

sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

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

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] Y
Enabled successfully!
Reloading privilege tables..
 ... Success!


You already have your root account protected, so you can safely answer 'n'.

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


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

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

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

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

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

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

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

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

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

 

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 Teampass et les placerons dans le bon répertoire avec la commande suivante:

wget https://github.com/nilsteampassnet/TeamPass/archive/refs/tags/3.0.8.tar.gz
tar -xzvf 3.0.8.tar.gz
sudo cp -R TeamPass-3.0.8/ /var/www/teampass.domaintest.loc

Puis nous donnerons les droits adéquats:

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

sudo chown -R www-data:www-data /var/www/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:

sudo nano /etc/php/8.1/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:

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

Nous commencerons par générer la clé privée pour l’autorité de certification en rentrant un mot de passe.
Ce dernier sera absolument nécessaire pour la signature de certificat, conservez-le précieusement:

sudo openssl genrsa -des3 -out domaintestCA.key 2048
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

Puis nous générerons le certificat root de l’autorité de certification à destination des clients au format .pem:

sudo openssl req -x509 -new -nodes -key domaintestCA.key -sha256 -days 3650 -out domaintestCA.pem

Enter pass phrase for domaintestCA.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:DS
Locality Name (eg, city) []:City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:LAB Remiflandrois.fr
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:Wildcard domaintest.loc
Email Address []:admin@domaintest.loc

Pour des raisons pratiques nous génèrerons également un certificat au format .crt:

sudo openssl x509 -in domaintestCA.pem -inform PEM -out domaintestCA.crt

Nous créerons la clé privée utilisée pour tous les serveurs de domaintest.loc de telle manière que le certificat final soit un certificat wildcard (*.domaintest.loc).
Puis nous génèrerons le CSR (Certificate Signing Request) :

sudo openssl genrsa -out wildcard.domaintest.loc.key 2048
sudo openssl req -new -key wildcard.domaintest.loc.key -out wildcard.domaintest.loc.csr

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:DS
Locality Name (eg, city) []:City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:LAB Remiflandrois.fr
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:Wildcard Domaintest.loc
Email Address []:admin@domaintest.loc
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

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

sudo nano wildcard.domaintest.loc.ext

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = *.domaintest.loc

Enfin nous signerons notre certificat avec notre autorité de certification et obtiendrons le certificat public pour Apache.
Lors de ce processus le mot de passe de notre autorité de certification nous sera demandé :

sudo openssl x509 -req -in wildcard.domaintest.loc.csr -CA domaintestCA.pem -CAkey domaintestCA.key -CAcreateserial -out wildcard.domaintest.loc.crt -days 3650 -sha256 -extfile wildcard.domaintest.loc.ext
Certificate request self-signature ok
subject=C = FR, ST = DS, L = City, O = LAB Remiflandrois.fr, OU = IT, CN = Wildcard Domaintest.loc, emailAddress = admin@domaintest.loc
Enter pass phrase for domaintestCA.key:

Configuration du VHost Apache

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

sudo 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/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@domaintest.loc
DocumentRoot /var/www/teampass.domaintest.loc
ServerName teampass.domaintest.loc
SSLEngine On
SSLCertificateFile /etc/ssl/teampass.domaintest.loc/wildcard.domaintest.loc.crt
SSLCertificateKeyFile /etc/ssl/teampass.domaintest.loc/wildcard.domaintest.loc.key
<Directory /var/www/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>

Puis nous activerons le module Apache SSL:

sudo a2enmod ssl

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

sudo ln -s /etc/apache2/sites-available/teampass.domaintest.loc.conf /etc/apache2/sites-enabled/teampass.domaintest.loc.conf
sudo 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 :

sudo 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 « START » .

A l’écran « Server Checks » nous cliquerons sur « START » . 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 « START » pour vérifier la bonne connexion et sur « NEXT » si tout est OK.

A l’écran « Teampass Set-up » nous donnerons 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 « START » et sur « NEXT » si tout est OK.

A l’écran « Preparing Database » Nous cliquerons sur « START » pour créer les tables de la BDD. Puis sur « NEXT ».

A l’écran « Finalization » nous cliquerons sur « START » 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:

 

Sur notre page d’accueil nous commencerons par créer le job cron necessaire à Teampass en cliquant sur le bouton « Add new job ».

Puis sur l’icône de notre utilisateur (en haut à droite) nous ouvrirons notre profil, cliquerons sur l’onglet « Paramétres » et nous rajouterons l’adresse e-mail de l’admin. Nous modifierons également la TimeZone et la langue. Nous validerons en cliquant sur le bouton « Save » .

Dans le menu « Paramètres => Options », nous changerons la TimeZone et la langue par défaut.

Nous activerons le répertoire personnel.

Nous configurerons également la possibilité de créer des enregistrements avec des noms similaires et la gestion des éléments par les Gestionnaires.

Enfin nous configurerons l’héritage des droits du dossier parent vers les enfants.

Dans la rubrique « Paramètres => Email » nous paramétrerons l’envoi de mails de manière classique avec le compte mail de notre choix.

Fonctionnement Général

Teampass fonctionne selon l’architecture dossier, utilisateur, groupe (Rôles).
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 le menu des dossiers :

Puis nous cliquerons sur le bouton « Nouveau »et 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 et 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 et nous cliquerons sur le bouton de création d’un rôle :

Puis nous donnerons les droits sur les dossiers choisis au rôle que nous venons de créer.

Nous irons ensuite dans le menu de gestion des utilisateurs pour en créer un nouveau et activer son répertoire personnel :

Nous remplirons le formulaire en donnant un nom, un prénom, un identifiant, un mot de passe temporaire 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é.

Conclusion

Simple d’utilisation et rapide à 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.

 

Comments are closed