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

Liens

Documentation

Outils graphiques de gestion de l'annuaire

 
doc/openbsd/openldap.txt · Dernière modification: 2009/12/23 22:36 (édition externe)     Haut de page