Installer un serveur OpenLDAP dans un chroot
Auteur : Olivier BOYER - oboyer () ajoute ! org
—– EN COURS —– A faire : mettre en place TLS/SSL
Mots clés
OpenBSD, OpenLDAP, chroot
Introduction
Ce document décrit l'installation du serveur d'annuaire OpenLDAP dans un environnment à racine déplacé (chroot) sur le système d'exploitation OpenBSD.
Le système d'exploitation OpenBSD est utilisé en version 3.9, et OpenLDAP en version 2.3.11.
Présentation de la maquette
Les éléments suivants vont être mis en oeuvre :
- un système d'exploitation OpenBSD v3.9.
- un serveur d'annuaire OpenLDAP v2.3.11. Ce serveur fonctionnera dans un environnement à racine déplacé. La nouvelle racine est le répertoire
/var/openldap.
La racine de l'annuaire LDAP est calquée sur celle du nom de domaine, ici leaves.org. L'annuaire mis en oeuvre doit permettre d'authentifier les utilisateurs système (ceux du fichier /etc/master.passwd ou des tables NIS). L'administrateur de l'annuaire LDAP est l'utilisateur Manager.
Le nom du serveur d'annuaire est ldap.leaves.org.
Note
Toutes les commandes présentées ici, sont à exécuter, sauf mention contraire, en tant qu'administrateur de la machine.
Pré-requis
Le système d'exploitation OpenBSD doit être installé et fonctionnel.
Installer les ports
Pour installer les produits nécessaires à la maquette, exécutez les commandes suivantes :
# export PKG_PATH="ftp://ftp.de.openbsd.org/unix/OpenBSD/3.9/packages/i386/" # pkg_add cyrus-sasl-2.1.21p2 # pkg_add openldap-client-2.3.11p4 # pkg_add openldap-server-2.3.11p4
Préparer l'arborescence à racine déplacée
Le serveur OpenLDAP fonctionnera dans un environnement à racine déplacé (chroot). La nouvelle racine est fixée au répertoire : /var/openldap. La première étape d'installation consiste à créer la nouvelle arborescence.
Créer la racine de l'arborescence
Exécutez les commandes suivantes :
# mkdir -p /var/openldap # chown root:_openldap /var/openldap
Créer le répertoire des bases
Exécutez les commandes suivantes :
# cd /var/openldap # mkdir -p var/openldap/data/leaves.org # # chown _openldap:wheel var/openldap/data/leaves.org # chmod 750 var/openldap/data/leaves.org
Pour faciliter l'accès aux données, créez le lien symbolique suivant : </code> # ln -s var/openldap/data data </code>
Créer le répertoire des donées d'exécution
Exécutez les commandes suivantes :
# cd /var/openldap # mkdir -p var/run # # chown _openldap:wheel var/run # chmod 750 var/run
Créer le répertoire de configuration
La configuration d'OpenLDAP est située dans le réperoire /etc/openldap. Récréez ce répertoire dans le chroot :
# cd /var/openldap # mkdir -p etc/openldap # # cp -rp /etc/openldap/schema etc/openldap # cp -p /etc/openldap/slapd.conf etc/openldap/ # # cd /etc/openldap # mv slapd.conf slapd.conf.orig # ln -s ../../var/openldap/etc/openldap/slapd.conf slapd.conf
Créer le répertoire des périphériques
Exécutez les commandes suivantes :
# mkdir /var/openldap/dev # cd /var/openldap/dev # # mknod -m 666 null c 2 2 # mknod -m 666 zero c 2 12 # mknod -m 644 arandom c 45 4 # mknod -m 644 prandom c 45 3 # mknod -m 644 random c 45 0 # mknod -m 644 srandom c 45 1 # mknod -m 644 urandom c 45 2
Créer la base des mots de passe
Exécutez les commandes suivantes :
# cp /etc/master.passwd /var/openldap/etc
Supprimez toutes les entrées du fichier master.passwd saut celles des utilisateurs root et _openldap. Pour l'utilisateur root, remplacez :
- son shell par la chaîne
/sbin/nologin, - son mot de passe par le caractère
*
Le fichier final doit être semblable à celui ci-dessous :
root:*:0:0:daemon:0:0:Charlie &:/root:/sbin/nologin _openldap:*:544:544:daemon:0:0:OpenLDAP Account:/nonexistent:/sbin/nologin
Générez la base des mots de passe dans le chroot :
# pwd_mkdb -d /var/openldap/etc /var/openldap/etc/master.passwd # pwd_mkdb -p -d /var/openldap/etc /var/openldap/etc/master.passwd
Copier le fichier de groupe
Exécutez les commandes suivantes :
# cp /etc/group /var/openldap/etc
Supprimez toutes les entrées sauf celles des groupes wheel et _openldap. Le fichier final doit être semblable à celui ci-dessous :
wheel:*:0: _openldap:*:544:
Configurer le serveur ldap
La section précédente a permis de créer la nouvelle racine du serveur LDAP. Il faut maintenant configurer le serveur OpenLDAP.
Générer le mot de passe du Manager
Exécutez la commande suivante :
# slappasswd -s passwordDuManager
{SSHA}/9M2vR5cS09y3BeFVX52+bfjL3XR2GX9
Ce mot de passe crypté doit être copié à l'entrée rootpw du fichier slapd.conf
Configurer le serveur LDAP
Le fichier de configuration du serveur OpenLDAP est slapd.conf. Voir la page de manuel slapd(8) pour plus d'informations.
Le fichier présenté ici permet de migrer l'authentification des utilisateurs système (ceux du fichier /etc/master.passwd ou des tables NIS) vers l'annuaire LDAP.
Les listes de contrôles d'accès (ACL) aux données de l'annuaire présentées ici sont minimales. Pour un annuaire en production, il faut être plus restricitif.
Les chemins d'accès présents dans le fichier suivant sont absolus, par rapport à la nouvelle racine (/var/openldap) du serveur LDAP. Par rapport à la racine réelle du système, il faut donc ajouter le chemin /var/openldap.
Créez comme suit le fichier /var/openldap/etc/openldap/slapd.conf :
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
pidfile /var/run/slapd.pid
argsfile /var/run/slapd.args
# loglevel : 64 (configuration processing)
loglevel 64
## access policies
# DEBUG
access to *
by self write
by dn="cn=Manager,dc=leaves,dc=org" write
by * read
#/DEBUG
#######################################################################
# ldbm database definitions
#######################################################################
#
## leaves.org
#
database ldbm
suffix "dc=leaves,dc=org"
rootdn "cn=Manager,dc=leaves,dc=org"
rootpw {SSHA}/9M2vR5cS09y3BeFVX52+bfjL3XR2GX9
directory /var/openldap/data/leaves.org
mode 0600
# Indices to maintain
index uid eq
index uidNumber eq
index gidNumber eq
index memberUid eq
index homeDirectory eq
index loginShell eq
index cn pres,eq,sub
index sn pres,eq,sub
index objectClass pres,eq
index nisMapName eq
#index amdMapName eq
#index amdMapKey eq
#EOF
Pour faciliter l'accès au fichier de configuration, créez un lien symbolique vers le chroot :
# cd /etc/openldap # mv slapd.conf slapd.conf.orig # ln -s ../../var/openldap/etc/openldap/slapd.conf slapd.conf
Fixer les permissions du fichier slapd.conf
Exécutez les commandes suivantes :
# cd /var/openldap/etc/openldap # chown root:_openldap slapd.conf # chmod 640 slapd.conf
Configurer les clients LDAP
Le fichier /etc/openldap/ldap.conf est le fichier de configuration principal des commandes du package openldap-client. Editez comme suit ce fichier :
#/etc/openldap/ldap.conf # LDAP Defaults # See ldap.conf(5) for details BASE dc=leaves,dc=org URI ldap://ldap.leaves.org #EOF
Fixez les permissions du fichier :
# chown root:wheel /etc/openldap/ldap.conf # chmod 644 /etc/openldap/ldap.conf
Configurer l'accès SSL/TLS
—- PROBLEMES A RESOUDRE —–
Générer et signer le certificat
Pour générer un certificat RSA, exécutez la commande suivante :
# openssl genrsa -out /etc/ssl/private/ldaps.leaves.org.key 1024
L'étape suivante est de générer une Demande de signature de certificat (Certificate Signing Request) qui est utilisé par une autorité de certification (Certifying Authority) pour signer le certificat. Pour ce faire, exécutez la commande suivante :
# openssl req -new -key /etc/ssl/private/ldaps.leaves.org.key \ -out /etc/ssl/private/ldaps.leaves.org.csr You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) []:FR State or Province Name (full name) []:Haute Garonne Locality Name (eg, city) []:Toulouse Organization Name (eg, company) []:Leaves Networks Ltd Organizational Unit Name (eg, section) []:leaves.org Common Name (eg, fully qualified host name) []:ldap.leaves.org Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Ce fichier ldaps.leaves.org.csr peut être donné à une authorité de certification qui va signer la clé. Il et aussi possible de signer la clé sois-même, via la commande suivante :
# openssl x509 -req -days 365 \ -in /etc/ssl/private/ldaps.leaves.org.csr \ -signkey /etc/ssl/private/ldaps.leaves.org.key \ -out /etc/ssl/ldaps.leaves.org.crt Signature ok subject=/C=FR/ST=Haute Garonne/L=Toulouse/O=Leaves Networks Ltd/OU=leaves.org/CN=ldap.leaves.org Getting Private key
Copier le certificat et la clé dans le chroot
Créer l'arborescence dans le chroot
# cd /var/openldap # mkdir -p etc/ssl/private # chown root:_openldap etc/ssl/private # chmod 710 etc/ssl/private
Copier le certificat et la clé
# cd /etc/ssl # cp ldaps.leaves.org.crt /var/openldap/etc/ssl/ # cp private/ldaps.leaves.org.* /var/openldap/etc/ssl/private # # cd /var/openldap/etc/ssl/private # chown root:_openldap ldaps.leaves.org.* # chmod 640 ldaps.leaves.org.*
Modifier le fichier de configuration d'openldap
Ajoutez les lignes suivantes avant la définition des bases LDAP :
## SSL/TLS Configuration TLSCipherSuite HIGH:MEDIUM:+SSLv2 TLSCertificateFile /etc/ssl/ldaps.leaves.org.crt TLSCertificateKeyFile /etc/ssl/private/ldaps.leaves.org.key
Tester que tout fonctionne
Exécutez la commande suivante :
# openssl s_client -connect ldap.leaves.org:636 -showcerts
Tester le fonctionnement du serveur
Démarrer le serveur en mode debug
Exécutez la commande suivante :
# /usr/local/libexec/slapd -r /var/openldap \ -f /etc/openldap/slapd.conf -u _openldap -g _openldap \ -h "ldap:/// ldaps:///" -d 255
Faire une requette
Pour vérifier que tout fonctionne bien, exécutez la commande suivante :
# ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
Vous devez obtenir une réponse comme suit :
# extended LDIF # # LDAPv3 # base <> with scope base # filter: (objectclass=*) # requesting: namingContexts # # dn: namingContexts: dc=leaves,dc=org # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Intégrer le serveur LDAP au système
Maintenant que le serveur fonctionne, il faut configurer le système OpenBSD pourqu'il démarre automatiquement le serveur LDAP, gère ses fichiers d'enregistements et surveille les modifications des fichiers de configuration.
Modifier le fichier /etc/rc.local
Pour lancer automatiquement le serveur LDAP au démarrage de la machine, ajoutez les lignes suivantes au fichier /etc/rc.local :
if [ -x /usr/local/libexec/slapd ] ; then
echo -n ' slapd'
/usr/local/libexec/slapd -r /var/openldap \
-f /etc/openldap/slapd.conf \
-u _openldap -g _openldap \
-h "ldap:/// ldaps:///"
fi
Modifier le fichier /etc/rc.conf.local
Pour que le daemon syslogd enregistre les journaux d'activité du serveur OpenLDAP, il faut modifier comme suit l'entrée syslogd_flags du fichier /etc/rc.conf.local :
syslogd_flags="-a /var/openldap/dev/log"
Modifier le fichier /etc/syslog.conf
Par défaut le daemon slapd(8) utilise la facilité LOCAL4 de syslog pour enregistrer son activité. Pour créer un fichier d'enregistement dédié au daemon slapd(8), ajoutez les lignes suivantes au fichier /etc/syslog.conf
#slapd activities local4.* /var/log/slapd.log
Pour créer le fichier d'enregistrement, procédez comme suit :
# touch /var/log/slapd.log # # chown root:_openldap /var/log/slapd.log # chmod 660 /var/log/slapd.log
Redémarrez le serveur syslogd :
# kill -HUP `cat /var/run/syslog.pid`
Modifier le fichier /etc/newsyslog.conf
Pour que le fichier d'enregistrement d'activité du daemon slpad(8) soit automatiquement archivé toutes les semaines, ajoutez les lignes suivantes au fichier /etc/newsyslog.conf :
/var/log/slapd.log root:wheel 640 7 * 168 Z
Modifier le fichier /etc/changelist
Pour que le système OpenBSD surveille les modifications apportées aux fichiers de configuration du daemon slapd(8), ajoutez les lignes suivantes au fichier /etc/changelist :
/etc/openldap/slapd.conf /etc/openldap/lapd.conf
Gestion des bases
Voici les actions courantes à effectuer sur un serveur LDAP.
Faire une sauvegarde complète
Pour faire une sauvegarde des bases LDAP, qui sont au format ldbm dans la maquette, il faut :
- arrêter le serveur
slapd(8), - faire la sauvegarde des bases,
- redémarrer le serveur
slapd(8).
Procédez comme suit :
Arrêtez le serveur slapd :
# pkill slapd
Faîtes la sauvegarde des bases :
# slapcat -l /tmp/dump-leaves_org.ldif \ -f /etc/openldap/slapd.conf -b "dc=leaves,dc=org"
Enfin, redémarrez le serveur slapd(8), comme indiqué dans le fichier /etc/rc.local.
Restaurer les bases
Pour restaurer une base LDAP, il faut :
- arrêter le serveur
slapd(8), - supprimer les anciens fichiers de bases,
- restaurer la sauvegarde,
- redémarrer le serveur
slapd(8).
Arrêtez le serveur slapd(8) :
# pkill slapd
Effacez les anciennes bases :
# cd /var/openldap/var/openldap/data/leaves.org # rm -f *.dbb
Restaurez les bases sauvegardées :
# slapadd -l /tmp/dump-leaves_org.ldif \ -f /etc/openldap/slapd.conf -b "dc=leaves,dc=org"
Fixez les permissions aux bases restaurées :
# cd /var/openldap/var/openldap/data/leaves.org # chown _openldap:wheel *.dbb # chmod 600 *.dbb
Enfin, redémarrez le serveur slapd(8), comme indiqué dans le fichier /etc/rc.local.
Recréer les indexes
Il peut être nécessaire de recréer les indexes des bases LDAP, notamment, après une modification du fichier de configuration slapd.conf. Procédez comme suit :
# slapindex -f /etc/openldap/slapd.conf \ -b "dc=leaves,dc=org" # # cd /var/openldap/var/openldap/data/leaves.org # chown _openldap *.dbb