Я должен добавить organizationalunit
вот так в только что установленный OpenLDAP (в Ubuntu 12.04):
dn: ou=MYREGION, ou=MYAPP, ou=GROUPS, o=myorganization, c=fr
ou: MYREGION
objectClass: top
objectClass: organizationalunit
Так как это новый LDAP, я думаю, что сначала нужно добавить fr
страна, и я создаю этот файл:
dn: c=fr
c: fr
objectClass: top
objectClass: country
Теперь я пытаюсь импортировать его с помощью этой команды (у меня нет домена для этого сервера):
ldapadd -x -D cn=admin,dc=nodomain -W -f country_fr.ldif
но OpenLDAP отклоняет эту команду:
adding new entry "c=fr"
ldap_add: Server is unwilling to perform (53)
additional info: no global superior knowledge
Намек?
Ошибка no global superior knowledge
Значит это slapd
не знает, куда поместить вашу новую запись. Обычно это означает, что вы не определили подходящую базу данных. С более новыми системами (использующими cn=config
вместо того slapd.conf
), вы обычно сначала добавляете новую базу данных или изменяете существующую запись базы данных, используя ldapadd
или ldapmodify
. Например, в моей системе Fedora 17 установка по умолчанию устанавливает такую базу данных для хостинга. 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
Для размещения вашей организации (o=myorganization, c=fr
) Мне нужно было бы создать следующий файл 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
Затем я бы загрузил эти модификации следующим образом:
ldapmodify -Y EXTERNAL -H ldapi:/// -f mychanges.ldif
Это работает из-за следующего olcAccess
строки уже присутствуют в конфигурации:
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
Это дает root
, связываясь slapd
над ldapi:///
розетка, беспарольный доступ к cn=config
дерево.
Затем я загрузил бы свою запись верхнего уровня:
dn: o=myorganization, c=fr
objectclass: organization
o: myorganization
Запустив:
ldapadd -Y EXTERNAL -H ldapi:/// -f myobject.ldif
Это работает, потому что я добавил аналогичный ACL в эту базу данных. Обратите внимание, что мне не нужно было начинать с c=fr
здесь, потому что база данных определена для хранения o=myorganization,c=fr
Благодаря ларск ответ, вот что я сделал.
Сначала приведем выдержку из конфигурации по умолчанию с Ubuntu 12.04 (файл /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
Итак, я создал следующие 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
и добавил его в мой ldap с помощью следующей команды:
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f change_suffix.ldif
Теперь мне нужно было создать узел организации со следующим myorganization.ldif
:
dn: o=myorganization,c=fr
objectclass: organization
o: myorganization
И, наконец, добавьте его следующей командой (первая не сработала из-за Insufficient access (50)
):
ldapadd -x -D cn=admin,o=myorganization,c=fr -W -f myorganization.ldif
Теперь я могу добавить организационные единицы:
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