====== Replica di LDAP con Syncrepl ====== Installare i pacchetti Debian * **slapd** * **ldap-utils** Viene chiesta la password di amministratore LDAP, potrà essere diversa da quella dell'amministratore master? * [[http://www.openldap.org/doc/admin22/syncrepl.html|LDAP Sync Replication]] * [[http://times.usefulinc.com/2008/06/20-secure-ldap|Secure LDAP replication]] ===== Configurazione LDAP master server ===== Nella sezione globale di **''/etc/ldap/slapd.conf''** si aggiunge il caricamento del **modulo syncprov** (i moduli sono in ''/usr/lib/ldap/''): moduleload syncprov Nella sezione relativa al database da esportare si dichiara l'uso dell'**overlay syncprov**: database hdb overlay syncprov ===== Configurazione LDAP slave server ===== **''/etc/ldap/slapd.conf''** Si deve aggiungere la dichiarazione del **rootdn** e il necessario per la replica rootdn "cn=admin,dc=rigacci,dc=org" syncrepl rid=001 provider=ldaps://ldap.rigacci.org/ tls_reqcert=allow type=refreshAndPersist retry="60 +" searchbase="dc=rigacci,dc=org" filter="(objectClass=*)" scope=sub attrs="*" schemachecking=off bindmethod=simple binddn="cn=admin,dc=rigacci,dc=org" credentials=SuperSecret Tutte **le ACL configurate sul master** devono essere riportate anche nella configurazione dello slave (se si vuole utilizzare la stessa politica di accesso). Volendo essere paranoici, l'accesso al master LDAP potrebbe avvenire con credenziali diverse da quelle di admin, basta creare l'account e dare le giuste credenziali sul master. Se lo slave viene interrogato dai suoi client via ldaps, è necessario generare un certificato ed utilizzarlo: TLSCertificateFile /etc/ldap/tls/slaveldap.rigacci.org.pem TLSCertificateKeyFile /etc/ldap/tls/slaveldap.rigacci.org.pem **''/etc/ldap/ldap.conf''** Per accettare certificati autofirmati dal server (ed eventualmente dei mismatch tra hostname e resolv DNS): TLS_REQCERT never Durante la replica lo slave si rivolge al master in qualità di client, se è necessario possedere un certificato (nel caso in cui il master accetti solo client certificati) è necessario ottenere il certificato firmato dalla CA e il certificato della CA stessa. Per utilizzarli è necessario configurare ''/etc/ldap/ldap.conf'' e assicurarsi che durante la replica siano impostate le variabili di ambiente **''LDAPTLS_CERT''** e **''LDAPTLS_KEY''** ===== Troubleshooting ===== :-) Verificare che lo slave possa accedere al master via ldaps, che le credenziali siano giuste, ecc.: ldapsearch -v -x -H "ldaps://ldap.rigacci.org/" -D "cn=admin,dc=rigacci,dc=org" -W \ -b "dc=rigacci,dc=org" :-( Errore di replica, nel log dello slave si legge: slapd[2857]: do_syncrep2: rid=123 got search entry without Sync State control slapd[2857]: do_syncrepl: rid=123 retrying sul master si trova un errore corrispondente: slapd[2260]: slap_global_control: unrecognized control: 1.3.6.1.4.1.4203.1.9.1.1 soluzione: sul master manca la direttiva globale **moduleload syncprov** e la dichiarazione per il database **overlay syncprov**. :-( Altro errore, sullo slave si legge: slapd[3068]: syncrepl_message_to_entry: rid=123 mods check (objectClass: value #4 invalid per syntax) in questo caso sullo slave manca il **samba.schema** (fornito come esempio dal pacchetto ''samba-doc'') necessario ad accettare il database: include /etc/ldap/schema/samba.schema :-( Sul server slave si legge il seguente errore: slapd[3448]: /etc/ldap/slapd.conf: line 84: rootDN must be defined before syncrepl may be used il problema è chiaro: sullo slave è indispensabile definire il **rootdn**.