web-dev-qa-db-fra.com

"Aucune connaissance supérieure mondiale" tout en ajoutant un pays

Je dois ajouter un organizationalunit comme celui-ci dans une openldap fraîchement installée (sur Ubuntu 12.04):

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

Donc, comme c'est un nouveau LDAP, je pense que je dois d'abord ajouter le pays fr, et je crée ce fichier:

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

Maintenant, j'essaie d'importer avec cette commande (je n'ai aucun domaine pour ce serveur):

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

mais OpenLDap rejette cette commande avec:

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

Toute astuce?

13
Anthony O.

Grâce à - Larsks réponds , voici ce que j'ai fait.

Tout d'abord voici un extrait de la configuration par défaut avec Ubuntu 12.04 (fichier /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

J'ai donc créé ce qui suit 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

et l'a ajouté à mon LDAP avec la commande suivante:

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

Maintenant, je devais créer le nœud d'organisation avec ce qui suit myorganization.ldif:

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

Et enfin l'ajoutez-le avec la commande suivante (le premier n'a pas fonctionné en raison de Insufficient access (50)):

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

Maintenant, je pourrais ajouter les unités organisationnelles:

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
1
Anthony O.

L'erreur no global superior knowledge signifie que slapd ne sait pas où mettre votre nouvelle entrée. Cela signifie généralement que vous n'avez pas défini une base de données appropriée. Avec de nouveaux systèmes (ceux utilisant cn=config à la place de slapd.conf), vous ajouteriez généralement une nouvelle base de données ou modifieriez une entrée de base de données existante à l'aide de ldapadd ou ldapmodify. Par exemple, sur mon système Fedora 17, l'installation par défaut définit une base de données comme celle-ci pour l'hébergement 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

Héberger votre organisation (o=myorganization, c=fr), Je devrais créer le fichier LDIF suivant:

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

Et je chargerais ensuite ces modifications comme ceci:

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

Cela fonctionne en raison des lignes suivantes olcAccess déjà présentes dans la configuration:

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

Cette subvention root, contactant slapd sur le ldapi:/// Prise, accès sans mot de passe au cn=config arbre.

Je chargerais ensuite dans mon entrée de niveau supérieur:

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

En exécutant:

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

Cela fonctionne parce que j'ai ajouté une ACL similaire à cette base de données. Notez que je n'avais pas besoin de commencer avec c=fr Ici, parce que la base de données est définie pour tenir o=myorganization,c=fr

20
larsks