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?
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
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