"Nessuna conoscenza superiore globale" durante l'aggiunta di un paese


13

Devo aggiungere un organizationalunitsimile in un OpenLDAP appena installato (su Ubuntu 12.04):

dn: ou=MYREGION, ou=MYAPP, ou=GROUPS, o=myorganization, c=fr
ou: MYREGION
objectClass: top
objectClass: organizationalunit

Quindi, poiché si tratta di un nuovo LDAP, penso di dover prima aggiungere il frpaese e creo quel file:

dn: c=fr
c: fr
objectClass: top
objectClass: country

Ora provo a importarlo con quel comando (non ho un dominio per quel server):

ldapadd -x -D cn=admin,dc=nodomain -W -f country_fr.ldif

ma OpenLDAP rifiuta quel comando con:

adding new entry "c=fr"
ldap_add: Server is unwilling to perform (53)
    additional info: no global superior knowledge

Qualche suggerimento?

Risposte:


20

L'errore no global superior knowledgeindica che slapdnon sa dove inserire la nuova voce. Ciò significa in genere che non è stato definito un database appropriato. Con i sistemi più recenti (quelli che utilizzano cn=configinvece di slapd.conf), in genere aggiungere prima un nuovo database o modificare una voce di database esistente utilizzando ldapaddo ldapmodify. Ad esempio, sul mio sistema Fedora 17, l'installazione predefinita imposta un database come questo per l'hosting dc=my-domain,dc=com:

dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
creatorsName: cn=config
olcSuffix: dc=my-domain,dc=com
olcRootDN: cn=Manager,dc=my-domain,dc=com

Per ospitare la tua organizzazione ( o=myorganization, c=fr), avrei bisogno di creare il seguente file LDIF:

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: o=myorganization, c=fr
-
replace: olcRootDN
olcRootDN: cn=Manager,o=myorganization,c=fr
-
replace: olcAccess
olcAccess: {0}to * 
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" write 
  by dn.base="cn=Manager,o=myorganization,c=fr" write
  by * none

E poi caricare queste modifiche in questo modo:

ldapmodify -Y EXTERNAL -H ldapi:/// -f mychanges.ldif

Questo funziona a causa delle seguenti olcAccessrighe già presenti nella configurazione:

dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * 
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
  by * none

Ciò garantisce root, contattando slapdtramite il ldapi:///socket, l'accesso senza password cn=configall'albero.

Vorrei quindi caricare nella mia voce di livello superiore:

dn: o=myorganization, c=fr
objectclass: organization
o: myorganization

Eseguendo:

ldapadd -Y EXTERNAL -H ldapi:/// -f myobject.ldif

Questo funziona perché ho aggiunto un ACL simile a questo database. Si noti che non avevo bisogno di iniziare c=frqui, perché il database è definito per contenereo=myorganization,c=fr


OK, grazie mille. Ma se capisco correttamente la tua risposta, qui modifichi il prefisso corrente del database di questo OpenLDAP. E se volessi aggiungerne uno nuovo? (Proverò comunque i tuoi consigli, sono solo curioso)
Anthony O.

1
Utilizzare ldapaddinvece di ldapmodifye utilizzare il record esistente come modello.
Larks

Se questa risposta ha sostituito il tuo problema, sarebbe molto gentile da parte tua contrassegnarlo come accettato facendo clic sulla casella di controllo in alto a sinistra della domanda.
Larks

In realtà, mi ha aiutato molto, ma non sono stati gli esatti comandi che ho passato, ecco perché ho creato la mia risposta. Non ho osato modificare la tua risposta per correggerla con i ldifs (specialmente riguardo a olcAccess) e i comandi che ho usato davvero ... ma se vuoi modificarla con copia / incolla dalla mia risposta, posso contrassegnarla come accettabile & rimuovi il mio :)
Anthony O.

(Penso che questo non sia un motivo per sottovalutare la mia risposta ...)
Anthony O.

1

Grazie a Larsks answer , ecco cosa ho fatto.

Innanzitutto ecco un estratto della configurazione predefinita con Ubuntu 12.04 (file /etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif):

dn: olcDatabase={1}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=nodomain
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=admin,dc=nodomain" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=nodomain" write by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=nodomain

Quindi ho creato quanto segue change_suffix.ldif:

dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: o=myorganization,c=fr
-
replace: olcRootDN
olcRootDN: cn=admin,o=myorganization,c=fr
-
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,o=myorganization,c=fr" write by * none
olcAccess: {2}to * by self write by dn="cn=admin,o=myorganization,c=fr" write by * read

e l'ho aggiunto al mio LDAP con il seguente comando:

sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f change_suffix.ldif

Ora dovevo creare il nodo dell'organizzazione con il seguente myorganization.ldif:

dn: o=myorganization,c=fr
objectclass: organization
o: myorganization

E infine aggiungilo con il seguente comando (il primo non ha funzionato a causa di Insufficient access (50)):

ldapadd -x -D cn=admin,o=myorganization,c=fr -W -f myorganization.ldif

Ora potrei aggiungere le unità organizzative:

dn: ou=GROUPS, o=myorganization,c=fr
ou: GROUPS
objectClass: top
objectClass: organizationalunit

dn: ou=MYAPP, ou=GROUPS, o=myorganization,c=fr
ou: MYAPP
objectClass: top
objectClass: organizationalunit

dn: ou=MYREGION, ou=MYAPP, ou=GROUPS, o=myorganization,c=fr
ou: MYREGION
objectClass: top
objectClass: organizationalunit

Questa è dn: olcDatabase={1}hdb,cn=configstata la chiave per me, grazie
miguelfg
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.