添加国家/地区时“没有全球高级知识”


14

我必须将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

有什么提示吗?

Answers:


20

该错误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联系,无需密码即可访问。slapdldapi:///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


好,非常感谢幼虫。但是,如果我正确理解您的答案,则可以在此处修改此OpenLDAP数据库的当前前缀。如果我想添加一个新的呢?(无论如何,我都会测试您的建议,我很好奇)
Anthony O.

1
使用ldapadd代替ldapmodify,并使用现有记录作为模型。
larsk's

如果此答案解决了您的问题,则非常乐意通过单击问题左上方的复选框将其标记为已接受。
larsk's

实际上,它对我有很大帮助,但这并不是我传递的确切命令,这就是我创建自己的回复的原因。我不敢编辑您的回复,以便olcAccess使用我真正使用的ldifs(特别是有关)和命令来更正它。但是,如果您想通过复制/粘贴从我的回复中进行编辑,我可以将其标记为可接受的&移除地雷:)
安东尼·奥。2013年

(我认为这不是拒绝我的回答的理由...)
Anthony O.

1

感谢larsks的回答,这就是我所做的。

首先,这里是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

dn: olcDatabase={1}hdb,cn=config对我来说是关键,谢谢
miguelfg '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.