Tag Archives: openldap tutorial

OpenLDAP – Utilisation pour protéger l’accès à un site web

Objectif: Utiliser le serveur d’annuaire OpenLDAP pour protéger l’accès à un site web.  Protéger l’accès revient à n’autoriser qu’un ensemble restreint de personnes à lire le contenu de ce site. Plus concrètement, à chaque demande d’accès au site web, il sera demandé la saisie d’un identifiant et un mot de passe. L’accès n’est autorisé que pour ceux qui sont référencés dans l’annuaire LDAP. Pré-requis: L’article Ajouter des données à l’annuaire ainsi que ses pré-requis sont lus. Le serveur OpenLDAP est installé et alimenté avec les données de l’article.

1. Installer le serveur web apache

Vérifier si ce serveur est installé
sudo service apache2 status
2 Possibilités selon la réponse obtenue:
  1. « * apache2 is running » ou « * apache2 is not running » : Le serveur est installé, passer au paragraphe 2.
  2. « apache2: unrecognized service »: Le serveur n’est pas installé, il faudra le faire.
Installer le serveur:
sudo apt-get install apache2

2. Mettre en place un site web de test

Pour rester simple, on va utiliser le site par défaut. Sauvegarder la page d’entrée de ce site:
sudo mv /var/wwww/index.html /var/www/index.html.orig
Créer une nouvelle page:
vi /var/wwww/index.html
Et saisir puis enregistrer:
 <html>
  <header>
    <title>OpenLDAP tutorial</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </header>
  <body>
    <h6>Site web OpenLDAP tutorial</h6>
  </body>
</html

3. Tester le fonctionnement du site

Dans un navigateur web saisir dans la barre d’adresse: http://localhost puis entrée. Il doit s’afficher une page blanche avec le sous-titre Site web OpenLDAP en haut. Si ce n’est pas le cas, vérifier la configuration du site par défaut car l’installation a été probablement modifiée après l’installation du serveur web.
ls -l /etc/apache2/sites-enabled/
En réponse à cette commande on devrait avoir au moins la ligne: 000-default.conf -> ../sites-available/000-default.conf Et le contenu de ce fichier doit comporter:
<VirtualHost desktop:80>
  ServerName localhost
  DocumentRoot /var/www
  ...
</VirtualHost>
Si ce n’est pas le cas, rectifier puis redémarrer le serveur.

4. Activer et configurer le mod-ldap du serveur apache2

Le mod-ldap est un add-in du serveur web apache2, il est installé mais non activé par défaut sur les systèmes Debian et compatibles. S’il n’est pas installé, il convient de le faire avant toute autre action.
sudo a2enmod authnz_ldap
Après l’activation, il convient de le configurer pour indiquer les paramètres de notre serveur OpenLDAP:
sudo vi /etc/apache2/mods-enabled/ldap.conf
Modifier le contenu pour que ce fichier contienne:
<Location />
  AuthType Basic
  AuthBasicProvider ldap
  AuthName "Saisir identifiant et mot de passe"
  AuthLDAPURL ldap://localhost/ou=People,dc=ldaptuto,dc=net?uid?sub?(objectClass=*)
  Require valid-user
</Location>
Et enfin redémarrer le serveur web pour tenir compte de cette nouvelle configuration:
sudo service apache2 restart

5. Tester le fonctionnement de la nouvelle configuration

Dans un navigateur web saisir dans la barre d’adresse: http://localhost puis entrée. Si tout va bien, une authentification est maintenant requise pour lire la page: OpenLDAP tutorialRemarquer la phrase paramétrée qui s’affiche: Saisir identifiant et mot de passe. Saisir l’identifiant (uid) de Jean Dupond (dupond) et un faux mot de passe (différent de dupond): l’accès est refusé. Saisir le bon mot de passe (dupond), l’accès devrait être autorisé. Si vous avez activé la production des logs du serveur OpenLDAP (voir l’article Activer le Log OpenLDAP), vous pouvez également contrôler l’interaction entre les deux serveurs en examinant le fichier des logs.]]>

OpenLDAP – organisation et types de données

Objectif: Dans ce 5eme article de la série OpenLDAP tutorial, nous allons voir comment ce serveur d’annuaire organise son contenu. Ceci constitue un préalable nécessaire pour pouvoir l’alimenter de données. Une fois cette alimentation faite, le serveur sera prêt pour être utilisé. Les principales utilisations sont: l’authentification d’utilisateurs auprès de systèmes informatiques et la synchronisation de données auprès de ces systèmes (serveurs de messagerie par exemple). L’intérêt de l’utilisation des serveurs LDAP pour ces fonctions est que ce protocole est devenu un standard de fait. Il est supporté par la majorité des systèmes et applications informatiques qui ont ce besoin. Un article à venir traitera l’alimentation effective en données. Pré-requis:

1. L’organisation des données dans un serveur OpenLDAP

Dans un serveur OpenLDAP, les données sont organisées en arbre . Il y a la racine de l’arbre: le DIT (Directory information tree), le tronc de celle-ci. En avançant après le tronc, on rencontre:
  • Des nœuds: données de type spécial qui ont la capacité de contenir d’autres données.
  • Des feuilles: les données proprement dites et qui peuvent être de différents types.
On peut assimiler, par analogie, cette organisation à celle d’un système de fichier sur un disque d’ordinateur. Voici la représentation qu’on obtiendrait du dossier /etc/resolvconf par la commande:
sudo tree /etc/resolvconf
OpenLDAP tutorialEn bleu, les noeuds ou dossiers dans un système de fichier. – En bleu claire et en vert les données proprement dites ou fichiers dans un système de fichier. Pour désigner de manière non ambiguë le fichier dnscache par exemple, on utilise le chemin complet (full qualified name – FQN): /etc/resolvconf/update.d/dnscache. Cela est nécessaire du fait qu’il peut y avoir un autre fichier, qui porte le même nom, quelque part ailleurs sur le disque.   Pour un annuaire LDAP l’équivalent du FQN est le DN (distinguished name) et il constitue le chemin complet depuis la racine (c’est à dire le DIT).

2. Les types de données dans un serveur OpenLDAP

Il existe un très grand nombre de types de données utilisables par le serveur OpenLDAP. De plus ces types de données sont extensibles et évoluent constamment. Dans la pratique il convient de choisir un ensemble restreint de ces types de données en fonction des besoins réels. Cela revient à déclarer dans la configuration du serveur les schémas à embarquer. Un schéma est une description de types de données (métadonnées). Cette commande donne la liste des schémas embarqués par le serveur:
ldapsearch -x -H ldap://localhost -s one -D cn=admin,dc=ldaptuto,dc=net -y pwdAdmin -b cn=schema,cn=config cn -LLL
dn: cn={0}core,cn=schema,cn=config
cn: {0}core

dn: cn={1}cosine,cn=schema,cn=config
cn: {1}cosine

dn: cn={2}nis,cn=schema,cn=config
cn: {2}nis

dn: cn={3}inetorgperson,cn=schema,cn=config
cn: {3}inetorgperson
Le résultat est celui obtenu juste après l’installation d’un serveur OpenLDAP. Ce sont les quatre schémas embarqués par défaut. Ils suffisent pour la plupart des utilisations de base d’un annuaire LDAP.

3. Le contenu par défaut du serveur OpenLDAP

Pour obtenir le contenu entier et réel d’un annuaire OpenLDAP, il faut lancer une requête de recherche en mode connecté avec le compte de l’administrateur du serveur (rootdn). C’est le seul compte qui n’est jamais soumis à aucune restriction d’accès.
ldapsearch -x -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -y pwdAdmin -b dc=ldaptuto,dc=net -LLL
dn: dc=ldaptuto,dc=net
objectClass: top
objectClass: dcObject
objectClass: organization
o: OpenLDAP tutorial
dc: ldaptuto

dn: cn=admin,dc=ldaptuto,dc=net
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9RzlwcjRUdkRJajlWOWpqYjFzMTJkczhaaDBrY2pzOXA=
Le résultat est celui obtenu juste après l’installation d’un serveur OpenLDAP. On reconnaît les valeurs saisies au cours de l’installation (ou la reconfiguration).
  • cn=admin: l’identifiant de l’administrateur du serveur.
  • o=OpenLDAP tutorial: Le nom de l’oganisation.
  • dc=ldaptuto,dc=net: le DIT (nom de domiaine).
  • userPassword: le mot de passe de l’administrateur (crypté).
En tout, il n’y a que deux entrées dans l’arbre de l’annuaire: dc=ldaptuto,dc=net └── cn=admin,dc=ldaptuto,dc=net Ce sont les valeurs de l’attribut objectClass qui déterminent la nature (ou le type) de l’entrée.
  • dc=ldaptuto,dc=net: de type dcObject, c’est le type spécial qui détermine la racine ou le DIT de l’annuaire. Cette entrée est le conteneur de toutes les données de cet annuaire.
  • cn=admin,dc=ldaptuto,dc=net: de type simpleSecurityObject, donnée finale qui représente un compte d’authentification. Contient principalement le mot de passe de ce compte.
]]>

OpenLDAP tutorial (4) – Accès à la configuration dynamique par l'administrateur

Objectif: OpenLDAP tutorial (4) a pour objectif de donner à l’administrateur du serveur OpenLDAP, créé à l’installation, les droits de gérer les données de la configuration. Ceci devrait faciliter la gestion de cette configuration, notamment en ouvrant la possibilité de la modifier à distance. Pré-requis: OpenlDAP est installé et pré-configuré sur une machine Debian, Ubuntu ou compatible. cf. les articles précédents au sujet d’OpenLDAP.

1. Eviter de saisir le mot de passe de l’administrateur à chaque commande

On stocke le mot de passe du super administrateur (ici “admin” à titre d’exemple) dans un fichier:
echo -n "admin" > pwdAdmin
chmod 600 pwdAdmin
Ceci crée le fichier pwdAdmin qui contient le mot de passe du super administrateur. Pour tester son utilisation:
ldapsearch -x -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -y pwdAdmin -b dc=ldaptuto,dc=net
L’intérêt d’utiliser le compte de l’administrateur du serveur au lieu de celui de l’administrateur système de la machine (root) est qu’on peut lancer les commandes à distance (dans ce cas remplacer localhost par le nom de la machine distante).

2. Droits d’accès du super administrateur à la configuration du serveur

La configuration du serveur OpenLDAP se trouve dans la base de données sous le DIT cn=config. Il s’agit de l’équivalent du contenu du fichier de configuration dans l’ancien mode de fonctionnement. Par défaut le super administrateur ne peut pas accéder à cette configuration:
ldapsearch -x -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -y pwdAdmin -b cn=config
Le résultat est vide. On va utiliser les droits étendu de l’utilisateur système root pour donner un droit d’accès à la configuration au super administrateur du serveur OpenLDAP. Créer le fichier LDIF acces-admin.ldif, dont le contenu est :
dn: olcDatabase={0}config,cn=config
changeType: modify
add: olcAccess
olcAccess: to * by dn.exact=cn=admin,dc=ldaptuto,dc=net manage by * break
Exécuter la commande d’ajout de ce fichier sur le serveur:
sudo ldapmodify -Y external -H ldapi:/// -f acces-admin.ldif
Ceci donne les droits de lecture et d’écriture sur toutes les données de la configuration du serveur à l’administrateur (cn=admin,dc=ldaptuto,dc=net). On peut facilement le vérifier en lançant la requête précédente sur ces données et qui n’a retourné aucun résultat.]]>

Activer le Log OpenLDAP

Objectif: Cette 3eme partie de la série OpenLDAP tutorial a pour objectif d’activer le log OpenLDAP. Pour atteindre cet objectif il faut paramétrer l’installation du serveur d’annuaire OpenLDAP. Cette production est très importante, voire indispensable pour la surveillance et l’utilisation correcte de ce serveur. Pré-requis: OpenlDAP est installé et pré-configuré sur une machine Debian, Ubuntu ou compatibles. cf. la partie 1 et la partie 2 de cette série OpenLDAP Tutorial.

1. Activer les fichiers journaux (Log) du serveur OpenLDAP

sudo ldapsearch -Y external -H ldapi:/// -b cn=config "(objectClass=olcGlobal)" olcLogLevel -LLL > slapdlog.ldif
Cette commande crée le fichier slapdlog.ldif dont le contenu est le résultat de la requête LDAP exécutée par l’utilitaire ldapsearch:
dn: cn=config
olcLogLevel: none
La première ligne contient le DN (distinguished name) qui est l’identifiant unique de l’entrée. La deuxième ligne contient l’unique attribut demandée par la requête avec comme valeur: none. La génération de log est désactivée par défaut. Modifier ce fichier pour que son contenu devienne:
dn: cn=config
changeType: modify
replace: olcLogLevel
olcLogLevel: stats
Maintenant ce fihier LDIF (Lightweight data interchange format) contient une commande de modification: la deuxième ligne déclare qu’on veut modifier l’entrée, la troisième indique qu’il s’agit d’un remplacement de contenu de l’attribut olcLogLevel de cette entrée et la troisième indique la nouvelle valeur de cet attribut. stats permet de générer les logs des connexions, des opérations et de leurs résultats ce qui est parfait pour une surveillance quotidienne. Pour exécuter la commande de ce fichier sur le serveur, on utilise:
sudo ldapmodify -Y external -H ldapi:/// -f slapdlog.ldif
Si on obtient le message: modifying entry “cn=config”, l’opération a réussi. Pour vérifier:
sudo ldapsearch -Y external -H ldapi:/// -b cn=config "(objectClass=olcGlobal)" olcLogLevel
Normalement la prise en compte par le serveur est immédiate et aucun redémarrage n’est nécessaire. Le serveur envoi les logs produits au mécanisme de gestion des logs système. Il s’agit de rsyslog pour les versions récentes.

2. Prise en compte des log OpenLDAP par rsyslog

Créer un fichier de configuration dans dans le dossier /etc/rsyslog.d/, choisir un nom quelconque: 10-slapd.conf par exemple. Le chiffre dans le nom permet de classer les fichiers dans ce dossier. Ce fichier contient l’unique ligne:
local4.*    /var/log/slapd.log;slapdtmpl
slapdtmpl est un nom au choix qui désigne un format de présentation du contenu de ce fichier de log. Il s’agit donc de créer ce format, cela se fait dans le fichier de configuration de rsyslog:
sudo vi /etc/rsyslog.conf
Dans l’éditeur ajouter ce qui suit, en dessous de la première ligne à partir du début qui commence par $template:
$template slapdtmpl,"[%$DAY%-%$MONTH%-%$YEAR% %timegenerated:12:19:date-rfc3339%] %app-name% %syslogseverity-text% %msg%\n"
Pour plus de détails sur la créations de format pour rsyslog consulter le manuel:
man rsyslog.conf
Voir, notamment, le paragraphe TEMPLATES. Enfin il faut redémarrer rsyslog pour que le nouveau paramétrage soit pris en compte:
service rsyslog restart

3. Tester cette fonctionnalité du serveur OpenLDAP

Lancer une requête et consulter le contenu du fichier /var/log/slapd.log:
sudo ldapsearch -Y external -H ldapi:/// -b dc=ldaptuto,dc=net
sudo cat /var/log/slapd.log
Normalement, on doit avoir un contenu assez significatif de ce qui a été exécuté par le serveur OpenLDAP.]]>

OpenLDAP tutorial (2) – Modifier les paramètres par défaut

Objectif: Ce 2eme article de la série  «OpenLDAP tutorial» vise à améliorer la configuration basique du serveur vue dans le 1er article. Il s’agit d’une reconfiguration qui permet de personnaliser les paramètres pris par défaut par la procédure d’installation. Cette reconfuguration permet de préparer le servuer à une utilisation dans un environnement réel. Pré-requis: Le serveur OpenLDAP est installé avec sa configuration par défaut. L’installation est supposée faite sur une machine Debian / Ubuntu ou compatibles. L’installation initiale par l’utilitaire apt-get utilise les paramètres systèmes pour effectuer certaines configurations, notamment le DIT de l’annuaire. Ceci peut être reconfiguré. Toutefois cette reconfiguration doit être faite avant toute alimentation du serveur d’annuaire avec des données. La raison est que cette opération réinitialise la base de données et remet son contenu à zéro. Cette reconfiguration se fait avec la commande:

sudo dpkg-reconfigure slapd
Suite à cela une série d’écrans s’affichent l’un après l’autre pour demander de saisir des paramètres ou effectuer des choix.

Reconfiguration d’OpenLDAP – étape 1Reconfiguration d’OpenLDAP – étape 2

Par défaut c’est le nom de domaine configuré pour la machine hôte qui est pris. Saisir le nom de domaine, ceci fixe le DIT de l’annuaire. Ici : dc=ldaptuto,dc=net (pour la saisie de ldaptuto.net).

Reconfiguration d’OpenLDAP – étape 3

Saisir le nom de l’organisation, un libellé rattaché au DIT de l’annuaire. Ne sert que pour l’information.

Reconfiguration d’OpenLDAP – étape 4

Mot de passe de l’administrateur de l’annuaire qui est cn=admin,dc=ldaptuto,dc=net. L’adminstrateur possède tous les droits et n’est soumis à aucune restriction configurée (équivalent de root pour les systèmes unix).

Reconfiguration d’OpenLDAP – étape 5

Le type de base de données à utiliser. OpenLDAP peut fonctionne avec plusieurs types de bases de données dont BDB, HDB et MDB qui sont proposées par la procédure d’installation. MDB est la base de données recommandée. Elle est plus compacte et performante que HDB et BDB. MDB fonctionne sans configuration particulière et permet de renommer un sous ensemble de l’annuaire (un  noeud quelconque) tout comme HDB.

Reconfiguration d’OpenLDAP – étape 6

Comportement à la désinstallation puis la purge du paquet slapd. Choisir si les fichiers des données doivent être supprimés ou non (<Non> est plus prudent, <Oui> est plus efficace).

Reconfiguration d’OpenLDAP – étape 7

Répondre par <Oui>. les fichiers de données seront déplacés de /var/lib/ldap vers /var/backup

Reconfiguration d’OpenLDAP – étape 8

Répondre <Non>, sauf il y a une bonne raison (généralement maintenir une compatibilité avec un système ancien) pour le faire. A la suite de cette étape, le serveur d’annuaire est réinitialisé et redémarré.

Vérifier le nouveau paramétrage

sudo ldapsearch -Y external -H ldapi:///  -b dc=ldaptuto,dc=net ↵

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
# extended LDIF
#
# LDAPv3
# base <dc=ldaptuto,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# ldaptuto.net
dn: dc=ldaptuto,dc=net
objectClass: top
objectClass: dcObject
objectClass: organization
o: OpenLDAP tutorial
dc: ldaptuto

# admin, ldaptuto.net
dn: cn=admin,dc=ldaptuto,dc=net
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2
On remarquera dc=ldaptuto,dc=net et le libellé du DIT o: OpenLDAP tutorial]]>

Openldap tutorial – Installation et configuration de base

« OpenLDAP tutorial », basée sur la pratique. La démarche de l’exposé se fait pas à pas en montrant tous les détails nécessaires au bon fonctionnement final. L’installation exposée comprend une configuration minimale pour un fonctionnement correcte. D’autres articles suivront pour améliorer l’installation sur différents aspects. Il est conseillé de suivre cette serie d’articles dans l’ordre.

  1. Cet article: Installation et configuration de base
  2. Modifier les paramètres par défaut
  3. Activer le Log OpenLDAP
  4. Accès à la configuration dynamique par l’administrateur
  5. Organisation et types de données
  6. Ajouter des données à l’annuaire
  7. Utilisation pour protéger l’accès à un site web
  8. OpenLDAP password policy – gérer les comptes des utilisateurs
Pré-requis: Aucun à propos du serveur OpenLDAP. There is an english version of this series of articles.

Openldap tutorial, étape 1: Configurer correctement l’hôte Debian / Ubuntu.

La procédure d’installation du serveur met en place systématiquement une base de données. Le DIT (équivalent de l’instance pour les bases de données relationnelles) est sélectionné en fonction du nom de domaine de la machine hôte.
hostname -f
Cette commande retourne le nom complet (full) de la machine. Exemple: desktop.meddeb.net. Dans ce cas la base de données aura pour DIT: dc=meddeb,dc=net (la partie droite du nom à partir du 1er point rencontré). Si la configuration ne vous convient pas, il faudrait la modifier (fichier /etc/hostname et /etc/hosts)

Openldap tutorial, étape 2: installer le serveur Openldap sur Debian / Ubuntu.

sudo apt-get purge slapd
sudo apt-get install slapd
La procédure d’installation se lance et demande le mot de passe de l’administrateur du serveur. openldap tutorial, openldap ubuntu, openldap debianEn plus des fichiers binaires exécutables, il est installé dans les dossiers:
  • /usr/lib/ldap/ : librairies des modules (overlay), fichiers binaires natifs
  • /etc/ldap/schema/ : Schémas disponibles par défaut, fichiers texte.
  • /etc/ldap/slap.d/ : Configuration dynamique, fichiers texte.
  • /var/lib/ldap/ : Données, fichiers de la base de données installée.
  • /var/run/slapd/ : Paramètres d’exécution, fichiers texte.

Openldap tutorial, étape 3: installer les utilitaires client de Openldap.

sudo apt-get install ldap-utils
Ceci installe les utilitaires clients Openldap, notamment l’utilitaire d’interrogation ldapsearch. Le fichier de configuration de ces utilitaires /etc/ldap/ldap.conf peut être très utile dans le mesure où il permet de fixer des paramètres par défaut. Cela simplifie l’interaction avec le serveur. Un contenu typique de ce fichier est:
BASE   dc=meddeb,dc=net
URI    ldap://localhost
SIZELIMIT      12
TIMELIMIT      15
DEREF          never
# TLS certificates (needed for GnuTLS)
TLS_CACERT      /etc/ssl/certs/ca-certificates.crt

Openldap tutorial, étape 4: Vérifier l’installation.

slapd -V ↵

@(#) $OpenLDAP: slapd  (Ubuntu) (May 11 2016 16:12:05) $
        buildd@lgw01-10:/build/openldap-mF7Kfq/openldap-2.4.42+dfsg/debian/build/servers/slap
La version du serveur installée est 2.4.42
ldapsearch -Y external  -H ldapi:/// -b cn=config "(objectClass=olcGlobal)" -LLL ↵
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/slapd/slapd.args
olcLogLevel: none
olcPidFile: /var/run/slapd/slapd.pid
olcToolThreads: 1
Ceci donne la partie globale de la configuration mise en place par défaut. On retrouve l’indication des deux fichiers des paramètres d’exécution dans le dossier /var/run/slapd/. On remarquera le paramètre olcLogLevel à none, à modifier impérativement.
sudo ldapsearch -Y external  -H ldapi:/// -b dc=meddeb,dc=net -LLL ↵

ASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: dc=meddeb,dc=net
objectClass: top
objectClass: dcObject
objectClass: organization
o: meddeb.net
dc: meddeb

dn: cn=admin,dc=meddeb,dc=net
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
Ceci donne les deux seules entrées créées dans l’annuaire par défaut:
  • dc=meddeb,dc=net, qui représente le DIT de l’annuaire.
  • cn=admin,dc=meddeb,dc=net, qui est l’administrateur de l’annuaire dont le mot de passe a été saisie au cours de l’installation.
]]>