===== implementation Glue ldap Groupe d'etablissements =====
==== principes ====
maquette d'implementation d'un annuaire faisant la "glue" entre les annuaires d'etablissements via le backend ldap (proxy ldap) et l'overlay Rewrite .
basé sur un exemple de TP d'enseignement à Evry de M.Gardie: [[http://www-public.int-evry.fr/~gardie/LDAP/Scenarios/ldap-complexe.html|http://www-public.int-evry.fr/~gardie/LDAP/Scenarios/ldap-complexe.html]]
Le principe est de disposer d'un proxy (coquille vide, pas de data locale) serveur qui se charge de relayer les requetes ldap vers les serveurs ldap rééls de chaque ecoles declaré dans ce serveur proxy (recherche sequentielle vers les N serveurs).
il a aussi une fonction de "rewrite" de la racine / base ldap afin que tout le monde apparaisse sous la racine virtuelle dc=mines-telecom,dc=fr .
{{:group:dsi:infra:systemes:ldap:ziann-principe-base.png|}}
===== configurations =====
==== Serveur ====
* le serveur d'exemple sera ldapmintel.tem-tsp.eu
* le base DN est dc=mines-telecom,dc=fr
* il est accessible en ldaps
* binddn (compte d'acces) cn=mintel,dc=mines-telecom,dc=fr
==== Client ldap ====
exemple de requete
# ldapsearch -x "cn=bernar*" -H ldaps://ldapmintel.tem-tsp.eu -b dc=mines-telecom,dc=fr cn -D 'cn=mintel,dc=mines-telecom,dc=fr' -W
pour l'acces en ldaps (seul port 636 ouvert depuis le firewall) , il faut disposer dans la configuration du client un poiteur vers le certificat racine TCS/DigiCert
exemple sous linux pour ldapsearch :
# cat /etc/openldap/ldap.conf
TLS_CACERT /etc/pki/tls/certs/DigiCert-ca.crt
==== slapd.conf generalité ====
#chargement du module rewrite
modulepath /usr/lib/openldap
moduleload rwm.la
#default searchbase sur le domaine aggregat "mines-telecom.fr"
defaultsearchbase dc=mines-telecom,dc=fr
#database config propre a la version OP 2.4
database config
rootdn "cn=admin,cn=config"
rootpw secret
#ACL config
access to dn.subtree="cn=config"
by users none
by anonymous none
==== slapd.conf backend ldap ====
#database
database ldap
# le suffixe ci-dessous reprénte le dn virtuel de la base.
#(on peut mettre ce qu'on veut, mais faut changer dans les règles de rériture plus bas
# et dans la definition du suffixe par défaut.)
suffix "ou=people,dc=int-evry,dc=fr"
#on va taper sur le replica ldapze
uri "ldap://ldapze.int.fr"
#ACL Evry
# crée supplémentaire pour masquer (aux anonymes) l'adresse mail
access to dn.subtree="ou=people,dc=int,dc=fr"
attrs=entry,mail,title,sn,cn,telephoneNumber,ou,departmentNumber,labeleduri,o
by users read
by anonymous none
# nécessaire si on veut voir le reste.
access to dn.subtree="ou=people,dc=int,dc=fr"
attrs=entry,sn
by users read
by anonymous read
===== slapd.conf relay =====
==== Partie Relay / Rewrite pour Evry ====
#RELAY
database relay
suffix ou=evry,dc=mines-telecom,dc=fr
relay ou=people,dc=int,dc=fr
subordinate
overlay rwm
rwm-rewriteEngine on
rwm-rewriteContext default
rwm-rewriteRule "(.+)?ou=evry,dc=mines-telecom,dc=fr$" "$1ou=people,dc=int,dc=fr" ":"
rwm-rewriteContext searchEntryDN
rwm-rewriteRule "(.+)?ou=people,dc=int,dc=fr$" "$1ou=evry,dc=mines-telecom,dc=fr" ":"
rwm-rewriteContext searchAttrDN
rwm-rewriteRule "(.+)?ou=people,dc=int,dc=fr$" "$1ou=evry,dc=mines-telecom,dc=fr" ":"
rwm-rewriteRule "(.+)?dc=mines-telecom,dc=fr$" "$1dc=mines-telecom,dc=fr" ":"
===== slapd.conf =====
===== racine mines-telecom ====
#database root mines-telecom
database bdb
suffix "dc=mines-telecom,dc=fr"
rootdn "cn=adm,dc=mines-telecom,dc=fr"
rootpw secret
directory /var/lib/ldap/mintel/
index ou,cn,mail,surname,givenname,uid eq,pres,sub
#ACL
access to dn.base="" by * read
access to dn.base="cn=Subschema" by * read
access to attrs=userPassword
by self auth
by anonymous auth
by dn="cn=adm,dc=int-evry,dc=fr" write
by * none
# Acces standard anonymous pour les attrs mail,givename,cn,sn
access to dn.subtree="dc=mines-telecom,dc=fr" attrs=cn,sn,mail,givenname,entry,objectclass,ou,title,associatedDomain,dc
by dn="cn=adm,dc=int,dc=fr" write
by anonymous read
access to *
by self read
by users read
===== exemple requete =====
Requete du le "meta" domaine racine dc=mines-telecom,dc=fr
$ ldapsearch -x uid=procacci -H ldap://ldapmintel.int-evry.fr cn sn displayName
# procacci, evry, mines-telecom.fr
dn: uid=procacci,ou=evry,dc=mines-telecom,dc=fr
displayName: Jehan PROCACCIA
cn: Jehan PROCACCIA
sn: PROCACCIA
==== Logs ldapmintel ====
sur le serveur mandataire ldapmintel
Mar 5 17:13:37 ldapmintel slapd[1361]: conn=1004 fd=13 ACCEPT from IP=157.148.221.28:38383 (IP=0.0.0.0:389)
Mar 5 17:13:37 ldapmintel slapd[1361]: conn=1004 op=0 BIND dn="" method=128
Mar 5 17:13:37 ldapmintel slapd[1361]: conn=1004 op=0 RESULT tag=97 err=0 text=
Mar 5 17:13:37 ldapmintel slapd[1361]: conn=1004 op=1 SRCH base="" scope=2 deref=0 filter="(uid=procacci)"
Mar 5 17:13:37 ldapmintel slapd[1361]: conn=1004 op=1 SRCH attr=cn sn displayName
Mar 5 17:13:37 ldapmintel slapd[1361]: <= bdb_equality_candidates: (objectClass) not indexed
Mar 5 17:13:37 ldapmintel slapd[1361]: conn=1004 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text=
Mar 5 17:13:37 ldapmintel slapd[1361]: conn=1004 op=2 UNBIND
Mar 5 17:13:37 ldapmintel slapd[1361]: conn=1004 fd=13 closed
==== logs ldapze ====
sur le serveur cible d'evry les log affichent bien une requete en entrée
Mar 5 17:13:37 ldapze slapd[9334]: conn=1963 op=5 SRCH base="ou=people,dc=int,dc=fr" scope=2 deref=0 filter="(uid=procacci)"
Mar 5 17:13:37 ldapze slapd[9334]: conn=1963 op=5 SRCH attr=cn sn displayName
Mar 5 17:13:37 ldapze slapd[9334]: conn=1963 op=5 SEARCH RESULT tag=101 err=0 nentries=1 text=
===== Proxy Paris TPT =====
####################################################################
#database Paris TPT
database ldap
suffix "ou=people,dc=tpt,dc=fr"
uri "ldap://ldapt2.tpt.fr"
#ACL TPT
# crée supplémentaire pour masquer (aux anonymes) l'adresse mail
access to dn.subtree="ou=people,dc=tpt,dc=fr"
attrs=entry,mail,title,sn,cn
by users read
by anonymous none
# nécessaire si on veut voir le reste.
access to dn.subtree="ou=people,dc=tpt,dc=fr"
attrs=entry,sn
by users read
by anonymous read
#RELAY
database relay
suffix ou=paris,dc=mines-telecom,dc=fr
relay ou=people,dc=tpt,dc=fr
subordinate
overlay rwm
rwm-rewriteEngine on
rwm-rewriteContext default
rwm-rewriteRule "(.+)?ou=paris,dc=mines-telecom,dc=fr$" "$1ou=people,dc=tpt,dc=fr" ":"
rwm-rewriteContext searchEntryDN
rwm-rewriteRule "(.+)?ou=people,dc=tpt,dc=fr$" "$1ou=paris,dc=mines-telecom,dc=fr" ":"
rwm-rewriteContext searchAttrDN
rwm-rewriteRule "(.+)?ou=people,dc=tpt,dc=fr$" "$1ou=paris,dc=mines-telecom,dc=fr" ":"
rwm-rewriteRule "(.+)?dc=mines-telecom,dc=fr$" "$1dc=mines-telecom,dc=fr" ":"
===== requete Ziann =====
# ldapsearch -x "cn=bernard*" -H ldaps://ldapmintel.tem-tsp.eu -b dc=mines-telecom,dc=fr cn -D 'cn=mintel,dc=mines-telecom,dc=fr' -W
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: cn=bernard*
# requesting: cn
...
# numResponses: 18
# numEntries: 17
====== Variante en utilisant le backend meta ======
suffix "dc=mines-telecom,dc=fr"
rootdn "dc=mines-telecom,dc=fr"
# le timeout est insdipensable sinon quand un serveur est down
# le client laisse tomber avant d'avoir la réponse
network-timeout 1
# Local
uri "ldapi:///ou=paris,dc=mines-telecom,dc=fr"
suffixmassage "ou=paris,dc=mines-telecom,dc=fr" "ou=people,dc=tpt,dc=fr"
# Evry
uri "ldaps://ldapz2.int-evry.eu/ou=evry,dc=mines-telecom,dc=fr"
suffixmassage "ou=evry,dc=mines-telecom,dc=fr" "ou=people,dc=int-evry,dc=fr"
# Bretagne, avec authentification
uri "ldap://10.19.1.10/ou=bretagne,dc=mines-telecom,dc=fr"
suffixmassage "ou=bretagne,dc=mines-telecom,dc=fr" "ou=people,o=personnel,dc=tbretagne,dc=fr"
idassert-bind bindmethod="simple"
binddn="cn=adm,ou=admin,o=personnel,dc=tbretagne,dc=fr"
credentials="XXXXXXX"
flags="override"
mode="none"
idassert-authzFrom "*"