On réplique le LDAP en utilisant ldap-master et ldap-slave. Pour cela nous utilisons d'une part le module de réplication de LDAP : Syncrepl et Keepalived (déjà utilisé pour les Passerelle wifi)
Ldap-master est en lecture/écriture, ldap-slave est en lecture seule.
On doit d'abord configurer le master (le seul qui peut modifier le contenu du LDAP), pour ajouter un User qui permettra de faire la synchronisation et le module qui sert à synchroniser.
On ajoute l'utilisateur :
dn: cn=synchro,dc=minet,dc=net objectClass: simpleSecurityObject objectClass: organizationalRole cn: synchro description: replication user userPassword: changeme
On ajoute le module :
dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulePath: /usr/lib/ldap olcModuleLoad: syncprov.la
Ensuite nous devons accorder les droits suffisants à l'utilisateur synchro
pour qu'il puisse lire l'arborescence complète :
dn: olcDatabase={1}mdb,cn=config changetype: modify replace: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=minet,dc=net" write by dn="cn=inspector,dc=minet,dc=net" read by dn="cn=synchro,dc=minet,dc=net" read by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by * read
dn: olcDatabase={0}config,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by dn.exact="cn=synchro,dc=minet,dc=net" read by * break
Enfin on utilise le module Syncprov pour exposer l'arborescence :
dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: {0}syncprov olcSpCheckpoint: 100 10 olcSpSessionlog: 100
dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: {0}syncprov olcSpCheckpoint: 100 10 olcSpSessionlog: 100
Enfin on configure ldap-slave :
Une fois la dernière réplication configurée, il n'est plus possible de modifier le contenu de ldap-slave, y compris la configuration TLS. Pensez donc bien à configurer cela avant. L'ordre des modifications suivantes est donc à respecter.
On ajoute les droits (et oui ils ne sont pas synchronisés)
dn: olcDatabase={1}mdb,cn=config changetype: modify replace: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=minet,dc=net" write by dn="cn=inspector,dc=minet,dc=net" read by dn="cn=synchro,dc=minet,dc=net" read by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by * read
On configure la réplication pour le contenu :
dn: olcDatabase={1}mdb,cn=config changetype: modify add: olcSyncRepl olcSyncRepl: rid=003 provider=ldaps://ldap-master.minet.net/ bindmethod=simple binddn="cn=synchro,dc=minet,dc=net" credentials=changeme searchbase="dc=minet,dc=net" schemachecking=on type=refreshAndPersist retry="60 +" tls_cacert=/etc/ssl/certs/MiNET_private_CA.pem
Puis on configure celle du schéma (qui empêchera toutes les autres modifications):
dn: olcDatabase={0}config,cn=config changetype: modify add: olcSyncRepl olcSyncRepl: rid=001 provider=ldaps://ldap-master.minet.net/ bindmethod=simple binddn="cn=synchro,dc=minet,dc=net" credentials=changeme searchbase="cn=schema,cn=config" schemachecking=on type=refreshAndPersist retry="60 +" tls_cacert=/etc/ssl/certs/MiNET_private_CA.pem - add: olcSyncRepl olcSyncRepl: rid=002 provider=ldaps://ldap-master.minet.net/ bindmethod=simple binddn="cn=synchro,dc=minet,dc=net" credentials=changeme searchbase="cn=config" filter="(| (objectClass=olcModuleList) (objectClass=olcMemberOf))" schemachecking=on type=refreshAndPersist retry="60 +" tls_cacert=/etc/ssl/certs/MiNET_private_CA.pem
Le filtre de la dernière synchro permet de ne pas synchro tout sous cn=config mais seulement ce qui nous intéresse.