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
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 .
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
#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
#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
#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" ":"
#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
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
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
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=
####################################################################
#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" ":"
# 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 <dc=mines-telecom,dc=fr> with scope subtree # filter: cn=bernard* # requesting: cn ... # numResponses: 18 # numEntries: 17
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 "*"