In questa guida, configureremo la replica multi-master del server OpenLDAP su CentOS 7 / RHEL 7 . Questa configurazione della replica multi-master serve a superare i limiti della tipica replica master-slave in cui solo il server master esegue le modifiche nella directory LDAP .
LEGGI:Come configurare la replica master-slave OpenLDAP
Nella replica Multi-Master, due o più server agiscono come master e tutti questi sono autorevoli per qualsiasi modifica nella directory LDAP. Le query dei client vengono distribuite su più server con l'aiuto della replica.
Ambiente
Per la replica Multi-Master, utilizzeremo tre OpenLDAP server. I dettagli sono di seguito.
ldpsrv1.itzgeek.local (192.168.12.10) ldpsrv2.itzgeek.local (192.168.12.20) ldpsrv3.itzgeek.local (192.168.12.30)
Installa LDAP
Installa i pacchetti LDAP su tutti i tuoi server.yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel
Avvia il servizio LDAP e abilitalo per l'avvio automatico all'avvio del sistema.
systemctl start slapd.service systemctl enable slapd.service
Configura registrazione LDAP
Configura syslog per abilitare la registrazione LDAP.
echo "local4.* /var/log/ldap.log" >> /etc/rsyslog.conf systemctl restart rsyslog
Configura la replica multimaster di OpenLDAP
Copia il file di configurazione del database di esempio in /var/lib/ldap directory e aggiornare i permessi del file. Dovresti eseguire i passaggi seguenti su tutti i tuoi server OpenLDAP se non diversamente indicato.
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG chown ldap:ldap /var/lib/ldap/*
Abiliteremo il modulo syncprov.
vi syncprov_mod.ldif
Copia e incolla le righe sottostanti su syncprov_mod.ldif sopra file.
dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulePath: /usr/lib64/openldap olcModuleLoad: syncprov.la
Ora invia la configurazione al server LDAP.
ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov_mod.ldif
Risultato:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=module,cn=config"
Abilita replica configurazione
Modifica olcServerID su tutti i server . Ad esempio, per ldpsrv1, imposta olcServerID su 1, per ldpsrv2, imposta olcServerID su 2 e per ldpsrv3, imposta su 3.
vi olcserverid.ldif
Copia e incolla il testo sottostante nel file sopra.
dn: cn=config changetype: modify add: olcServerID olcServerID: 1
Aggiorna la configurazione sul server LDAP.
ldapmodify -Y EXTERNAL -H ldapi:/// -f olcserverid.ldif
Risultato:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "cn=config"
Dobbiamo generare una password per la replica della configurazione LDAP.
slappasswd
Risultato:
New password: Re-enter new password: {SSHA}MAfw/QNizKx4NxueW7CpCSN6jeDB5Z+C
Dovresti generare una password su ciascun server eseguendo il comando slappasswd.
Imposta una password per il database di configurazione.
vi olcdatabase.ldif
Copia e incolla il testo sottostante nel file sopra. Devi inserire la password che hai generato nel passaggio precedente su questo file.
dn: olcDatabase={0}config,cn=config add: olcRootPW olcRootPW: {SSHA}MAfw/QNizKx4NxueW7CpCSN6jeDB5Z+C
Aggiorna la configurazione sul server LDAP.
ldapmodify -Y EXTERNAL -H ldapi:/// -f olcdatabase.ldif
Risultato:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "olcDatabase={0}config,cn=config"
Ora imposteremo la replica della configurazione su tutti i server.
vi configrep.ldif
Copia e incolla il testo sottostante nel file sopra.
### Update Server ID with LDAP URL ### dn: cn=config changetype: modify replace: olcServerID olcServerID: 1 ldap://ldpsrv1.itzgeek.local olcServerID: 2 ldap://ldpsrv2.itzgeek.local olcServerID: 3 ldap://ldpsrv3.itzgeek.local ### Enable Config Replication### dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov ### Adding config details for confDB replication ### dn: olcDatabase={0}config,cn=config changetype: modify add: olcSyncRepl olcSyncRepl: rid=001 provider=ldap://ldpsrv1.itzgeek.local binddn="cn=config" bindmethod=simple credentials=x searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1 olcSyncRepl: rid=002 provider=ldap://ldpsrv2.itzgeek.local binddn="cn=config" bindmethod=simple credentials=x searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1 olcSyncRepl: rid=003 provider=ldap://ldpsrv3.itzgeek.local binddn="cn=config" bindmethod=simple credentials=x searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1 - add: olcMirrorMode olcMirrorMode: TRUE
Ora invia la configurazione al server LDAP.
ldapmodify -Y EXTERNAL -H ldapi:/// -f configrep.ldif
Risultato:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "cn=config" adding new entry "olcOverlay=syncprov,olcDatabase={0}config,cn=config" modifying entry "olcDatabase={0}config,cn=config"
Abilita la replica del database
A questo punto, tutte le tue configurazioni LDAP vengono replicate. Ora abiliteremo la replica dei dati effettivi, ovvero il database utente. Esegui i passaggi seguenti su uno qualsiasi dei nodi poiché gli altri nodi sono in replica.
Avremmo bisogno di abilitare syncprov per il database hdb.
vi syncprov.ldif
Copia e incolla il testo sottostante nel file sopra.
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov
Aggiorna la configurazione sul server LDAP.
ldapmodify -Y EXTERNAL -H ldapi:/// -f syncprov.ldif
Risultato:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "olcOverlay=syncprov,olcDatabase={2}hdb,cn=config"
Imposta la replica per il database hdb.
vi olcdatabasehdb.ldif
Copia e incolla il contenuto seguente nel file sopra. Potresti ricevere un errore per olcSuffix, olcRootDN e olcRootPW se li hai già nella tua configurazione. Rimuovi le voci, se non richieste.
dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=itzgeek,dc=local - replace: olcRootDN olcRootDN: cn=ldapadm,dc=itzgeek,dc=local - replace: olcRootPW olcRootPW: {SSHA}xtbbtC/1pJclCPzo1n3Szac9jqavSphk - add: olcSyncRepl olcSyncRepl: rid=004 provider=ldap://ldpsrv1.itzgeek.local binddn="cn=ldapadm,dc=itzgeek,dc=local" bindmethod=simple credentials=x searchbase="dc=itzgeek,dc=local" type=refreshOnly interval=00:00:00:10 retry="5 5 300 5" timeout=1 olcSyncRepl: rid=005 provider=ldap://ldpsrv2.itzgeek.local binddn="cn=ldapadm,dc=itzgeek,dc=local" bindmethod=simple credentials=x searchbase="dc=itzgeek,dc=local" type=refreshOnly interval=00:00:00:10 retry="5 5 300 5" timeout=1 olcSyncRepl: rid=006 provider=ldap://ldpsrv3.itzgeek.local binddn="cn=ldapadm,dc=itzgeek,dc=local" bindmethod=simple credentials=x searchbase="dc=itzgeek,dc=local" type=refreshOnly interval=00:00:00:10 retry="5 5 300 5" timeout=1 - add: olcDbIndex olcDbIndex: entryUUID eq - add: olcDbIndex olcDbIndex: entryCSN eq - add: olcMirrorMode olcMirrorMode: TRUE
Dopo aver aggiornato il file, invia la configurazione al server LDAP.
ldapmodify -Y EXTERNAL -H ldapi:/// -f olcdatabasehdb.ldif
Risultato:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "olcDatabase={2}hdb,cn=config"
Apporta modifiche a olcDatabase={1}monitor.ldif per limitare l'accesso del monitor solo alla radice LDAP (ldapadm ) utente, non ad altri.
# vi monitor.ldif dn: olcDatabase={1}monitor,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external, cn=auth" read by dn.base="cn=ldapadm,dc=itzgeek,dc=local" read by * none
Dopo aver aggiornato il file, invia la configurazione al server LDAP.
ldapmodify -Y EXTERNAL -H ldapi:/// -f monitor.ldif
Aggiungi gli schemi LDAP.
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
Genera base.ldif file per il tuo dominio.
# vi base.ldiff dn: dc=itzgeek,dc=local dc: itzgeek objectClass: top objectClass: domain dn: cn=ldapadm ,dc=itzgeek,dc=local objectClass: organizationalRole cn: ldapadm description: LDAP Manager dn: ou=People,dc=itzgeek,dc=local objectClass: organizationalUnit ou: People dn: ou=Group,dc=itzgeek,dc=local objectClass: organizationalUnit ou: Group
Costruisci la struttura della directory.
ldapadd -x -W -D "cn=ldapadm,dc=itzgeek,dc=local" -f base.ldif
Uscita:
Enter LDAP Password: adding new entry "dc=itzgeek,dc=local" adding new entry "cn=ldapadm ,dc=itzgeek,dc=local" adding new entry "ou=People,dc=itzgeek,dc=local" adding new entry "ou=Group,dc=itzgeek,dc=local"
Testare la replica LDAP
Creiamo un utente LDAP chiamato "ldaptest " in uno qualsiasi dei tuoi server principali, per farlo, crea un .ldif file su ldpsrv1.itzgeek.local (nel mio caso).
[root@ldpsrv1 ~]# vi ldaptest.ldif
Aggiorna il file sopra con i contenuti sottostanti.
dn: uid=ldaptest,ou=People,dc=itzgeek,dc=local objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount cn: ldaptest uid: ldaptest uidNumber: 9988 gidNumber: 100 homeDirectory: /home/ldaptest loginShell: /bin/bash gecos: LDAP Replication Test User userPassword: {crypt}x shadowLastChange: 17058 shadowMin: 0 shadowMax: 99999 shadowWarning: 7
Aggiungi un utente al server LDAP utilizzando ldapadd comando.
[root@ldpsrv1 ~]# ldapadd -x -W -D "cn=ldapadm,dc=itzgeek,dc=local" -f ldaptest.ldif
Risultato:
Enter LDAP Password: adding new entry "uid=ldaptest,ou=People,dc=itzgeek,dc=local"
Cerca "ldaptest ” su un altro server master (ldpsrv2.itzgeek.local ).
[root@ldpsrv2 ~]# ldapsearch -x cn=ldaptest -b dc=itzgeek,dc=local
Risultato:
# extended LDIF # # LDAPv3 # base <dc=itzgeek,dc=local> with scope subtree # filter: cn=ldaptest # requesting: ALL # # ldaptest, People, itzgeek.local dn: uid=ldaptest,ou=People,dc=itzgeek,dc=local objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount cn: ldaptest uid: ldaptest uidNumber: 9988 gidNumber: 100 homeDirectory: /home/ldaptest loginShell: /bin/bash gecos: LDAP Replication Test User userPassword:: e2NyeXB0fXg= shadowLastChange: 17058 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Ora, imposta una password per l'utente creato su ldpsrv1.itzgeek.local andando su ldpsrv2.itzgeek.local . Se riesci a impostare la password, significa che la replica funziona come previsto.
[root@ldpsrv2 ~]# ldappasswd -s password123 -W -D "cn=ldapadm,dc=itzgeek,dc=local" -x "uid=ldaptest,ou=People,dc=itzgeek,dc=local"
Dove,
-s specificare la password per il nome utente
-x nome utente per il quale è stata modificata la password
-D Nome distinto per l'autenticazione al server LDAP.
Nella topologia di replica master-slave, non è possibile impostare la password per l'utente LDAP nel server slave.Extra
Configura anche il client LDAP in modo che si colleghi al nuovo server master.
authconfig --enableldap --enableldapauth --ldapserver=ldpsrv1.itzgeek.local,ldpsrv2.itzgeek.local,ldpsrv3.itzgeek.local --ldapbasedn="dc=itzgeek,dc=local" --enablemkhomedir --update
Questo è tutto.