Cybersécurité : Serveur de mots de passe SecretManager
Introduction
SecretManager est un serveur de gestion de mots passe, créé par Pierre-Luc Mary et sous licence Copyleft. Il comporte une interface web et est écrit en php5. Le logiciel est composé en deux parties :
- SecretManager : Ce composant gère tout ce qui est interface web.
- SecretServer : Ce composant gère tout ce qui est mot de passe.
Les deux sont dans le même dossier à télécharger; tout est inclus. Nous verrons dans un premier temps la mise en place de SecretManager, puis celle de SecretServer.
Installation
Pré-requis
Je pars ici d'une VM vierge. Néanmoins, il est nécessaire de gérer tout ce qui est en lien avec DNS, à la fois sur le serveur et sur le client. Votre serveur doit donc avoir un serveur DNS (contenant une entrée pour lui ! SecretManager a besoin de faire des requêtes DNS sur lui-même !). Si vous n'en avez pas, vous pouvez utiliser le fichier /etc/hosts.
Dépendances
Je pars ici d'une VM Debian Stretch.
- Nous allons installer SecretManager sur un serveur Apache2. Nous commencons par installer les composants nécessaires :
apt update apt install apache2 mysql-server unzip phpmyadmin
- Puisque j'utilise Debian Stretch, php5 n'est pas disponible tel quel. Je vais donc ajouter les dépôts de Debian Jessie pour y avoir accès:
vim /etc/apt/sources.list #Ajouter la ligne: deb http://deb.debian.org/debian jessie main
- Il n'y a plus qu'à installer php et ses modules, nécessaires à phpmyadmin et SecretManager :
apt update && apt install php5 php-mbstring php-gettext php5-mysql php-mcrypt
Installation de SecretManager
- SecretManager est disponible depuis Sourceforge. On se place dans le dossier home et on le télécharge :
cd ~ wget https://datapacket.dl.sourceforge.net/project/secretmanager/SecretManager-v1.0-2.zip
- Les téléchargements avec wget depuis Sourceforge peuvent être ennuyeux; si le lien n'est pas bon, lancez un téléchargement de SecretManager depuis Sourceforge dans un navigateur, annulez-le, puis allez dans la section téléchargements de votre navigateur et récupérez le lien [sous Firefox : clic-droit > Copier l'adresse d'origine du téléchargement].
- Nous allons ensuite le dézipper et le placer dans le dossier /var/www avec les droits:
unzip SecretManager-v1.0-2.zip cp -r SecretManager /var/www/SecretManager chown -R www-data:www-data /var/www/SecretManager/
Mise en place du serveur Web
- Je commence par créer mon fichier d'hôtes virtuel tel que celui-ci dans /etc/apache2/sites-available/001-secretmanager.conf. Celui-ci redirige automatiquement vers https.
<VirtualHost *:80> ServerName secretmanager.ju.lab ServerAdmin webmaster@localhost Redirect Permanent / https://secretmanager.ju.lab ErrorLog ${APACHE_LOG_DIR}/secretmanager.log CustomLog ${APACHE_LOG_DIR}/secretmanager.log combined </VirtualHost> <VirtualHost *:443> ServerName secretmanager.ju.lab DocumentRoot /var/www/SecretManager ErrorLog ${APACHE_LOG_DIR}/secretmanager.log SSLEngine on SSLCertificateKeyFile /etc/ssl/private/secretmanager_priv_key.pem SSLCertificateFile /etc/ssl/private/secretmanager_cert.pem ###Configuration spécifique à SecretManager <Directory /var/www/SecretManager> DirectoryIndex index.php index.html AllowOverride All Order allow,deny Allow from all </Directory> <Directory /var/www/SecretManager/Backup> Order allow,deny Allow from localhost Deny from all </Directory> <Directory /var/www/SecretManager/Libraries/Restricted> Order allow,deny Allow from localhost Deny from all </Directory> CustomLog ${APACHE_LOG_DIR}/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\"%b" </VirtualHost>
- Je vais ensuite générer la clef et le certificat (remplir les champs conformément à votre site):
cd /etc/ssl/private/ openssl req -newkey rsa:2048 -nodes -keyout secretmanager_priv_key.pem -x509 -days 365 -out secretmanager_cert.pem
- Je vais ensuite activer ssl pour Apache2, contrôler et activer le site, et recharger Apache2:
cd /etc/apache2/sites-available/ a2ensite 001-secretmanager.conf a2enmod php5 a2enmod ssl a2enmod rewrite apache2ctl -t apache2ctl graceful systemctl restart apache2
Base de données
Nous allons devoir accéder à phpmyadmin pour installer les fichiers de base de données prévus par SecretManager. Il faut s'y connecter avec un utilisateur ayant tous les droits (La connection en tant que root étant par défaut interdite, il est plus simple de créer un utilisateur temporaire et de lui donner tous les droits, avant de s'en servir pour se connecter. N'oubliez pas de le supprimer après !).
- Connectez vous à http://ip_du_serveur/phpmyadmin.
- Rendez-vous dans l'onglet "import", et importez les fichiers suivants, contenus dans SecretManager/Installation :
- Secret-Manager-0-Linux.sql
- Secret-Manager-1.sql
- Secret-Manager-2.sql
- Secret-Manager-3.sql
- J'utilise ici phpmyadmin pour suivre à la lettre les instruction d'installation de SecretManager. Néanmoins, il est également possible de le faire en ligne de commande : mysql -u myuser -p < /home/user/SecretManager/Install/Secret-Manager-0-Linux.sql
Ajustement du routage interne de SecretManager
Il est nécessaire d'indiquer à SecretManager vers quel serveur (lui-même, normalement...) rediriger les flux en réécrivant les adresses. Pour cela, ouvrez le fichier /var/www/SecretManager/Constants.inc.php ( Il est possible de se servir de ce fichier pour déplacer les dossiers de SecretManager; néanmoins, il faut prendre garde à ce que www-data y aait toujours accès, où qu'ils soient.) avec un éditeur de texte, puis modifiez la ligne suivante:
define( 'SERVER', 'ihm.secretmanager.fr' ); #Est remplacé par, dans mon cas: define( 'SERVER', 'secretmanager.ju.lab' );
Vous pouvez indiquer une URL ou bien une IP.
Vérification de l'installation
SecretManager implémente un script de vérification de l'installation. Vous pouvez y accéder depuis l'url :
https://adressedevotreserveurweb/SM-control.php
Tous les voyants doivent être sur 'OK'.
Premier accès
Le serveur est en place, on va pouvoir y accéder via l'url : https://adresseduserveur/SM-login.php. Le login par défaut :
- login : root
- mot de passe (attention à l'espace): Welcome !
Vous devez accéder au panneau de contrôle de SecretManager :
Mise en place du SecretServer
SecretManager est en place. Il ne reste plus qu'à s'occuper de SecretManager qui est, lui, un peu plus simple.
Configuration
SecretServer utilise le fichier de configuration suivant : /var/www/SecretManager/Libraries/Restricted/Config_SM-secrets-server.inc.php.
Il contient 3 choses :
- Son adresse IP : le seul paramètre à changer, normalement.
- Le port sur lequel il écoute (par défaut 10000)
- Le nom du fichier ou la clef "mère" sera stockée (c'est la clef qui sert à chiffrer tout les mots de passe). Cette clef sera elle-même chiffrée par une clef "opérateur", elle ne devrait donc pas être en clair sur le serveur.
Lancement du serveur
Pour le premier lancement, il conseillé d'utiliser le mode "debug" (un mode verbeux) :
php5 /var/www/SecretManager/SM-secrets-server.php -d
Plus d'options sont disponibles et l'aide est disponible avec :
php5 SM-secrets-server.php -h
Qui affiche:
SM-secrets-server.php [-config "conf_file"] [-debug] [-version] -config "conf_file" : declare a specific configuration file -c "conf_file" : declare a specific configuration file -debug : script execution is in "debug" mode -d : script execution is in "debug" mode -version : show script version -v : show script version -force : force SecretServer to stop when we've got an integrity alert -f : force SecretServer to stop when we've got an integrity alert
Quand il est lancé sans option, il tourne en tache de fond.
En tant que daemon
Il est possible d'en faire un daemon en créant le script suivant dans /etc/init.d/SecretManager.sh (n'oubliez pas le chmod +x):
# !/bin/sh ###BEGIN INIT INFO # Provides : secretmanager # Required-Start : $all # Required-Stop : $local_fs # Default-Start : 2 3 4 5 # Default-Stop : 0 1 6 # Short-Description : secretserver # Description : Demarre et arrete le SecretServer. Composant de securite du SecretManager. ### END INIT INFO cd /var/www/SecretManager case $1 in start) echo ʺ′′Starting SecretServerʺ′′ php5 SM-secrets-server.php 2&1 > /var/log/SecretServer.log & ;; stop) echo ʺ′′Stopping SecretServerʺ′′ PID=`ps aux|grep ʺ′′php SM-secrets-server.phpʺ′′|grep –v grep|awk ‘{print $2}’` Kill -15 $PID ;; restart) $0 stop $0 start ;; *) echo ʺ′′Usage : /etc/init.d/SecretServer {start|stop|restart}ʺ′′ exit 1 ;; esac exit 0
Le serveur "SecretManager" est terminé.