«Aucune connaissance supérieure mondiale» lors de l'ajout d'un pays

13

Je dois ajouter un organizationalunitcomme ceci dans un OpenLDAP fraîchement installé (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 frpays, et je crée ce fichier:

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

Maintenant, j'essaie de l'importer avec cette commande (je n'ai pas de 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

Un indice?

Anthony O.
la source

Réponses:

20

L'erreur no global superior knowledgesignifie que vous slapdne savez pas où placer votre nouvelle entrée. Cela signifie généralement que vous n'avez pas défini de base de données appropriée. Avec les systèmes plus récents (ceux utilisant cn=configau lieu de slapd.conf), vous ajouteriez généralement d'abord une nouvelle base de données ou modifiez une entrée de base de données existante à l'aide de ldapaddou ldapmodify. Par exemple, sur mon système Fedora 17, l'installation par défaut configure 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

Pour 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 alors ces modifications comme ceci:

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

Cela fonctionne en raison des olcAccesslignes suivantes 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

Cela accorde root, en contactant slapdvia le ldapi:///socket, un accès sans mot de passe à l' cn=configarborescence.

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 c=frici, car la base de données est définie pour conteniro=myorganization,c=fr

larsks
la source
OK, merci beaucoup. Mais si je comprends bien votre réponse, vous modifiez ici le préfixe actuel de la base de données de cet OpenLDAP. Et si je voulais en ajouter un nouveau? (Je testerai vos recommandations de toute façon, je suis juste curieux)
Anthony O.
1
Utilisez ldapaddau lieu de ldapmodifyet utilisez l'enregistrement existant comme modèle.
larsks
Si cette réponse étouffe votre problème, ce serait très gentil de votre part de le marquer comme accepté en cochant la case en haut à gauche de la question.
larsks
En fait, cela m'a beaucoup aidé, mais ce ne sont pas les commandes exactes que j'ai passées, c'est pourquoi j'ai créé ma propre réponse. Je n'ai pas osé modifier votre réponse afin de la corriger avec les ldifs (spécialement à propos de olcAccess) et les commandes que j'ai vraiment utilisées ... mais si vous voulez la modifier avec un copier / coller de ma réponse, je peux la marquer comme acceptable & enlever le mien :)
Anthony O.
(Je pense que ce n'est pas une raison pour rejeter ma réponse ...)
Anthony O.
1

Merci à larsks réponse , voici ce que j'ai fait.

Voici d'abord 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, ajoutez-le avec la commande suivante (la première n'a pas fonctionné à cause 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
Anthony O.
la source
C'était la dn: olcDatabase={1}hdb,cn=configclé pour moi, merci
miguelfg