LLdap - Serveur virtuel d'authentification (VM+Docker)
LLDAP : Light LDAP est un serveur d’authentification léger qui fournit une interface LDAP simplifiée.
Authelia & lldap : authentification, SSO, gestion des utilisateurs et réinitialisation de mot de passe pour les réseaux domestiques
https://github.com/lldap/lldap
Liens
- Authelia & lldap: Authentication, SSO, User Management & Password Reset for Home Networks
- Installation et configuration de LLDAP et Authelia pour limiter l’accès à l’application web Lufi
- lldap - Light LDAP implementation for authentication
Machine virtuelle
Création rapide machine virtuelle KVM debian 12 nocloud
Adresse IP
1
ip a
1
2
3
4
5
6
7
8
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:a1:29:e1 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.218/24 brd 192.168.0.255 scope global enp1s0
valid_lft forever preferred_lft forever
inet6 2a01:e0a:9c8:2080:5054:ff:fea1:29e1/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 86054sec preferred_lft 86054sec
inet6 fe80::5054:ff:fea1:29e1/64 scope link
valid_lft forever preferred_lft forever
Modifier motd , /etc/motd
1
2
3
4
5
6
7
8
_ _ ___ _ ___ ___
| | | | | \ /_\ | _ \ / __| ___ _ _ __ __ ___ _ _
| |__ | |__ | |) |/ _ \ | _/ \__ \/ -_)| '_|\ V // -_)| '_|
|____||____||___//_/ \_\|_| |___/\___||_| \_/ \___||_|
_ ___ ___ _ __ ___ __ ___ _ ___
/ |/ _ \|_ ) / | / / ( _ ) / \ |_ )/ |( _ )
| |\_, / / / _ | |/ _ \/ _ \ _| () |_ / / | |/ _ \
|_| /_/ /___|(_)|_|\___/\___/(_)\__/(_)/___||_|\___/
Docker
Installer Docker CE (Community Edition) sur Debian
LLDAP
LLdap est un serveur d’authentification léger qui fournit une interface LDAP simplifiée pour l’authentification. Il s’intègre avec de nombreux backends, de KeyCloak à Authelia en passant par Nextcloud et plus !
Il s’accompagne d’une interface qui facilite la gestion des utilisateurs et leur permet de de modifier leurs coordonnées ou de réinitialiser leur mot de passe par courrier électronique.
Ce serveur est un système de gestion des utilisateurs qui est :
- simple à mettre en place (pas de problème avec
slapd
), - simple à gérer (interface web conviviale),
- peu de ressources,
- avec des valeurs de base par défaut pour que vous n’ayez pas à comprendre les les subtilités de LDAP.
Il cible principalement les serveurs auto-hébergés, avec des composants open-source comme
comme Nextcloud, Airsonic et ainsi de suite, qui ne supportent que LDAP comme source d’authentification externe.
Pour plus de fonctionnalités (support OAuth/OpenID, reverse proxy, …) vous pouvez installer
d’autres composants (KeyCloak, Authelia, …) utilisant ce serveur comme source de
vérification pour les utilisateurs, via LDAP.
Par défaut, les données sont stockées dans SQLite, mais vous pouvez remplacer le backend par MySQL/MariaDB ou PostgreSQL.
Configuration LLDAP
Création des fichiers et des dossiers :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cd $HOME
sudo mkdir /srv/lldap/
sudo chown $USER:$USER /srv/lldap/
mkdir -p /srv/lldap/{secrets,data}
mkdir -p /srv/lldap/data/ssl
cd /srv/lldap/
## Génération du jeton JWT_SECRET
tr -cd '[:alnum:]' < /dev/urandom | fold -w "64" | head -n 1 > ./secrets/JWT_SECRET
## Génération du mot de passe admin LDAP
tr -cd '[:alnum:]' < /dev/urandom | fold -w "20" | head -n 1 > ./secrets/LDAP_USER_PASS
## Génération du certificat et de la clé privée pour LDAPS
## Common Name (e.g. server FQDN or YOUR name) []:lldap.rnmkcy.eu
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout ./data/ssl/keyfile.key -out ./data/ssl/certfile.crt
## Sécurisation des fichiers sensibles
chmod 600 ./secrets/*
chmod 600 ./data/ssl/*
Configuration de LLDAP
1
nano ./data/lldap_config.toml
1
2
database_url = "sqlite:///data/users.db?mode=rwc"
key_file = "/data/private_key"
Configuration des variables d’env
1
nano container-vars.env
1
2
3
4
5
6
7
8
9
10
11
12
13
14
LLDAP_LDAP_BASE_DN=dc=lldap,dc=rnmkcy,dc=eu
TZ=Europe/Paris
UID=1000
GID=1000
# If using LDAPS, set enabled true and configure cert and key path
LLDAP_LDAPS_OPTIONS__ENABLED=true
LLDAP_LDAPS_OPTIONS__CERT_FILE=/data/ssl/certfile.crt
LLDAP_LDAPS_OPTIONS__KEY_FILE=/data/ssl/keyfile.key
# Secrets: lldap reads them from the specified files.
# This way, the secrets are not part of any process' environment.
LLDAP_JWT_SECRET_FILE=/secrets/JWT_SECRET
LLDAP_LDAP_USER_PASS_FILE=/secrets/LDAP_USER_PASS
Docker LLDAP
docker
- Vous pouvez utiliser l’image la plus récente
:latest
ou:stable
utilisée dans cet exemple. - Si UID et GID non définis LLDAP utilisera par défaut le numéro 1000 pour UID et GID
- Si aucun TZ n’est défini, le fuseau horaire UTC sera utilisé.
- Vous pouvez générer les secrets en utilisant le script
./generate_secrets.sh
Configuration du docker-compose.yml
1
nano docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: "3"
services:
lldap:
container_name: lldap
image: nitnelave/lldap:stable
ports:
# For LDAP
- "3890:3890"
# For LDAPS (LDAP Over SSL), enable port if LLDAP_LDAPS_OPTIONS__ENABLED set true, look env below
- "6360:6360"
# For the web front-end
- "17170:17170"
volumes:
- ./data:/data
- ./secrets:/secrets
env_file:
- container-vars.env
restart: unless-stopped
Lancez le conteneur
1
docker compose up -d
Vérifier docker compose ps
1
2
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
lldap nitnelave/lldap:stable "tini -- /docker-ent…" lldap About an hour ago Up 53 minutes (healthy) 0.0.0.0:3890->3890/tcp, :::3890->3890/tcp, 0.0.0.0:6360->6360/tcp, :::6360->6360/tcp, 0.0.0.0:17170->17170/tcp, :::17170->17170/tcp
Structure finale
Interface web de gestion
Se connecter à l’interface web de gestion http://192.168.0.218:17170/ (bien évidemment en prod, on mettra le chiffrement en place ou un proxy).
Le compte par défaut est admin et le mot de passe est contenu dans le fichier “/srv/lldap/secrets/LDAP_USER_PASS”.
Vous pouvez créer/gérer les groupes et les utilisateurs.
Note : par défaut on utilise une base Sqlite mais il est possible de migrer plus tard vers MySQL/MariaDB ou PostgreSQL
Ldap cli
Accès aux informations de l’annuaire en ligne de commande
Installer les outils ldap
1
sudo apt install ldap-utils
Afficher les données de l’annuaire
1
2
3
4
5
6
7
8
# IPV4
ldapsearch -H ldap://127.0.0.1:3890 -LLL -D "uid=admin,ou=people,dc=rnmkcy,dc=eu" \
-w '<admin_password>' -b "ou=people,dc=rnmkcy,dc=eu"
# IPV6
ldapsearch -H ldap://[2a01:e0a:9c8:2080:5054:ff:fea1:29e1]:3890 \
-LLL -D "uid=admin,ou=people,dc=rnmkcy,dc=eu" \
-w '<admin_password>' -b "ou=people,dc=rnmkcy,dc=eu"
Résultat commande
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
dn: uid=admin,ou=people,dc=rnmkcy,dc=eu
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: mailAccount
objectclass: person
uid: admin
cn: Administrator
createtimestamp: 2024-03-05T14:12:09.880825287+00:00
entryuuid: 22e95ce8-c4c8-3726-a708-abf8eab7fab7
dn: uid=yann,ou=people,dc=rnmkcy,dc=eu
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: mailAccount
objectclass: person
uid: yann
mail: yann@cinay.eu
cn: Second admin
createtimestamp: 2024-03-05T14:29:18.503605447+00:00
entryuuid: 5afdc712-b11f-305a-948f-195fa036d5a5
Clients LLdap
lldap - Client configuration
lldap - Light LDAP implementation for authentication
Les configurations clientes utilisées
Calibre Web
Nextcloud LLDAP
Mise en place dans nextcloud (méthode graphique)
Préalable sur debian, installer ldap suivant version php
1
sudo apt install php8.2-ldap