我必须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
有什么提示吗?
答案1
该错误no global superior knowledge
意味着slapd
不知道将新条目放在哪里。这通常意味着您没有定义适当的数据库。对于较新的系统(使用cn=config
而不是 的系统),您通常首先使用或slapd.conf
添加新数据库或修改现有数据库条目。例如,在我的 Fedora 17 系统上,默认安装会设置一个这样的数据库来托管:ldapadd
ldapmodify
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
答案2
谢谢larsk 的回答,以下是我所做的。
首先这里是 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