Installation du gestionnaire de mots de passe RatticDB sur Ubuntu Server

 

Les mots de passe. Ce truc dont on doit se souvenir et jamais le donner à personne … en théorie. C’est bien, les mots de passe, mais pour bien faire les choses il en faut un par utilisation, d’une complexité dépassant nos capacités à les retenir, et surtout il faut les changer régulièrement.

Pas simple. Sauf … sauf si on utilise un gestionnaire de mots de passe. Il en existe des commerciaux, qui proposent de garder le coffre-fort chez eux (Dashlane, 1Password, LastPass; etc…) et des libres (KeePass) qui utilisent un fichier chiffré que l’on garde précieusement dans un endroit sécurisé.

Les inconvénients des gestionnaires de mots de passe commerciaux :

  • ils sont propriétaires (On ne sait pas vraiment où sont stockés nos mots de passe)
  • ils sont bien souvent payants (Ou bien gratuits, mais avec fonctionnalités très réduites).

Leurs avantages, en revanche :

  • l’interface est disponible depuis un navigateur web
  • il existe des applications dédiées.

Pour résumer, il nous faudrait une solution qui combine flexibilité de Keepass (le coffre-fort de mots de passe est chez nous) et accessibilité (accessible depuis -presque- n’importe-où facilement).

Pour ça, on a quelques solutions gratuites qui sont intéressantes : Keeweb, LessPass, Vaultier, RatticDB, etc …

Malheureusement, la plupart n’ont plus l’air maintenues activement.

Le dernier, RatticDB, permet de gérer ses mots de passe via une interface assez simple, et de créer des groupes d’utilisateurs ayant accès à différents mots de passe en fonction de leurs groupes.

L’idée du gestionnaire de mots de passe collaboratif, auto-hébergé et simple me plait, c’est pour ça que j’ai choisi ce gestionnaire.

Pour mon utilisation, je vais utiliser un Ubuntu Server 14.04 (Ça fonctionne aussi avec du 16.04, mais certaines commandes seront à adapter), avec Apache pour servir l’interface web et MySQL pour la BDD. Le configuration Apache ne sera pas très élaborée dans ce tuto (Bien que c’est toujours intéressant) car je ferai appel à un reverse proxy pour le front-end, qui prendra en charge le TLS, les différentes ACLs, etc …

Les prérequis

Evidemment, les prérequis :

  • Un Ubuntu server 14.04 minimum. Dans mon cas, ce serveur (virtuel) sera dédié à l’utilisation de Rattic car les mots de passe n’étant pas chiffrés dans la BDD, cette dernière sera sur un disque chiffré.
  • Un disque (ou tout le système) chiffré

Je pars du principe que le nom d’hôte du serveur est correctement configuré (vi /etc/hostname et vi /etc/hosts)

L’installation des prérequis suivants est nécessaire :

sudo apt-get install gcc libssl-dev libmysqlclient-dev libldap2-dev python-dev python-lxml python-pip mysql-server python-ldap python-mysqldb gettext libapache2-mod-wsgi apache2

Chiffrage du disque supplémentaire

Avant tout chose, il vous faut bien sur avoir installé un disque supplémentaire sur votre machine. Soit physique, soit virtuel, selon le cas.

Pour chiffrer notre disque

On installe CryptSetup

sudo apt-get install cryptsetup
sudo echo aes > /etc/modules
sudo echo dm_mod > /etc/modules
sudo apt-get install reiserfsprogs

On fait un fdisk -l pour voir quel index possède notre nouveau disque (théoriquement sdb s’il est le deuxième du système, mais fiez-vous au résultat de la commande ci-dessous pour être sûr)

sudo fdisk -l

Détermination du disque ajouté

Le disque concerné est facilement identifiable :

On démarre Fdisk sur le disque voulu

sudo fdisk /dev/sdb

On y créé une partition primaire en tapant

fdisk> n (Nouvelle partition)
fdisk> p (Primaire)
fdisk> 1 (Première partition)
fdisk> [entrée] (Premier secteur par défaut)
fdisk> [entrée] (Dernier secteur par défaut)
fdisk> w (On écrit les changements et quitte Fdisk)

Créer une partition sur un disque avec fdisk

On chiffre ensuite notre partition

sudo cryptsetup -y create crypt /dev/sdb1
sudo echo "crypt /dev/sdb1 none none" >> /etc/crypttab
sudo echo "/dev/mapper/crypt /crypt reiserfs defaults 0 1" >> /etc/fstab
sudo mkfs.reiserfs /dev/mapper/crypt
cd /
sudo mkdir crypt
sudo mount /crypt

J’ai utilisé « /crypt » comme point de montage de la partition chiffrée, mais vous pouvez mettre ce que vous souhaitez. Veillez à bien changer les commandes en conséquence.

Vous pouvez maintenant cd /crypt pour vous rendre sur la partition chiffrée.

Déplacement de la BDD sur la partition chiffrée

Chiffrer une partition ou un disque c’est cool, mais il faut l’utiliser ensuite. Comme nos données sensibles seront dans une BDD MySQL, on va déplacer le répertoire de travail de MySQL sur cette partition chiffrée. De cette manière, les nouvelles BDD que nous allons créer seront créées par MySQL dans ce répertoire.

Pour commencer, on se connecte à MySQL

mysql -u root -p

On affiche le répertoire de données utilisé par MySQL

mysql> select @@datadir;
+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)

On quitte MySQL (Ctrl-C) puis on arrête les services MySQL

sudo service mysql stop

On copie l’ensemble des données dans le dossier d’origine vers notre partition chiffrée

sudo rsync -av /var/lib/mysql /crypt

Puis on renomme le dossier d’origine

sudo mv /var/lib/mysql /var/lib/mysql.bak

On édite le fichier de configuration de MySQL pour lui indiquer où se trouve notre nouveau répertoire de données

sudo nano /etc/mysql/my.cnf

On change la ligne

datadir         = /var/lib/mysql

par

datadir         = /crypt/mysql

On n’oublie pas de configurer les ACLs Apparomor pour que ce dernier écrive dans le bon répertoire

sudo nano /etc/apparmor.d/tunables/alias

Et on ajoute la ligne suivante à la fin du fichier

alias /var/lib/mysql/ -> /crypt/mysql/,

Afin de permettre au script de démarrage de MySQL de démarrer sans générer d’erreurs, il faut créer le répertoire suivant

sudo mkdir /var/lib/mysql/mysql -p

De cette manière le script, qui va vérifier l’existence du chemin ci-dessus, pourra fonctionner sans erreurs.

On démarre alors MySQL

sudo service mysql start

Même manip que précédemment, on vérifie le chemin utilisé par MySQL pour stocker les données :

mysql> select @@datadir;
+---------------+
| @@datadir     |
+---------------+
| /crypt/mysql/ |
+---------------+
1 row in set (0.00 sec)

Le chemin retourné est le bon, nos futures BDD seront bien stockées sur la partition chiffrée.

 

Installation de RatticDB

Pour l’installation je passe sur la création de la BDD et de l’utilisateur associé. On considérera :

  • BDD : rattic
  • Utilisateur : rattic_usr
  • Mot de passe : mdpadm
  • Serveur : localhost

On télécharge l’archive contenant nos fichiers :

wget https://github.com/tildaslash/RatticWeb/archive/v1.3.1.tar.gz

On l’extrait dans /opt/apps

sudo mkdir -p /opt/apps
sudo mv v1.3.1.tar.gz /opt/apps/ && cd /opt/apps/
sudo tar -zxvf v1.3.1.tar.gz

On créé un lien symbolique RatticWeb vers le répertoire créé par notre précédente extraction. Cela nous permettra de gérer facilement différentes versions de Rattic par la suite, facilement.

sudo ln -s RatticWeb-1.3.1/ RatticWeb

On se rend dans le répertoire d’installation de Rattic et on va éditer le fichier requirements-base.txt afin d’éviter des erreurs lors de l’installation de Rattic.
Une fois dans le fichier, on remplace la ligne

django-celery>=3.1,<3.2

par

django-celery>=3.1,<3.1.17

et on ajoute la ligne

kombu==3.0.26

On lance ensuite le script permettant d’installer les prérequis pour MySQL

sudo pip install -r requirements-mysql.txt

On obtient la réponse suivante

Successfully installed celery django-celery importlib django-social-auth paramiko kombu qrcode pytz billiard oauth2 python-openid ecdsa amqp anyjson httplib2
Cleaning up...

Si vous obtenez une erreur du type fatal error: libxml/xmlversion.h: Aucun fichier ou dossier de ce type
c’est que l’installation de python-lxml ne s’est pas bien déroulée au début de ce tuto (prérequis). Vérifiez alors que ce composant est correctement installé.

Pour le reste, on continue, et on créé un répertoire « static » pour le contenu statique de Rattic

sudo mkdir static

On créé un fichier de conf pour Rattic

vim  /opt/apps/RatticWeb/conf/local.cfg

et on y met le contenu suivant (à adapter selon votre infra, bien sûr) selon nos paramètres de BDD définis précédement

[ratticweb]
debug = False
secretkey = uNe_cléTot4l3mentalé41oir3!!
hostname = mdp.tokarz.lab #A changer, bien sur

[filepaths]
static = /opt/apps/RatticWeb/static

[database]
engine = django.db.backends.mysql
name = rattic
user = rattic_usr
password = mdpadm
host = localhost
port = 3306

Pour terminer cette étape, on lance l’installation de Rattic à proprement parler

./manage.py syncdb --noinput
./manage.py migrate --all
./manage.py compilemessages
./manage.py collectstatic -c --noinput
./manage.py demosetup

Dans le doute si on veut vérifier que tout s’est bien déroulé :

use rattic;
show tables;

sur MySQL afin de s’assurer que les tables ont bien été crées par le script dans la BDD.

On édite le fichier /opt/apps/RatticWeb/conf/defaults.cfg afin de changer le ligne

timezone = Australia/Melbourne

pour

timezone = Europe/Paris

Configuration d’Apache

Pour servir notre application, on utilise ici Apache. Comme précisé dans le début du tuto, je ne vais pas modifier grand chose. Le strict minimum afin que notre application web fonctionne correctement. Il sera ensuite nécessaire de la servir via un reverse proxy configuré correctement pour être accessible depuis l’extérieur. Sinon, on peut laisser l’application comme ça et l’utiliser avec un VPN, plus sécurisé (Mais pas infranchissable).

On modifie alors le fichier /etc/apache2/sites-available/000-default.conf pour y insérer une redirection permanente (code 301)
Le fichier devrait ressembler à ça :

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
Servername mdp.tokarz.lab
Redirect permanent / https://mdp.tokarz.lab

Ensuite on modifie /etc/apache2/sites-available/default-ssl.conf pour, cette fois, modifier comment le serveur web se comportera face à nos requêtes
On ajoute les lignes suivantes au fichier :

### RATTIC SPECIFIC SETUP
Alias /robots.txt /opt/apps/RatticWeb/static/robots.txt
Alias /favicon.ico /opt/apps/RatticWeb/static/favicon.ico
AliasMatch ^/([^/]*\.css) /opt/apps/RatticWeb/static/styles/$1
Alias /media/ /opt/apps/RatticWeb/media/
Alias /static/ /opt/apps/RatticWeb/static/

<Directory /opt/apps/RatticWeb/static>
Require all granted
</Directory>

<Directory /opt/apps/RatticWeb/media>
Require all granted
</Directory>

WSGIScriptAlias / /opt/apps/RatticWeb/ratticweb/wsgi.py
WSGIPassAuthorization On

WSGIDaemonProcess rattic processes=2 threads=25 home=/opt/apps/RatticWeb/ python-path=/opt/apps/RatticWeb display-name=%{GROUP}
WSGIProcessGroup rattic

<Directory /opt/apps/RatticWeb/ratticweb>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

On n’oublie pas d’activer le virtual host en SSL

a2ensite default-ssl.conf

et on active le module SSL, désactivé par défaut

a2enmod ssl

un petit

service apache2 restart

Et tout devrait rouler, vous devriez pouvoir accéder à http://mdp.domaine.tld (Dans mon cas http://mdp.tokarz.lab) qui vous redirgera en HTTPS et vous affichera l’interface de connexion à Rattic.

Interface de connexion à Rattic

Si la seule chose que vous obtenez est une erreur 400, vérifiez le fichier /opt/apps/RatticWeb/conf/defaults.cfg et modifiez la ligne

hostname = localhost

pour votre nom de domaine.

Dans mon cas pour la VM de labo, j’ai changé pour hostname = mdp.tokarz.lab mais pour ma machine de production, j’ai laissé le nom de domaine interne utilisé par mon infra. De cette manière Rattic n’est accessible QUE par le reverse proxy et spécifiquement sur son adresse interne (Dont le nom est fourni par le serveur DNS local).

 

Vous devriez maintenant pouvoir profiter pleinement de votre nouvelle interface de gestion de mots de passe. A noter que si vous utilisez l’application Keepass pour vos mots de passe, vous pouvez importer votre ficher de mots de passe dans Rattic.

 

Sources :

http://www.fishley.co.za/2015/08/rattic-password-database-on-ubuntu-14-04-with-apache/
https://github.com/tildaslash/RatticWeb/issues/405
https://github.com/csakoda/RatticWeb/commit/6758574e917cde2a9efd42f6cb1312f9819f04ff
http://stackoverflow.com/questions/6504810/how-to-install-lxml-on-ubuntu

Posted in Tutoriaux.

Commentaires

Loading Facebook Comments ...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *