我正在安装 LDAP 服务器并配置 Jenkins 以接受 LDAP 进行身份验证。在 Jenkins 参数中,参数 的行为很奇怪Root DN
。
文档说:
根 DN
为了验证用户并确定赋予该用户的角色,Jenkins 执行多个 LDAP 查询。
[...]
但在实践中,LDAP 服务器维护着数据的广泛索引,因此很少需要指定此字段— 您应该让 Jenkins 通过与 LDAP 对话来解决这个问题。
如果您指定了此值,该字段通常类似于 dc=acme,dc=org
奇怪的行为:如果我不指定该参数,则找不到我的用户。其他参数具有默认值。
LDAP 对我来说很新,所以我可能做错了什么。我使用 创建了一个 LDAP 树。我在自己创建的节点下slapd
创建了一个用户。结果如下:adenoyelle
People
ldapsearch
root@myserver:~# ldapsearch -xLLL -b 'dc=acme,dc=com'
dn: dc=acme,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: acme.com
dc: acme
dn: cn=admin,dc=acme,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
dn: ou=people,dc=acme,dc=com
cn: people
objectClass: organizationalRole
objectClass: top
ou: people
dn: uid=adenoyelle,ou=people,dc=acme,dc=com
objectClass: account
objectClass: top
objectClass: simpleSecurityObject
uid: adenoyelle
如果我将Root DN
其留空,我的用户将无法进行身份验证。但如果我为参数提供以下值,它就会起作用:
ou=people,dc=acme,dc=com
我做错了什么?我猜是我的 LDAP 节点错了,但我找不到原因。也许是objectClass
值的问题?
答案1
如果省略此值,LDAP 客户端将向服务器查询用作基本 DN 的根 DSE。如果 slapd 设置不正确,ldapsearch 将无法获取该值,从而导致查询失败。
详情请见此处:OpenLDAP 未返回任何 Root DSE,引用:
这实际上被归类为 bug#427842再次使用 Ubuntu 9.10 (karmic)。
要修复此问题,请将以下内容复制到 fixRootDSE.ldif:
dn: olcDatabase={-1}frontend,cn=config changetype: modify add: olcAccess olcAccess: to dn.base="" by * read olcAccess: to dn.base="cn=subschema" by * read
并执行
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f fixRootDSE.ldif
这应该授予对根 DSE 的匿名访问权限。