"Sem conhecimento superior global" ao adicionar um país

13

Devo adicionar um organizationalunitdesses em um OpenLDAP recém-instalado (no Ubuntu 12.04):

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

Portanto, como é um novo LDAP, acho que devo primeiro adicionar o frpaís e criar esse arquivo:

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

Agora tento importá-lo com esse comando (não tenho domínio para esse servidor):

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

mas o OpenLDAP rejeita esse comando com:

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

Alguma dica?

Anthony O.
fonte

Respostas:

20

O erro no global superior knowledgesignifica que slapdnão sabe onde colocar sua nova entrada. Isso normalmente significa que você não definiu um banco de dados apropriado. Com sistemas mais recentes (aqueles que usam em cn=configvez de slapd.conf), você normalmente adiciona um novo banco de dados ou modifica uma entrada existente usando ldapaddou ldapmodify. Por exemplo, no meu sistema Fedora 17, a instalação padrão configura um banco de dados como este para hospedagem 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

Para hospedar sua organização ( o=myorganization, c=fr), eu precisaria criar o seguinte arquivo 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 então eu carregaria essas modificações assim:

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

Isso funciona devido às seguintes olcAccesslinhas já presentes na configuração:

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

Isso concede root, slapdatravés do ldapi:///soquete, acesso sem senha à cn=configárvore.

Eu carregaria minha entrada de nível superior:

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

Correndo:

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

Isso funciona porque eu adicionei uma ACL semelhante a esse banco de dados. Observe que não precisei começar c=fraqui, porque o banco de dados está definido para contero=myorganization,c=fr

larsks
fonte
OK, muito obrigado larsks. Mas se eu entendi corretamente sua resposta, aqui você modifica o prefixo atual do banco de dados deste OpenLDAP. E se eu quiser adicionar um novo? (I vai testar suas recomendações de qualquer maneira, estou apenas curioso)
Anthony O.
1
Use em ldapaddvez de ldapmodifye use o registro existente como modelo.
Larsks
Se esta resposta resolver seu problema, seria muito gentil da sua parte marcá-la como aceita clicando na caixa de seleção no canto superior esquerdo da pergunta.
Larsks
Na verdade, isso me ajudou muito, mas não foram os comandos exatos que eu passei, por isso criei minha própria resposta. Não ousei editar sua resposta para corrigi-la com os comandos ldifs (especialmente sobre o olcAccess) & que realmente usei ... mas se você quiser editá-lo com copiar / colar da minha resposta, posso marcá-lo como aceitável & Remover o meu :) #
22613 Anthony O.
(Acho que isso não é uma razão para downvote minha resposta ...)
Anthony O.
1

Graças à resposta do larsks , aqui está o que eu fiz.

Primeiro, aqui está um extrato da configuração padrão com o Ubuntu 12.04 (arquivo /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

Então eu criei o seguinte 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 adicione-o ao meu ldap com o seguinte comando:

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

Agora eu tinha que criar o nó da organização com o seguinte myorganization.ldif:

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

E, finalmente, adicione-o com o seguinte comando (o primeiro não funcionou devido a Insufficient access (50)):

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

Agora eu poderia adicionar as unidades organizacionais:

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
Anthony O.
fonte
Isso dn: olcDatabase={1}hdb,cn=configfoi a chave para mim, obrigado #
miguelfg