“nenhum conhecimento global superior” ao adicionar um país

8

Devo adicionar um organizationalunit como este 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

Então, como é um novo LDAP, acho que primeiro devo adicionar o fr country 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?

    
por Anthony O. 15.01.2013 / 18:56

2 respostas

1

Graças a resposta do larsks , eis o que fiz.

Primeiro, aqui está uma extração 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 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 adicionei ao meu ldap com o seguinte comando:

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

Agora eu tive 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, posso 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
    
por 16.01.2013 / 11:53
13

O erro no global superior knowledge significa que slapd não sabe onde colocar sua nova entrada. Isso normalmente significa que você não definiu um banco de dados apropriado. Com sistemas mais novos (aqueles usando cn=config em vez de slapd.conf ), você normalmente adicionaria primeiro um novo banco de dados ou modificaria uma entrada de banco de dados existente usando ldapadd ou ldapmodify . Por exemplo, no meu sistema Fedora 17, a instalação padrão configura um banco de dados como este para hospedar 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 eu colocaria essas modificações assim:

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

Isso funciona devido às seguintes olcAccess linhas 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 , contatando slapd sobre o soquete ldapi:/// , acesso sem senha à árvore cn=config .

Em seguida, carrego na minha entrada de nível superior:

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

Ao executar:

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

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

    
por 15.01.2013 / 20:49