Installation sur Debian 8, 9 ou 10

Les paragraphes suivant expliquent comment installer et faire tourner PaSSHport sur Debian 8 (Jessie), 9 (Stretch) ou 10 (Buster). On part d'une installation de minimal de Debian (disponible ici), avec les paquets openssh-server et curl installés.

La manière simple, et automatisée

Le script d'installation est disponible pour relecture ici.

Vous pouvez le lancer directement depuis la ligne de commande (assurez-vous une fois de plus que curl est bien installé : apt install curl ):

root@debian:~# bash <(curl -s https://raw.githubusercontent.com/librit/passhport/master/tools/passhport-install-script-debian.sh)

Une fois l'installation terminée, rendez-vous au chapitre Première configuration.

La manière longue, manuelle

Si vous voulez comprendre ce qui se passe sur votre système, quand vous installez PaSSHport, suivez les instruction suivantes, qui sont (grossièrement) les commandes, une à une, du script d'installation automatisé sus-mentionné.

Tout d'abord, on update les dépots :

root@debian:~# apt update

On installe python3-pip, et d'autre packages dont nous aurons besoin plus tard pour ce tuto (il y a environ 100Mo à récupérer sur les dépôts, donc soyer patient) :

root@debian:~# apt install python3-pip git openssl virtualenv libpython3-dev

Ensuite, nous aurons besoin d'ajouter un utilisateur appelé « passhport », et exécuter quelques commande en tant que lui :

root@debian:~# useradd --home-dir /home/passhport --shell /bin/bash --create-home passhport
root@debian:~# su - passhport
passhport@debian:~$

On récupère les sources de PaSSHport sur github :

passhport@debian:~$ git clone http://github.com/LibrIT/passhport.git
Clonage dans 'passhport'...
remote: Counting objects: 2713, done.
remote: Compressing objects: 100% (50/50), done.
remote: Total 2713 (delta 19), reused 0 (delta 0), pack-reused 2661
Réception d'objets: 100% (2713/2713), 482.76 KiB | 396.00 KiB/s, fait.
Résolution des deltas: 100% (1633/1633), fait.
passhport@debian:~$

On crée un environnement «virtuel-env» pour cette utilisateur passhport :

passhport@debian:~$ virtualenv -p python3 passhport-run-env

Maintenant que nous avons notre «virtual-env», on installe les modules python nécessaires au fonctionnement de PaSSHport :

passhport@debian:~$ /home/passhport/passhport-run-env/bin/pip install -r /home/passhport/passhport/requirements.txt

Commençons les choses sérieuses…

PaSSHport a besoin d'écrire des logs, il faut donc créer un répertoire dans «/var/log», et en attribuer la propriété à l'utilisateur «passhport» :

root@debian:~# mkdir -p /var/log/passhport/
root@debian:~# chown passhport:passhport /var/log/passhport/

On crée aussi le répertoire qui contiendra la configuration, et on copie les différents fichiers de configuration dedans :

root@debian:~# mkdir /etc/passhport
root@debian:~# cp /home/passhport/passhport/passhport/passhport.ini /etc/passhport/.
root@debian:~# cp /home/passhport/passhport/passhport-admin/passhport-admin.ini /etc/passhport/.
root@debian:~# cp /home/passhport/passhport/passhportd/passhportd.ini /etc/passhport/.

Nous devons faire quelques modifications dans ces fichiers de configurations, surtout si on souhaite séparer les composants sur différentes machines. On remplace ici l'adresse d'écoute par défaut (localhost), avec la vrai IP du serveur.

D'abord passhportd :

root@debian:~# vim /etc/passhport/passhportd.ini

On change la directive « LISTENING_IP », par l'adresse IP du serveur :

# Passhportd configuration file. You should copy it to
# /etc/passhport/passhportd.ini if you want to do modifications
[SSL]
SSL = True
SSL_CERTIFICAT = /home/passhport/certs/cert.pem
SSL_KEY = /home/passhport/certs/key.pem

[Network]
LISTENING_IP = 192.168.122.56
PORT = 5000

[Database]
SQLALCHEMY_TRACK_MODIFICATIONS = True
SQLALCHEMY_DATABASE_DIR = /var/lib/passhport/
SQLALCHEMY_MIGRATE_REPO = /var/lib/passhport/db_repository
# For SQLite
SQLALCHEMY_DATABASE_URI = sqlite:////var/lib/passhport/app.db

[Environment]
# SSH Keyfile path
SSH_KEY_FILE = /home/passhport/.ssh/authorized_keys
# Python and passhport paths
PASSHPORT_PATH = /home/passhport/passhport/passhport/passhport
PYTHON_PATH = /home/passhport/passhport-run-env/bin/python3

On change le paramètre suivante dans /etc/passhport/passhport.ini et /etc/passhport/passhport-admin.ini :

PASSHPORTD_HOSTNAME = 192.168.122.56

Nous aurons besoin d'une clef SSH. On en génère donc une RSA de 4096 bits (la taille de la clef peut être plus grande) :

root@debian:~# su - passhport
passhport@debian:~$ ssh-keygen -t rsa -b 4096 -N "" -f "/home/passhport/.ssh/id_rsa"
Generating public/private rsa key pair.
Your identification has been saved in /home/passhport/.ssh/id_rsa.
Your public key has been saved in /home/passhport/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:0o6jkepqr2Phz0AKmLGRZh6PeVexP2gf5CGNPd+ksQ passhport@debian
The key's randomart image is:
+---[RSA 4096]----+
| .    ....       |
|oo . o .+ +      |
|* + o ...= *     |
|.O   o oo + E    |
|=.    LibrIT .   |
|+.   .Rocks = .  |
|o.. o o .  . o   |
| =o. o .         |
|++B+.            |
+----[SHA256]-----+
passhport@debian:~$

Cette clé sera utilisé par passhport pour se connecter aux différents serveurs. On peut aussi générer une clef ECDSA si on veut :

passhport@debian:~$ ssh-keygen -t ecdsa -b 521 -N "" -f "/home/passhport/.ssh/id_ecdsa"

Une fois encore en tant que root, on crée le répertoire qui contiendra la base de données (parce qu'on utilise SQLite pour ce tuto) :

root@debian:~# mkdir -p /var/lib/passhport
root@debian:~# chown -R passhport:passhport /var/lib/passhport/

… on a alors 3 paramètres à changer dans le fichier de conf de passhportd (en tant que root, on édite «/etc/passhport/passhportd.ini») :

SQLALCHEMY_DATABASE_DIR        = /var/lib/passhport/
SQLALCHEMY_MIGRATE_REPO        = /var/lib/passhport/db_repository
SQLALCHEMY_DATABASE_URI        = sqlite:////var/lib/passhport/app.db

On peut maintenant créer la base de données, et vérifier que celle-ci a été correctement créé :

root@debian:~# su - passhport
passhport@debian:~$ /home/passhport/passhport-run-env/bin/python /home/passhport/passhport/passhportd/db_create.py
passhport@debian:~$ ls -la /var/lib/passhport/
total 172
drwxr-xr-x  3 passhport passhport   4096 févr. 28 16:10 .
drwxr-xr-x 25 root      root        4096 févr. 28 15:37 ..
-rw-r--r--  1 passhport passhport 159744 févr. 28 16:10 app.db
drwxr-xr-x  4 passhport passhport   4096 févr. 28 16:10 db_repository
passhport@debian:~$

On va maintenant créer un certificat pour sécuriser les échanges avec l'API. D'abord, on crée le répertoire dans lequel se trouveront la clé privée et le certificat. Il faut aussi attribué les droits rwx à l'utilisateur «passhport» seulement :

passhport@debian:~$ mkdir /home/passhport/certs
passhport@debian:~$ chmod 700 /home/passhport/certs

On crée la clé RSA :

[passhport@centos-7 ~]$ openssl genrsa -out "/home/passhport/certs/key.pem" 4096

Il y a un fichier de configuration pour OpenSSL fourni avec les sources de PaSSHport, pour générer un certificat minimal SSL correcte. Le fichier est :

/home/passhport/passhport/tools/openssl-for-passhportd.cnf

On l'édite, et on ajoute de nom DNS dont on se servira pour joindre l'API. Pour ce tuto, on utilisera deux noms d'hôtes :

[req]
distinguished_name      = req_distinguished_name
req_extensions          = v3_req
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid:always,issuer

[v3_req]
subjectAltName          = @alternate_names
basicConstraints        = CA:TRUE
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid:always,issuer

[req_distinguished_name]

[ alternate_names ]
DNS.1 = 127.0.0.1
DNS.2 = localhost
DNS.3 = passhport.librit.fr
DNS.4 = entry.passhport.org

On génère le certificat avec la commande suivante (on peut faire un copié/collé des lignes suivantes). Par contre, il faut bien entendu adapter la ligne du sujet (-subj) à votre installation :

openssl req -new -key "/home/passhport/certs/key.pem" \
-config "/home/passhport/passhport/tools/openssl-for-passhportd.cnf" \
-out "/home/passhport/certs/cert.pem" \
-subj "/C=FR/ST=Ile De France/L=Ivry sur Seine/O=LibrIT/OU=DSI/CN=passhport.librit.fr" \
-x509 -days 365 -sha256 \
-extensions v3_req

Une fois exécuté, vous aurez un certificat à côté d'une clé :

passhport@debian:~$ ls -la /home/passhport/certs/
total 16
drwx------ 2 passhport passhport 4096 févr. 28 18:00 .
drwxr-xr-x 8 passhport passhport 4096 févr. 28 17:46 ..
-rw-r--r-- 1 passhport passhport 2171 févr. 28 18:00 cert.pem
-rw------- 1 passhport passhport 3243 févr. 28 16:11 key.pem
passhport@debian:~$

En tant que root, on crée deux liens symboliques vers les deux principaux, passhportd et passhport-admin, pour ne plus avoir à besoin de taper les chemin complet :

root@debian:~# ln -s /home/passhport/passhport/tools/passhportd.sh /usr/bin/passhportd
root@debian:~# ln -s /home/passhport/passhport/tools/passhport-admin.sh /usr/bin/passhport-admin

On peut créer un service systemd, et activer passhportd au démarrage :

root@debian:~# cp /home/passhport/passhport/tools/passhportd.service /etc/systemd/system/passhportd.service
root@debian:~# systemctl daemon-reload
root@debian:~# systemctl enable passhportd

Il n'y a plus qu'à démarrer le démon passhportd :

root@debian:~# systemctl start passhportd

On peut maintenant vérifier que passhportd tourne correctement, en "curlant" l'IP qu'on a précédemment configurée dans /etc/passhport/passhportd.ini, sur le port 5000 :

root@debian:~# curl -s --insecure https://192.168.122.56:5000
passhportd is running, gratz!
root@debian:~#

Well done ! Vous avez installé PaSSHport. Vous pouvez maintenant lire le chapitre Première utilisation.