因此,我在 Debian 9 机器上全新安装了 openldap,目前看起来像
它将是一个电话号码数据库,为了简单起见,我将使用这个例子:数据库将分为城市 - 街道 - 以及居住在这些街道上的人们。
它应该看起来像这样:dc=city -> ou=street -> cn=nameofperson
到目前为止一切顺利,我尝试创建第一个 dc,例如纽约,如下所示:
root@ldap-test:/etc/ldap/ldif-import# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/ldif-import/createcn.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=NewYork"
ldap_add: Server is unwilling to perform (53)
additional info: no global superior knowledge
ldif 文件如下所示:
dn: cn=NewYork
dc: NewYork
distinguishedName: dc=NewYork
name: NewYork
objectClass: top
objectClass: dcObject
由于这不起作用,我想到了另一种方法,将街道放入 nodomain,只是为了检查它是否能以这种方式工作,但似乎架构缺少 distinguishedName 和 name。我查看了默认架构,core.ldif 有这些条目,但它们被注释掉了。
所以我无法加载这个 ldif:
dn: ou=broadway,dc=nodomain
distinguishedName: ou=broadway,dc=nodomain
name: broadway
objectClass: top
objectClass: organizationalUnit
ou: broadway
。
root@ldap-test:/etc/ldap/ldif-import# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/ldif-import/broadway.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "ou=broadway,dc=nodomain"
ldap_add: Object class violation (65)
additional info: attribute 'distinguishedName' not allowed
因此将 distinguishedName 加载到模式中,但它显示添加新条目
"cn=core,cn=schema,cn=config"
ldap_add: Other (e.g., implementation specific) error (80)
additional info: olcAttributeTypes: Duplicate attributeType: "2.5.4.49"
我不明白为什么,因为它甚至没有加载/etc/ldap/slapd.d/cn=config/cn=schema/cn={*}*.ldif
有人知道该怎么办吗?
答案1
name
不是一个普遍使用的属性,但cn
(commonName
)是。- 不要尝试添加
distinguishedName
。dn
已经处理了这个问题。dn
和distinguishedName
是同一属性的别名,但只dn
应用于ldapmodify
操作。 这包括ldapadd
。
您的第一个 ldif 失败,因为:
- 您的 ldap 服务器未配置为处理 namingContext。2
cn=NewYork
您正在尝试添加 distinguishedName 属性。 objectClass: dcObject
没有属性name
您的第二个 ldif 失败是因为:
- 您正在尝试添加一个 distinguishedName 属性。
objectClass: organizationalUnit
没有属性name
附注:ldap 属性(包括 rdn 中使用的部分)中可以有空格。请根据需要使用引号。