===== replica ====
=== ref ===
* https://blog.debugo.fr/openldap-replication/
* https://ltb-project.org/documentation/nagios-plugins/check_ldap_syncrepl_status
* https://www.vincentliefooghe.net/content/openldap-surveiller-et-contr%C3%B4ler-la-r%C3%A9plication
* https://pratapsatve.wordpress.com/2017/11/11/replication-of-the-openldap-server/
* https://linux.die.net/man/5/slapd.conf => syncrepl parameters
* https://stackoverflow.com/questions/45161477/how-to-remove-all-records-from-ldap
===== package ltb-project =====
installation dans /usr/local/openldap
[root@ldapex ~]# cd /usr/local/openldap/etc/openldap/
==== script de reload ====
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
===== ACL ldap master ====
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
...
===== specificité de configuration slpad.conf =====
==== schemas ====
é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
==== certificats ====
#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
==== log et threads ====
loglevel pour faire apparaitre syncrepl (16384) et les operations (256) , somme = 16640:
* https://www.openldap.org/doc/admin24/slapdconfig.html
loglevel 16640
threads 8
defaultsearchbase dc=int,dc=fr
==== attribute options ====
* https://services.renater.fr/documentation/supann/supann2018/recommandations2018/pratique/options#openldapactivation_des_options_d_attributs
#JP https://services.renater.fr/documentation/supann/supann2018/recommandations2018/modele/options
AttributeOptions x-
==== mdb database ====
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
==== acl ===
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
===== syncrepl partiel =====
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= provider=ldap[s]://[:port] searchbase= [type=refreshOnly|refreshAndPersist]
[interval=dd:hh:mm:ss] [retry=[ <# of retries>]+] [filter=] [scope=sub|one|base|subord]
[attrs=] [attrsonly] [sizelimit=] [timelimit=] [schemachecking=on|off] [network-timeout=]
[timeout=] [bindmethod=simple|sasl] [binddn=] [saslmech=] [authcid=] [authzid=]
[credentials=] [realm=] [secprops=] [keepalive=::] [starttls=yes|critical]
[tls_cert=] [tls_key=] [tls_cacert=] [tls_cacertdir=] [tls_reqcert=never|allow|try|demand]
[tls_ciphersuite=] [tls_crlcheck=none|peer|all] [logbase=] [logfilter=]
[syncdata=default|accesslog|changelog]
===== rebuild script =====
Script qui permet de reconstruire completement le replica partiel , en 2 temps:
- avec injection de l'arborescence de base (dc=int,dc=fr et le compte de requettage dans ou=dsa)
- puis relance avec syncrepl pour recuperer toutes les entrées ou=people depuis le master .
[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