Pré-requis
Introduction
1 - Installation de la BerkeleyDB
2 - Installation d’OpenSSL
3 - Installation d’OpenLDAP
4 - Paramétrage de syslogd
5 - Configuration d’OpenLDAP
6 - Structure de l’annuaire
7 - Jxplorer
8 - Réplication des données
9 - Restauration de la base de données
Introduction
1 - Installation de la BerkeleyDB
2 - Installation d’OpenSSL
3 - Installation d’OpenLDAP
4 - Paramétrage de syslogd
5 - Configuration d’OpenLDAP
6 - Structure de l’annuaire
7 - Jxplorer
8 - Réplication des données
9 - Restauration de la base de données
10 - Mise en place de scripts pour le lancement automatique des démons
Annexe
Pré-requis :
OpenSSL BerkeleyDB
Introduction
Cette installation a été réalisée une Red Hat Entreprise 9.0. Il est conseillé d’utiliser la dernière version de la BerkeleyDB afin d’éliminer les risques d’incompatibilité.
1 - Installation de la BerkeleyDB
Nous avons utilisé la version 4.2.52. Il suffit de télécharger le fichier en tar.gz et d’entrer les commandes suivantes :
Tar xvzf (afin de décompresser l’archive dans le répertoire) Cd db-4.2.52 Cd build_unix ./configure -> prépare les fichiers nécessaires à la compilation make -> compile les fichiers du programme make install -> exécute les instructions nécessaires à l’installation du programme
2 - Installation d’OpenSSL
Il suffit aussi de télécharger la dernière version d’OpenSSL et de décompresser le fichier .tgz. L’installation se déroule de la manière suivante :
Tar xvzf openssl-0.9.9d.tar.gz Cd openssl-0.9.9d.tar.gz ./configure make make test -> teste le logiciel avant l’installation make install
3 - Installation d’OpenLDAP
Il faut télécharger la dernière version d’OpenLDAP sur www.openldap.org (dans notre cas la version 2.18) et la décompresser pour procéder à l’installation.Tar xvzf openldap.2.18 Cd openldap.2.18 env CPPFLAGS="-I/usr/local/BerkeleyDB.4.2/include/ -I/usr/local/ssl/include/ -I\ /usr/local/include/" LDFLAGS="-L/usr/local/ssl/openssl/ -L/usr/local/BerkeleyDB\ .4.2/lib/ -L/usr/local/lib -L/usr/local/lib/sasl2" LIBS="-lssl -lcrypt -lsasl2"\ ./configure --enable-debug --with-tls --without-cyrus-sasl --enable-bdb make depend -> prépare les dépendances à la compilation make make test make installUne modification s’impose dans le fichier lapd.so.conf
Il faut ajouter la ligne :
/usr/local/db-4.2.52/build_unix/*.libs -> chemin d’accès de la libraire de la base de donnéesOpenLDAP est désormais installé…il serait judicieux d’observer avec attention le lancement du démon slapd afin de pouvoir diagnostiquer les problèmes éventuels.
Nous allons donc paramétrer syslogd afin d’obtenir un fichier de log à chaque démarrage/arrêt du démon.
4 - Paramétrage de syslogd
Le fichier de configuration a pour chemin d’accès :/etc/syslog.conf
Il suffit de rajouter ces deux lignes à la fin du fichier
#Log pour LDAP
local4.* /var/log/ldap.log
Il faut ensuite arrêter le démon syslogd et le relancer…ainsi qu’à chaque modification du fichier de configuration bien sûr.
Pour relancer ce dernier il faut exécuter la commande :
syslogd –h
Syslogd est désormais paramétrer et il ne nous reste plus qu’à modifier le fichier de configuration d’OpenLDAP.
5 - Configuration d’OpenLDAP
Le fichier de configuration d’OpenLDAP est slapd.conf. Dans notre cas, il se trouve dans /usr/local/etc/openldap/.
include /usr/local/etc/openldap/schema/core.schema include /usr/local/etc/openldap/schema/cosine.schema include /usr/local/etc/openldap/schema/inetorgperson.schema include /usr/local/etc/openldap/schema/internet2.schema include /usr/local/etc/openldap/schema/supann.schema include /usr/local/etc/openldap/schema/nis.schemaDans le cadre du projet de déploiement de Supann, nous avons intégrer les schémas internet2 et Supann à l’annuaire.
loglevel -1
Cette annotation permet de logger tous les événements survenus (aussi bien les interrogations de la base que son démarrage).
suffix "dc=example,dc=fr" rootdn "cn=Manager,dc=example,dc=fr"Il faut renseigner le fichier pour le suffixe de l’arborescence et le responsable de la base de données (dans notre cas, c’est Manager).
password-hash {MD5} rootpw {MD5}Afin de sécuriser le mot de passe du responsable de l’annuaire, nous avons crypté ce dernier en MD5.
Afin de crypter celui-ci, il suffit d’exécuter les commandes suivantes afin d’obtenir un prompt qui cryptera le mot de passe que vous taperez :
Slappasswd –c –v –h {MD5}
Afin de renforcer la sécurité de l’annuaire, nous avons utilisé différents certificats de sécurité :
Le premier certificat (ac-serveur.crt) est un certificat de sécurité délivré par le CRU (faisant ici office d’autorité de certification).
TLSCACertificate /usr/local/var/openldap-data/ac-serveur.crt
Nous utilisons un certificat public pour le serveur
TLSCertificateFile /usr/local/var/openldap-data/ldap.exemple.fr.crt
La directive suivante indique le chemin d’accès de la clé qui vérifie l’authenticité du certificat ldap.ensait.fr.crt
TLSCertificateKeyFile /usr/local/var/openldap-data/ldap.exemple.fr.key
Notre serveur est désormais sécurisé, il nous faut désormais ajouter les entrées dans l’annuaire grâce à des fichiers LDIF.
6 - Structure de l’annuaire
Notre service d’annuaire est désormais installé et il faut le lancer. Pour cela, il faut utiliser la commande suivante :/usr/local/libexec/slapd –h « ldaps:/// ldap://127.0.0.1 »
Il faut ensuite rédiger un fichier de structure et l’ajouter à l’annuaire.
Le fichier, creation_ldap.ldif est le suivant :
dn: dc=exemple,dc=fr objectclass: dcObject objectclass: organization o: exemple dc: exemple description: Notre exemple dn: ou=Group,dc=exemple,dc=fr ou: Group objectclass: top objectclass: organizationalUnit description: Groupes des utilisateurs identifies par ldap dn: ou=People,dc=exemple,dc=fr ou: People objectclass: top objectclass: organizationalUnit description: Utilisateurs identifies par ldapIl faut ensuite exécuter la commande suivante afin de l’entrer dans l’annuaire :
ldapadd –x –D « cn=Manager,dc=exemple,dc=fr » -W –f /usr/local/openldap-2-2-18/creation_ldap.ldif
On peut utiliser cette commande pour modifier l’annuaire.
Par exemple, avec le fichier ok.ldif suivant :
dn: uid=essai,ou=People,dc=exemple,dc=fr
changetype: delete
En exécutant, la commande ci-dessous, on supprime l’entrée de l’annuaire.
ldapmodify –x –D « cn=Manager,dc=exemple,dc=fr » -W –f /usr/local/openldap-2-2-18/ok.ldif
On peut désormais utiliser un browser LDAP pour avoir un affichage de la structure de l’annuaire et des entrées de celui-ci.
Nous utiliserons JXplorer.
7 - Jxplorer
Pour commencer, il nous faut indiquer à notre browser LDAP que nous referons au CRU afin de savoir si le serveur LDAP auquel nous nous connectons est valide.Pour cela, nous devons installons le certificat ac-serveur du CRU dans les « Serveurs Trusted et CAs ».
Il faut ensuite renseigner les champs hôte, port, le protocole utilisé, le nom de l’annuaire (base DN) et bien entendu les informations de sécurité (niveau de sécurité, login et password).
Le port 636 est utilisé pour interroger le serveur d’annuaire via une connexion SSL.
8 - Réplication des données
Afin de préparer une architecture de haute disponibilité pour notre service d’annuaire, nous devons déjà assurer la réplication des données selon un modèle maître/esclave.Pour cela, il faut créer un compte de réplication sur les deux serveurs et lui allouer des droits en écriture sur l’annuaire.
Il nous faut pour cela éditer les fichiers de configuration des serveurs de la manière suivante :
Sur le serveur maître :
access to * … by dn="cn=replica,dc=exemple,dc=fr" write … #replication vers le serveur esclave replogfile /var/lib/ldap/replica/replication.log replica host=:389 binddn="cn=replica,dc=exemple,dc=fr" bindmethod=simple credentials=Sur le serveur esclave :
access to * … by dn="cn=replica,dc=exemple,dc=fr" write … #replication depuis le serveur maitre updatedn "cn=replica,dc=exemple,dc=fr" updateref "ldap://:389"Pour vérifier le bon déroulement de la réplication, il est conseillé de lancer slapd sur le serveur maître puis sur le serveur esclave. On peut lancer slurpd sur le serveur maître, dans une session ssh de la manière suivante :
/usr/local/libexec/slurpd –d 65635
Ce niveau de debugging nous permet d’observer tous les événements survenu lors de la réplication (ouverture de socket, écriture,…).
Dans notre cas la réplication s’effectue en clair, le mot de passe est diffusée sur le réseau alors il faut mieux la crypter.
9 - Restauration de la base de données
Il se peut que la base de données soit endommagée après un certain nombre de manipulations, le service slapd ne se lance alors plus.Pour remédier à cela, il convient d’assurer une sauvegarde de cette dernière.
Il faut ensuite exporter la base de données sauvegardée et exécuter un db_recover afin de la restaurer correctement.
10 - Mise en place de scripts pour le lancement automatique des démons
Afin de relancer les démons slapd et slurpd en cas de redémarrage des serveurs, il est nécessaire d’écrire quelques scripts qui nous simplifieront la vie.Sur le serveur maître, il faut placer les scripts slapd et slurpd dans /etc/init.d mais aussi les rendre exécutable grâce à la commande chmod +x slapd.
Votre script est désormais exécutable et il ne reste plus qu’à l’ajouter à la base des services gérée par chkconfig. Pour cela, il faut faire la commande suivante :
chkconfig –add slapd
Vous n’avez plus qu’à faire de même pour le script slapd sur le serveur esclave.
Vous trouverez les deux scripts en annexe.
Annexe
Fichier de configuration slapd.conf# # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. # include /usr/local/etc/openldap/schema/core.schema include /usr/local/etc/openldap/schema/cosine.schema include /usr/local/etc/openldap/schema/inetorgperson.schema include /usr/local/etc/openldap/schema/internet2.schema include /usr/local/etc/openldap/schema/supann.schema include /usr/local/etc/openldap/schema/nis.schema # Define global ACLs to disable default read access. # Do not enable referrals until AFTER you have a working directory # service AND an understanding of referrals. #referral ldap://root.openldap.org pidfile /usr/local/var/run/slapd.pid argsfile /usr/local/var/run/slapd.args loglevel -1 # Load dynamic backend modules: # modulepath /usr/local/libexec/openldap # moduleload back_bdb.la # moduleload back_ldap.la # moduleload back_ldbm.la # moduleload back_passwd.la # moduleload back_shell.la # Sample security restrictions # Require integrity protection (prevent hijacking) # Require 112-bit (3DES or better) encryption for updates # Require 63-bit encryption for simple bind # security ssf=1 update_ssf=112 simple_bind=64 # Sample access control policy: # Root DSE: allow anyone to read it # Subschema (sub)entry DSE: allow anyone to read it # Other DSEs: # Allow self write access # Allow authenticated users read access # Allow anonymous users to authenticate # Directives needed to implement policy: # access to dn.base="" by * read # access to dn.base="cn=Subschema" by * read access to dn.base= by * read access to * by * read # access to * # by self write # by users read # by anonymous auth access to attr=userPassword by self write by anonymous auth # # if no access controls are present, the default policy # allows anyone and everyone to read anything but restricts # updates to rootdn. (e.g., "access to * by * read") # # rootdn can always read and write EVERYTHING! ####################################################################### # BDB database definitions ####################################################################### database bdb suffix "dc=exemple,dc=fr" rootdn "cn=Manager,dc=exemple,dc=fr" # Cleartext passwords, especially for the rootdn, should # be avoid. See slappasswd(8) and slapd.conf(5) for details. # Use of strong authentication encouraged. password-hash {MD5} rootpw {MD5} # The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools. # Mode 700 recommended. directory /usr/local/var/openldap-data # Indices to maintain index objectClass eq TLSCACertificate /usr/local/var/openldap-data/ac-serveur.crt TLSCertificateFile /usr/local/var/openldap-data/ldap.exemple.fr.crt TLSCertificateKeyFile /usr/local/var/openldap-data/ldap.exemple.fr.key #TLSCipherSuite HIGH:MEDIUM:+SSLv2 #TLSVerifyClient neverFichier ajoutdubreu.ldif
dn: uid=essai, ou=People, dc=exemple, dc=fr changetype: add objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson objectClass: supannPerson objectClass: eduPerson sn: Dubreu givenName: Vincent cn: Dubreu Vincent displayName: dudule uid: dubreuv mail: example@exemple.fr userPassword: truc postalAddress: 3 rue marchin$59000 lille preferredLanguage: fr telephoneNumber: +33 3 33 33 33 33 facsimileTelephoneNumber: +33 3 33 33 33 33 mobile: +33 6 33 33 33 33 eduPersonAffiliation: faculty member eduPersonPrimaryAffiliation: faculty eduPersonNickname: nickname eduPersonPrincipalName: example@exemple.fr supannAliasLogin: nickname supannOrganisme: achanger supannCivilite: M. supannRole: RSSI GROUPE-LOGICIEL supannListeRouge: FALSE supannAutreTelephone: +33 3 33 33 33 33 supannAffectation: cuisine supannEmpId: 1234 supannCodeINE: 1234Script bash pour slapd
#!/bin/bash # #description: lancement de slapd #chkconfig: 345 99 0 # #source function library . /etc/init.d/functions case $1 in 'start') [ -f /var/lock/subsys/slapd ] && exit 0 echo -n "lancement de slapd" daemon /usr/local/libexec/slapd -h "ldaps:/// ldap:///" echo touch /var/lock/subsys/slapd ;; 'stop') echo -n "arrêt de slapd" killproc slapd echo rm -f /var/lock/subsys/slapd ;; 'restart') $0 stop $0 start ;; 'status') status slapd ;; *) echo "usage : slapd \ {start|stop|restart|status}" exit 1 ;; esac exit 0Script bash pour slurpd
#!/bin/bash # #description: lancement de slurpd #chkconfig: 345 99 0 # #source function library . /etc/init.d/functions case $1 in 'start') [ -f /var/lock/subsys/slurpd ] && exit 0 echo -n "lancement de slurpd" daemon /usr/local/libexec/slurpd echo touch /var/lock/subsys/slurpd ;; 'stop') echo -n "arrêt de slurpd" killproc slurpd echo rm -f /var/lock/subsys/slurpd ;; 'restart') $0 stop $0 start ;; 'status') status slurpd ;; *) echo "usage : slurpd \ {start|stop|restart|status}" exit 1 ;; esac exit 0
0 commentaires:
Enregistrer un commentaire