"Kein global überlegenes Wissen" beim Hinzufügen eines Landes

13

Ich muss organizationalunitso etwas in eine frisch installierte OpenLDAP (unter Ubuntu 12.04) einfügen:

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

Da es sich also um ein neues LDAP handelt, muss ich zuerst das frLand hinzufügen und diese Datei erstellen:

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

Jetzt versuche ich es mit diesem Befehl zu importieren (ich habe keine Domain für diesen Server):

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

OpenLDAP lehnt diesen Befehl jedoch ab mit:

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

Irgendein Hinweis?

Anthony O.
quelle

Antworten:

20

Der Fehler no global superior knowledgebedeutet, dass Sie slapdnicht wissen, wo Sie Ihren neuen Eintrag ablegen sollen. Dies bedeutet normalerweise, dass Sie keine geeignete Datenbank definiert haben. Bei neueren Systemen (solche, die cn=configanstelle von verwenden slapd.conf) fügen Sie normalerweise zuerst eine neue Datenbank hinzu oder ändern einen vorhandenen Datenbankeintrag mit ldapaddoder ldapmodify. Auf meinem Fedora 17-System richtet die Standardinstallation beispielsweise eine Datenbank wie diese für das Hosting ein 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

Um Ihre Organisation ( o=myorganization, c=fr) zu hosten , müsste ich die folgende LDIF-Datei erstellen:

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

Und ich würde dann diese Modifikationen wie folgt laden:

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

Dies funktioniert aufgrund der folgenden olcAccessZeilen, die bereits in der Konfiguration vorhanden sind:

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

Dadurch rootwird slapdüber den ldapi:///Socket ein kennwortfreier Zugriff auf den cn=configBaum gewährt .

Ich würde dann meinen Top-Level-Eintrag laden:

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

Durch Ausführen von:

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

Dies funktioniert, weil ich dieser Datenbank eine ähnliche ACL hinzugefügt habe. Beachten Sie, dass ich hier nicht anfangen musste c=fr, da die Datenbank für das Halten definiert isto=myorganization,c=fr

Larsks
quelle
OK, vielen Dank Larsks. Aber wenn ich Ihre Antwort richtig verstehe, ändern Sie hier das aktuelle Präfix der Datenbank dieser OpenLDAP. Was wäre, wenn ich eine neue hinzufügen möchte? (Ich werde Ihre Empfehlungen trotzdem testen, ich bin nur neugierig)
Anthony O.
1
Verwenden Sie ldapaddanstelle von ldapmodifyund verwenden Sie den vorhandenen Datensatz als Modell.
Larsks
Wenn diese Antwort Ihr Problem lösen würde, wäre es sehr nett von Ihnen, sie als akzeptiert zu markieren, indem Sie auf das Kontrollkästchen oben links in der Frage klicken.
Larsks
Eigentlich hat es mir sehr geholfen, aber es waren nicht die genauen Befehle, die ich übergeben habe, deshalb habe ich meine eigene Antwort erstellt. Ich habe es nicht gewagt, Ihre Antwort zu bearbeiten, um sie mit den ldifs (speziell über die olcAccess) und Befehlen zu korrigieren, die ich wirklich verwendet habe ... aber wenn Sie sie mit Kopieren / Einfügen aus meiner Antwort bearbeiten möchten, kann ich sie als akzeptabel markieren & entferne meine :)
Anthony O.
(Ich denke, dies ist kein Grund, meine Antwort abzulehnen ...)
Anthony O.
1

Dank der Antwort von Larsks habe ich Folgendes getan.

Hier ist zunächst ein Auszug aus der Standardkonfiguration mit Ubuntu 12.04 (Datei /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

Also habe ich folgendes erstellt 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

und fügte es meinem ldap mit dem folgenden Befehl hinzu:

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

Jetzt musste ich den Organisationsknoten mit folgendem erstellen myorganization.ldif:

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

Und schließlich fügen Sie es mit dem folgenden Befehl hinzu (der erste funktionierte aufgrund von nicht Insufficient access (50)):

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

Jetzt könnte ich die Organisationseinheiten hinzufügen:

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.
quelle
Dies dn: olcDatabase={1}hdb,cn=configwar der Schlüssel für mich, danke
Miguelfg