Comment installer et configurer OpenLDAP et phpLDAPadmin sur Ubuntu 16.04

introduction

Le protocole LDAP (Lightweight Directory Access Protocol) est un protocole standard conçu pour gérer et accéder aux informations de répertoire hiérarchiques sur un réseau. Il peut être utilisé pour stocker tout type d’informations, bien qu’il soit le plus souvent utilisé comme système d’authentification centralisé ou pour les annuaires de messagerie et les annuaires professionnels.

Dans ce guide, nous expliquerons comment installer et configurer le serveur OpenLDAP sur Ubuntu 16.04. Nous installerons ensuite phpLDAPadmin, une interface Web permettant de visualiser et de manipuler les informations LDAP. Nous allons sécuriser l’interface Web et le service LDAP avec des certificats SSL de Let’Scrypt, un fournisseur de certificats gratuits et automatisés.

Conditions préalables

Avant de commencer ce tutoriel, vous devez avoir un serveur Ubuntu 16.04 configuré avec Apache et PHP. Vous pouvez suivre notre tutoriel Comment installer Linux, Apache, MySQL, pile PHP (LAMP) sur Ubuntu 16.04, en sautant l’étape 2 car nous n’aurons pas besoin du serveur de base de données MySQL.

De plus, étant donné que nous allons entrer des mots de passe dans l’interface Web, nous devrions sécuriser Apache avec le cryptage SSL. Lisez Comment sécuriser Apache avec Let’s Encrypt sur Ubuntu 16.04 pour télécharger et configurer des certificats SSL gratuits. Vous aurez besoin d’un nom de domaine pour compléter cette étape. Nous utiliserons ces mêmes certificats pour fournir également des connexions LDAP sécurisées.

Étape 1 - Installation et configuration du serveur LDAP

Notre première étape consiste à installer le serveur LDAP et certains utilitaires associés. Heureusement, les paquets dont nous avons besoin sont tous disponibles dans les dépôts par défaut d’Ubuntu.

Connectez-vous à votre serveur. Comme c’est la première fois que nous utilisons + apt-get + dans cette session, nous actualiserons notre index de paquets local, puis installerons les paquets que nous voulons:

sudo apt-get update
sudo apt-get install slapd ldap-utils

Au cours de l’installation, il vous sera demandé de sélectionner et de confirmer un mot de passe administrateur pour LDAP. Vous pouvez entrer n’importe quoi ici, car vous aurez l’occasion de le mettre à jour dans un instant.

Même si nous venons d’installer le paquet, nous allons le reconfigurer. Le paquetage + slapd + a la capacité de poser beaucoup de questions de configuration importantes, mais elles sont ignorées par défaut lors du processus d’installation. Nous avons accès à toutes les invites en demandant à notre système de reconfigurer le package:

sudo dpkg-reconfigure slapd

Il y a pas mal de nouvelles questions à répondre dans ce processus. Nous accepterons la plupart des valeurs par défaut. Passons en revue les questions:

  • Omettre la configuration du serveur OpenLDAP?

  • Nom de domaine DNS?

  • Cette option déterminera la structure de base de votre chemin de répertoire. Lisez le message pour comprendre exactement comment cela sera mis en œuvre. Vous pouvez réellement sélectionner la valeur de votre choix, même si vous ne possédez pas le domaine réel. Cependant, ce tutoriel suppose que vous avez un nom de domaine approprié pour le serveur, vous devriez donc l’utiliser. Nous utiliserons * exemple.com * tout au long du didacticiel.

  • Nom de l’organisation?

  • Pour ce guide, nous utiliserons * exemple * comme nom de notre organisation. Vous pouvez choisir tout ce que vous jugez approprié.

  • Mot de passe administrateur?

  • Base de données?

  • Supprimer la base de données lorsque slapd est purgé?

  • Déplacer l’ancienne base de données?

  • Autoriser le protocole LDAPv2?

À ce stade, votre serveur LDAP est configuré et en cours d’exécution. Ouvrez le port LDAP sur votre pare-feu pour que les clients externes puissent se connecter:

sudo ufw allow ldap

Testons notre connexion LDAP avec + ldapwhoami +, qui devrait renvoyer le nom d’utilisateur avec lequel nous sommes connectés:

ldapwhoami -H ldap:// -x
Outputanonymous

+ anonymous + est le résultat attendu, car nous avons exécuté + ldapwhoami + sans nous connecter au serveur LDAP. Cela signifie que le serveur est en cours d’exécution et répond aux requêtes. Nous allons ensuite configurer une interface Web pour gérer les données LDAP.

Étape 2 - Installation et configuration de l’interface Web phpLDAPadmin

Bien qu’il soit très possible d’administrer LDAP via la ligne de commande, la plupart des utilisateurs trouveront qu’il est plus facile d’utiliser une interface Web. Nous allons installer phpLDAPadmin, une application PHP qui fournit cette fonctionnalité.

Les référentiels Ubuntu contiennent un paquet phpLDAPadmin. Vous pouvez l’installer avec + apt-get:

sudo apt-get install phpldapadmin

Cela installera l’application, activera les configurations Apache nécessaires et rechargera Apache.

Le serveur Web est maintenant configuré pour servir l’application, mais nous devons apporter quelques modifications supplémentaires. Nous devons configurer phpLDAPadmin pour utiliser notre domaine et pour ne pas remplir automatiquement les informations de connexion LDAP.

Commencez par ouvrir le fichier de configuration principal avec les privilèges root dans votre éditeur de texte:

sudo nano /etc/phpldapadmin/config.php

Recherchez la ligne commençant par + $ servers→ setValue ('server', 'name' +. Dans + nano +, vous pouvez rechercher une chaîne en tapant + CTRL-W +, puis la chaîne, puis + ENTER +. Votre curseur sera placé sur la bonne ligne.

Cette ligne est un nom d’affichage pour votre serveur LDAP, que l’interface Web utilise pour les en-têtes et les messages relatifs au serveur. Choisissez quelque chose d’approprié ici:

/etc/phpldapadmin/config.php

$servers->setValue('server','name','');

Ensuite, descendez à la ligne + $ servers→ setValue ('server', 'base' +. Cette configuration indique à phpLDAPadmin quelle est la racine de la hiérarchie LDAP. Ceci est basé sur la valeur que nous avons saisie lors de la reconfiguration du package + slapd +. Dans notre exemple, nous avons sélectionné + example.com + et nous devons le traduire en syntaxe LDAP en plaçant chaque composant de domaine (tout ce qui n’est pas un point) dans une notation + dc = +:

/etc/phpldapadmin/config.php

$servers->setValue('server','base', array(''));

Recherchez maintenant la ligne de configuration + bind_id + de login et commentez-la avec un + # + au début de la ligne:

/etc/phpldapadmin/config.php

$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');

Cette option pré-remplit les informations de connexion de l’administrateur dans l’interface Web. C’est une information que nous ne devrions pas partager si notre page phpLDAPadmin est accessible au public.

La dernière chose que nous devons ajuster est un paramètre qui contrôle la visibilité de certains messages d’avertissement phpLDAPadmin. Par défaut, l’application affichera plusieurs messages d’avertissement concernant les fichiers de modèle. Celles-ci n’ont aucune incidence sur notre utilisation actuelle du logiciel. Nous pouvons les masquer en recherchant le paramètre + hide_template_warning +, en supprimant la mise en commentaire de la ligne qui le contient et en lui attribuant la valeur * true *:

/etc/phpldapadmin/config.php

$config->custom->appearance['hide_template_warning'] = ;

C’est la dernière chose que nous devons ajuster. Enregistrez et fermez le fichier pour terminer. Il n’est pas nécessaire de redémarrer quoi que ce soit pour que les modifications prennent effet.

Ensuite, nous allons nous connecter à phpLDAPadmin.

Étape 3 - Connexion à l’interface Web de phpLDAPadmin

Après avoir apporté les modifications de configuration nécessaires à phpLDAPadmin, nous pouvons maintenant commencer à l’utiliser. Accédez à l’application dans votre navigateur Web. Assurez-vous de remplacer votre domaine par la zone en surbrillance ci-dessous:

https:///phpldapadmin

La page de destination de phpLDAPadmin va se charger. Cliquez sur le lien * login * dans le menu de gauche sur la page. Un formulaire de connexion sera présenté:

image: https: //assets.digitalocean.com/articles/install-openldap/phpldapadmin-login-screen.png [Page de connexion phpLDAPadmin]

Le * DN de connexion * est le nom d’utilisateur que vous utiliserez. Il contient le nom du compte sous la forme d’une section + cn = +, ainsi que le nom de domaine que vous avez sélectionné pour le serveur, divisé en sections + dc = + comme décrit dans les étapes précédentes. Le compte administrateur par défaut que nous avons configuré lors de l’installation s’appelle * admin *. Par conséquent, pour notre exemple, nous tapons ce qui suit:

cn=admin,

Après avoir entré la chaîne appropriée pour votre domaine, tapez le mot de passe administrateur que vous avez créé lors de la configuration, puis cliquez sur le bouton * Authentifier *.

Vous serez dirigé vers l’interface principale:

image: https: //assets.digitalocean.com/articles/install-openldap/phpldapadmin-interface.png [Page principale de phpLDAPadmin]

À ce stade, vous êtes connecté à l’interface phpLDAPadmin. Vous avez la possibilité d’ajouter des utilisateurs, des unités d’organisation, des groupes et des relations.

LDAP est flexible dans la manière dont vous pouvez structurer vos hiérarchies de données et de répertoires. Vous pouvez créer n’importe quel type de structure et définir des règles pour leur interaction.

Comme ce processus est le même sous Ubuntu 16.04 et identique aux versions précédentes, vous pouvez suivre les étapes décrites dans la section Ajouter des unités organisationnelles, des groupes et des utilisateurs de la page https://www.digitalocean.com/community/tutorials/. comment-installer-et-configurer-un-serveur-de-base-ldap-sur-un-ubuntu-12-04-vps # add-unité-organisation-groupes-et-utilisateurs [Article sur l’installation LDAP pour Ubuntu 12.04].

Ces étapes fonctionneront bien avec cette installation de phpLDAPadmin, alors suivez-nous pour vous familiariser avec l’utilisation de l’interface et apprendre à structurer vos données.

Maintenant que nous sommes connectés et que nous nous sommes familiarisés avec l’interface Web, prenons un moment pour renforcer la sécurité de notre serveur LDAP.

Étape 4 - Configuration du cryptage LDAP StartTLS

Bien que notre interface Web soit cryptée, les clients LDAP externes se connectent toujours au serveur et transmettent les informations en texte brut. Utilisons nos certificats SSL Let Encrypt pour ajouter le cryptage à notre serveur LDAP.

Copier les certificats Let’s Encrypt

Le démon + slapd + s’exécutant sous le nom d’utilisateur * openldap *, et les certificats Let’s Encrypt ne peuvent être lus que par l’utilisateur * root *. Nous allons créer un court script qui copiera les certificats dans + / etc / ssl / +, le répertoire système standard des certificats et des clés SSL. Si nous faisons un script pour cela, au lieu de simplement entrer les commandes manuellement, nous devons répéter ce processus automatiquement chaque fois que les certificats Let’s Encrypt sont renouvelés. Nous mettrons à jour ultérieurement le travail + certbot + cron pour l’activer.

Commencez par ouvrir un nouveau fichier texte pour le script shell:

sudo nano /usr/local/bin/renew.sh

Cela ouvrira un fichier texte vierge. Collez dans le script suivant. Veillez à mettre à jour la partie + SITE = + afin de refléter l’emplacement de stockage de vos certificats Let’s Encrypt. Vous pouvez trouver la valeur correcte en listant le répertoire du certificat avec + sudo ls / etc / letsencrypt / live +.

/usr/local/bin/renew.sh

#!/bin/sh

SITE=

# move to the correct let's encrypt directory
cd /etc/letsencrypt/live/$SITE

# copy the files
cp cert.pem /etc/ssl/certs/$SITE.cert.pem
cp fullchain.pem /etc/ssl/certs/$SITE.fullchain.pem
cp privkey.pem /etc/ssl/private/$SITE.privkey.pem

# adjust permissions of the private key
chown :ssl-cert /etc/ssl/private/$SITE.privkey.pem
chmod 640 /etc/ssl/private/$SITE.privkey.pem

# restart slapd to load new certificates
systemctl restart slapd

Ce script se déplace dans le répertoire de certificat Let’s Encrypt, copie les fichiers dans + / etc / ssl +, puis met à jour les autorisations de la clé privée pour la rendre lisible par le groupe * ssl-cert *. Il redémarre également + slapd +, ce qui garantira que les nouveaux certificats sont chargés lorsque ce script est exécuté à partir de notre travail périodique + certbot +.

Enregistrez et fermez le fichier, puis rendez-le exécutable:

sudo chmod u+x /usr/local/bin/renew.sh

Ensuite, lancez le script avec + sudo +:

sudo /usr/local/bin/renew.sh

Vérifiez que le script a fonctionné en listant les nouveaux fichiers dans + / etc / ssl +:

sudo su -c 'ls -al /etc/ssl/{certs,private}/*'

La commande + sudo + ci-dessus est un peu différente de la normale. La partie + su -c '' + englobe l’intégralité de la commande + ls + dans un shell * root * avant de l’exécuter. Si nous ne le faisions pas, l’extension de nom de fichier générique + * + s’exécuterait avec les autorisations de votre utilisateur non-sudo, et elle échouerait car + / etc / ssl / private + ne serait pas lisible par votre utilisateur.

+ ls + affichera des détails sur les trois fichiers. Vérifiez que la propriété et les autorisations semblent correctes:

Output-rw-r--r-- 1 root root     1793 May 31 13:58 /etc/ssl/certs/.cert.pem
-rw-r--r-- 1 root root     3440 May 31 13:58 /etc/ssl/certs/.fullchain.pem
-rw-r----- 1 root ssl-cert 1704 May 31 13:58 /etc/ssl/private/.privkey.pem

Ensuite, nous allons automatiser cela avec + certbot +.

Mise à jour du travail périodique de renouvellement de Certbot

Nous devons mettre à jour votre travail cron + certbot pour exécuter ce script chaque fois que les certificats sont mis à jour:

sudo crontab -e

Vous devriez déjà avoir une ligne + certbot renew +. Ajoutez la partie en surbrillance ci-dessous:

crontab

15 3 * * * /usr/bin/certbot renew --quiet

Enregistrez et fermez la crontab. Désormais, chaque fois que + certbot + renouvellera les certificats, notre script sera exécuté pour copier les fichiers, ajuster les autorisations et redémarrer le serveur + slapd +.

Configuration de slapd pour offrir des connexions sécurisées

Nous devons ajouter l’utilisateur * openldap * au groupe * ssl-cert * afin que + slapd + puisse lire la clé privée:

sudo usermod -aG ssl-cert openldap

Redémarrez + slapd + pour qu’il récupère le nouveau groupe:

sudo systemctl restart slapd

Enfin, nous devons configurer + slapd + pour utiliser réellement ces certificats et clés. Pour ce faire, nous plaçons toutes nos modifications de configuration dans un fichier LDIF (format d’échange de données LDAP), puis nous les chargeons sur notre serveur LDAP à l’aide de la commande + ldapmodify +.

Ouvrez un nouveau fichier LDIF:

cd ~
nano ssl.ldif

Cela ouvrira un fichier vierge. Collez les éléments suivants dans le fichier, en mettant à jour les noms de fichiers pour refléter votre domaine:

ssl.ldif

dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/.fullchain.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/.cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/.privkey.pem

Enregistrez et fermez le fichier, puis appliquez les modifications avec + ldapmodify +:

sudo ldapmodify -H ldapi:// -Y EXTERNAL -f ssl.ldif
OutputSASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

Nous n’avons pas besoin de recharger + slapd + pour charger les nouveaux certificats, cela s’est fait automatiquement lorsque nous avons mis à jour la configuration avec + ldapmodify +. Exécutez la commande + ldapwhoami + une fois de plus, pour vérifier. Cette fois, nous devons utiliser le bon nom d’hôte et ajouter l’option + -ZZ + pour forcer une connexion sécurisée:

ldapwhoami -H ldap:// -x -ZZ

Nous avons besoin du nom d’hôte complet lorsque vous utilisez une connexion sécurisée, car le client vérifie que le nom d’hôte correspond au nom d’hôte indiqué sur le certificat. Cela empêche les attaques d’interception dans lesquelles un attaquant pourrait intercepter votre connexion et emprunter l’identité de votre serveur.

La commande + ldapwhoami + devrait renvoyer + anonymous +, sans erreur. Nous avons réussi à chiffrer notre connexion LDAP.

Conclusion

Dans ce tutoriel, nous avons installé et configuré le serveur OpenLDAP + slapd +, ainsi que l’interface Web LDAP phpLDAPadmin. Nous avons également configuré le chiffrement sur les deux serveurs et mis à jour + certbot + pour gérer automatiquement le processus de renouvellement du certificat de Let cryptons de + slapd +.

Le système que nous avons configuré est assez flexible et vous pourrez concevoir votre propre schéma d’organisation et gérer des groupes de ressources en fonction de vos besoins. Pour plus d’informations sur la gestion de LDAP, y compris davantage d’outils et de techniques en ligne de commande, consultez notre tutoriel https://www.digitalocean.com/community/tutorials/how-to-manage-and-use-ldap-servers-with-openldap- utilitaires [Comment gérer et utiliser les serveurs LDAP avec les utilitaires OpenLDAP]. Pour obtenir des informations plus détaillées sur la sécurisation d’un serveur LDAP, y compris sur la façon de forcer tous les clients à utiliser des connexions sécurisées, consultez la page https://www.digitalocean.com/community/tutorials/how-tencrypt-openldap-connections-using- starttls [Comment chiffrer les connexions OpenLDAP en utilisant STARTTLS].