2009-04-27 5 views
34

So che questo è più simile a una domanda serverfault che una domanda StackOverflow, ma dal momento che serverfault non è ancora, qui vado:Come faccio a clonare un database OpenLDAP

dovrei spostare un'applicazione da un redhat server ad un altro, e senza una buona conoscenza del funzionamento interno dell'applicazione, come dovrei spostare il database OpenLDAP da una macchina all'altra, con schemi e tutto.

Quali file dovrei copiare? Credo che la configurazione sia piuttosto standard.

risposta

38

il problema con SourceRebels risposta è che slapcat(8) non garantisce che i dati siano ordinato per ldapadd(1)/ldapmodify(1). Dalla pagina man:

 
The LDIF generated by this tool is suitable for use with slapadd(8). 
As the entries are in database order, not superior first order, they 
cannot be loaded with ldapadd(1) without first being reordered. 

Inoltre utilizzando uno strumento che utilizza i file di back-end per il dump del database e quindi utilizzando uno strumento che carica il ldif attraverso il protocollo LDAP non è molto coerente.

io suggerirei di usare una combinazione di slapcat(8)/slapadd(8)Oldapsearch(1)/ldapmodify(1). La mia preferenza andrebbe al secondo in quanto non ha bisogno di un accesso shell al server LDAP o di spostare i file in giro.

Per esempio, dump database da un server master sotto dc = maestro, dc = com e caricarlo in un server di backup

 
$ ldapsearch -Wx -D "cn=admin_master,dc=master,dc=com" -b "dc=master,dc=com" -H ldap://my.master.host -LLL > ldap_dump-20100525-1.ldif 
$ ldapadd -Wx -D "cn=admin_backup,dc=backup,dc=com" -H ldap://my.backup.host -f ldap_dump-20100525-1.ldif 

La bandiera -W sopra richiede password LDAP admin_master tuttavia dal momento che stiamo reindirizzando uscita in un file non vedrai il prompt - solo una riga vuota. Vai avanti e digita la tua password admin_master admin e funzionerà. La prima riga del file di output dovrà essere rimossa (Immettere la password LDAP :) prima di eseguire ldapadd.

Ultimo suggerimento, ldapadd(1) è un collegamento fisico a ldapmodify(1) con il flag -a (aggiungi) attivato.

+2

-Wx non ha funzionato per me durante il reindirizzamento a un file. Sostituzione -Wx con -w ha funzionato alla grande. –

+4

Non mi piace mettere le password sulla riga di comando perché di solito finiscono nella cronologia della shell ... – sberder

+1

D'accordo, ma quella era l'unica cosa che funzionava per me. –

8

Alcuni appuntamenti:

  • Salva i tuoi schemi personalizzati e objectClasses definizioni sul nuovo server. È possibile cercare i vostri file inclusi in slapd.conf per ottenerlo, per esempio (questa è una parte della mia slapd.conf):

    includono /etc/ldap/schema/core.schema

  • Includere i tuoi schemi personalizzati e le classi di oggetti nella tua nuova installazione openLDAP.

  • Utilizzare il comando slapcat per esportare l'intero albero LDAP in un singolo/vari file ldif.

  • Utilizzare ldapadd per importare i file ldif nella nuova installazione LDAP.

+0

Grazie ... il problema era che non ricordavo il nome dello strumento (slapcat) – elzapp

+1

Per le versioni più recenti di OpenLDAP, dovrai usare invece "slapadd" di 'ldapadd'. –

5

preferisco copiare il database attraverso il protocollo:

prima di tutto essere sicuri di avere gli stessi schemi su entrambi i server.

dump del database con ldapsearch:
ldapsearch -LLL -Wx -D "cn = admin, dc = dominio" -b "dc = dominio"> domain.ldif

-e importarlo nel nuovo server:
ldapmodify -Wx -D "cn = admin, dc = dominio" -a -f domain.ldif

in oneline:
ldapsearch -LLL -Wx -D "cn = admin, dc = dominio "-b" dc = dominio "| ldapmodify -w pass -x -D "cn = admin, dc = dominio" -a

Utilizzando i comandi bin/ldap * si sta parlando direttamente con il server mentre si utilizzano i comandi bin/slap * di cui si ha a che fare con i file di back-end

+3

Sono interessato a come "assicurarmi di avere gli stessi schemi su entrambi i server". Ho il compito di spostare un LDAP esistente su un nuovo server e non ho mai usato openLdap prima. Come posso ottenere che lo schema rispecchi il vecchio server in modo che l'importazione abbia esito positivo? – Ketema

15

ldapsearch e ldapadd non sono necessariamente i migliori strumenti per clonare il DB LDAP. slapcat e slapadd sono opzioni molto migliori.

Esportare il DB con slapcat:

slapcat > ldif 

Importare il DB con slapadd (assicurarsi che il server LDAP è ferma):

slapadd -l ldif 
+1

Dalla pagina man di slapcat, "L'output di slapcat è destinato ad essere utilizzato come input per slapadd (8) .L'output di slapcat non può generalmente essere usato come input per ldapadd (1) o altri client LDAP senza prima modificare l'output. Questa modifica includerebbe normalmente il riordinamento dei record in un primo ordine superiore e la rimozione degli attributi operativi senza modifica dell'utente. " - In altre parole, è potenzialmente molto utile utilizzare ldapadd a causa dei metadati operativi, mentre slapadd ignorerà i metadati operativi. – wmorse

+0

@wmorse slapadd non ignorerà i metadati operativi ma lo caricherà come è contenuto nell'ldif prodotto da slapcat. Questo è importante se hai processi come la replica, ecc. Che si basano su attributi operativi come entryUUID per rimanere lo stesso. – Ralf

2

Grazie, Vish. Ha funzionato come un fascino! Ho modificato il comando:

ldapsearch -z max -LLL -Wx -D "cn=Manager,dc=domain,dc=fr" -b "dc=domain,dc=fr" >/tmp/save.ldif 

ldapmodify -c -Wx -D "cn=Manager,dc=domain,dc=fr" -a -f /tmp/save.ldif 

appena aggiunto il -z max per evitare la limitazione di dimensione e il -c di andare avanti anche se il dominio di destinazione esiste già (il mio caso).

3

(Non abbastanza reputazione per scrivere un commento ...)

ldapsearch apre una connessione al server LDAP. Slapcat accede invece direttamente al database e ciò significa che gli ACL, i limiti di tempo e dimensione e altri sottoprodotti della connessione LDAP non vengono valutati e quindi non alterano i dati. (Matt Butcher, "Mastering OpenLDAP")

+0

Prova a dare una risposta più dettagliata. Altrimenti la tua risposta potrebbe essere più adatta per essere un commento. –

+0

Beh, c'è una ragione per questo requisito e rispondere invece di commentare solo perché uno non ha ancora il privilegio è piuttosto disapprovato. –