该错误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