installation dans /usr/local/openldap
[root@ldapex ~]# cd /usr/local/openldap/etc/openldap/
utilisation d'un script maison pour reconstruction de la config OLC (slpad.d) depuis un fichier de configuration traditionnel slapd.conf, avec arborescence de type ltb-project (/usr/local/openldap)
[root@ldapex openldap]# cat olcgene.sh systemctl stop slapd cd /usr/local/openldap/etc/openldap/slapd.d rm -rf * cd .. /usr/local/openldap/sbin/slaptest -f /usr/local/openldap/etc/openldap/slapd.conf -F /usr/local/openldap/etc/openldap/slapd.d chown -R ldap:ldap /usr/local/openldap/etc/openldap/slapd.d chown -R ldap:ldap /usr/local/openldap/var/openldap-data systemctl start slapd
sur le master ldap il faut disposer d'un compte de replication qui a le droit en lecture sur toutes les arborecences et attributs necessaires a notre replica
notament sur l'attribut userpassword , il faut que notre de compte de replication (ici cn=rep…) puis à la fois s'authentifier (self bind) pour lancer syncrepl , mais aussi lire l'attribut userpassword des autres utilisateurs (dans la cadre d'un replica replicant aussi cet attribut !) , donc un acces read pour ceux-ci, d'où l'usage de la directive “continue”
#JP acl # continue pour que repint puisse lire dans la replication son propre pass et pas seulement faire du auth # cf https://www.vincentliefooghe.net/content/les-acl-dans-openldap # finalement pas utile car pour etre self il faut d'abord etre authentifié ! access to attrs=userPassword by self auth continue by anonymous auth by dn="cn=rep,ou=dsa,dc=int,dc=fr" read by * none #Voir le root DSE + base DN , cf http://www.openldap.org/lists/openldap-technical/201203/msg00132.html access to dn.subtree="dc=int,dc=fr" attrs=entry,objectclass,contextCSN by dn="cn=rep,ou=dsa,dc=int,dc=fr" read by * read ...
éléments ajoutés pour une configuration incluant plusieurs schema (supann, eduperson etc …)
include /usr/local/openldap/etc/openldap/schema/supann-2019-02-05.schema include /usr/local/openldap/etc/openldap/schema/eduperson-200412.schema
#JP TLS TLSCACertificateFile /etc/pki/tls/certs/chain-dc-TR1-CA2-star-imt.pem TLSCertificateFile /etc/pki/tls/certs/star_imteu.pem TLSCertificateKeyFile /etc/pki/tls/private/star_imteunp.key
loglevel pour faire apparaitre syncrepl (16384) et les operations (256) , somme = 16640:
loglevel 16640 threads 8 defaultsearchbase dc=int,dc=fr
#JP https://services.renater.fr/documentation/supann/supann2018/recommandations2018/modele/options AttributeOptions x-
Enfin, la dafinition de notre database pour la racinede l'arbre ldap a servir, ici dc=int,dc=fr
database mdb maxsize 1073741824 suffix "dc=int,dc=fr" rootdn "cn=admin,dc=int,dc=fr" # rootpw secret rootpw {SSHA}lAENVGROSECRETZAETBNHY8.z/ directory /usr/local/openldap/var/openldap-data index objectClass,entryUUID eq index uid,cn,sn,mail eq,pres,sub #JP acl include depuis un fichier a part pour meilleur lecture, cf plus bas include /usr/local/openldap/etc/openldap/slapd.acl.conf # JP syncrepl , idem include depuis un fichier a part pour meilleur lecture, cf plus bas include /usr/local/openldap/etc/openldap/slapd.sync.conf
sur ce replica partiel (pages blanches) , ACL assez simples
[root@ldapex openldap]# cat slapd.acl.conf # attribut userpassword, utile ici uniquement pour le compte DSA cn=rep access to attrs=userPassword by anonymous auth by dn="cn=rep,ou=dsa,dc=int,dc=fr" read by * none #Voir le root DSE + base DN , cf http://www.openldap.org/lists/openldap-technical/201203/msg00132.html access to dn.subtree="dc=int,dc=fr" attrs=entry,contextCSN,objectclass,mail,title,sn,cn,givenName,uid,telephoneNumber,ou,departmentNumber,employeeType,businessCategory by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by users read by anonymous none by * none access to * by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by self read by dn="cn=rep,ou=dsa,dc=int,dc=fr" read by * none
enfin la configuration de replication partielle a base de syncrepl , on ne replique que la branche ou=people et seulement certains attributs “pages blanches” . Cela necessite de mettre le schemacheck a Off autrement on aurait des erreurs de validation sur les attributs “Must” des objectclass concernées.
[root@ldapex openldap]# cat slapd.sync.conf syncrepl rid=001 provider=ldaps://master.int.eu type=refreshAndPersist searchbase="ou=people,dc=int,dc=fr" filter="(objectClass=organizationalPerson)" attrs="uid,cn,sn,ou,departmentNumber,telephoneNumber,mail" scope=sub schemachecking=off bindmethod=simple retry="60 10 300 +" keepalive="240:10:30" binddn="cn=rep,ou=dsa,dc=int,dc=fr" credentials="secretreplica" updateref ldaps://master.int.eu:636
la liste des parametres syncrepl est dans le man slapd.conf
https://linux.die.net/man/5/slapd.conf syncrepl rid=<replica ID> provider=ldap[s]://<hostname>[:port] searchbase=<base DN> [type=refreshOnly|refreshAndPersist] [interval=dd:hh:mm:ss] [retry=[<retry interval> <# of retries>]+] [filter=<filter str>] [scope=sub|one|base|subord] [attrs=<attr list>] [attrsonly] [sizelimit=<limit>] [timelimit=<limit>] [schemachecking=on|off] [network-timeout=<seconds>] [timeout=<seconds>] [bindmethod=simple|sasl] [binddn=<dn>] [saslmech=<mech>] [authcid=<identity>] [authzid=<identity>] [credentials=<passwd>] [realm=<realm>] [secprops=<properties>] [keepalive=<idle>:<probes>:<interval>] [starttls=yes|critical] [tls_cert=<file>] [tls_key=<file>] [tls_cacert=<file>] [tls_cacertdir=<path>] [tls_reqcert=never|allow|try|demand] [tls_ciphersuite=<ciphers>] [tls_crlcheck=none|peer|all] [logbase=<base DN>] [logfilter=<filter str>] [syncdata=default|accesslog|changelog]
Script qui permet de reconstruire completement le replica partiel , en 2 temps:
[root@ldapex openldap]# cat RebuildAllRep.sh ## 1st pass from delete all current database and init a fresh one #stop slapd service systemctl stop slapd #delete all databases rm -f /usr/local/openldap/var/openldap-data/*.mdb #delete all OLC config cd /usr/local/openldap/etc/openldap/slapd.d rm -rf * cd .. #rebuild slpad.d OLC config from slapd-nosync.conf (copy of slapd.conf but without syncrep config) #because of updateref incompatibility with inital load of local root tree and dsa accounts /usr/local/openldap/sbin/slaptest -f /usr/local/openldap/etc/openldap/slapd-nosync.conf -F /usr/local/openldap/etc/openldap/slapd.d #reset ldap acces to subtree slapd.d chown -R ldap:ldap /usr/local/openldap/etc/openldap/slapd.d #reset ldap acces to subtree databases directory chown -R ldap:ldap /usr/local/openldap/var/openldap-data #restart slapd service systemctl start slapd #insert root tree and local dsa account from ldif with ldapi (local soket connect) /usr/local/openldap/bin/ldapadd -H ldapi://%2Fvar%2Frun%2Fslapd%2Fldapi -Y EXTERNAL -f /root/Ldifs/dc-int-ldapex.ldif -c #pause 1s with sleep 1 sleep 1 ################################################################################### ## 2nd pass to introduce syncrepl and build all sync data from master #stop slapd service again this time to reload config with syncrepl enabled systemctl stop slapd #delete all OLC config cd /usr/local/openldap/etc/openldap/slapd.d rm -rf * cd .. #rebuild slpad.d OLC config from slapd.conf (containing the syncrepl included) /usr/local/openldap/sbin/slaptest -f /usr/local/openldap/etc/openldap/slapd.conf -F /usr/local/openldap/etc/openldap/slapd.d #reset ldap acces to subtree slapd.d chown -R ldap:ldap /usr/local/openldap/etc/openldap/slapd.d #reset ldap acces to subtree databases directory chown -R ldap:ldap /usr/local/openldap/var/openldap-data #restart slapd service systemctl start slapd