===== 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 "*"