You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rundeck 5.4.0对接OpenLDAP时组成员关联异常求助

Rundeck OpenLDAP认证组关联异常排查与解决

环境信息

  • Rundeck版本:rundeck-5.4.0.20240618-1.noarch
  • LDAP组配置:ou=Group,dc=mydomain,dc=com下使用groupOfNames类对象
  • JAAS配置文件:/etc/rundeck/jaas-ldap.conf

当前JAAS配置

ldap {
  com.dtolabs.rundeck.jetty.jaas.JettyCachingLdapLoginModule required
  debug="true"
  contextFactory="com.sun.jndi.ldap.LdapCtxFactory"
  providerUrl="ldap://ldap.mydomain.com:389"
  bindDn="cn=binduser,dc=mydomain,dc=com"
  bindPassword="MyBindPassword"
  authenticationMethod="simple"
  forceBindingLogin="false"
  userBaseDn="ou=people,dc=mydomain,dc=com"
  userRdnAttribute="cn"
  userIdAttribute="cn"
  userPasswordAttribute="userPassword"
  userObjectClass="person"
  userLastNameAttribute="sn"
  userFirstNameAttribute="givenName"
  userEmailAttribute="mail"
  roleBaseDn="ou=group,dc=mydomain,dc=com"
  roleNameAttribute="cn"
  roleMemberAttribute="member"
  roleObjectClass="groupOfNames"
  cacheDurationMillis="300000"
  reportStatistics="true"
  timeoutRead="10000"
  timeoutConnect="20000"
  nestedGroups="false";
};

登录日志警告

[2024-07-24T15:28:39,748] INFO  jaas.JettyCachingLdapLoginModule - Login attempts: 1, Hits: 0, Ratio: 0%.
[2024-07-24T15:28:39,753] DEBUG jaas.JettyCachingLdapLoginModule - Found user?: true
[2024-07-24T15:28:39,753] DEBUG jaas.JettyCachingLdapLoginModule - Searching for users with filter: '(&(objectClass={0})({1}={2}))' from base dn: ou=people,dc=mydomain,dc=com
[2024-07-24T15:28:39,754] DEBUG jaas.JettyCachingLdapLoginModule - Found user?: true
[2024-07-24T15:28:39,755] DEBUG jaas.JettyCachingLdapLoginModule - user cred is present: true
[2024-07-24T15:28:39,770] WARN  jaas.JettyCachingLdapLoginModule - JettyCachingLdapLoginModule: User 'hussain' has no role membership; role query configuration may be incorrect

可能原因及解决方法

1. 组成员属性格式不匹配

  • 原因:Rundeck默认用userIdAttribute(此处为cn)的纯值匹配组的member属性,但OpenLDAP的groupOfNames中member通常存储用户完整DN(如cn=hussain,ou=people,dc=mydomain,dc=com),而非单纯的cn值。
  • 解决:在JAAS配置中添加roleMemberAttributeFormat="dn",告知Rundeck用用户完整DN匹配组的member属性。

2. 组搜索范围受限

  • 原因:默认仅搜索roleBaseDn的一级目录,若组嵌套在子节点中会无法被检索到。
  • 解决:添加roleSearchSubtree="true"开启子树搜索,确保覆盖ou=group下所有层级的组。

3. DN大小写不匹配

  • 原因:LDAP对DN大小写敏感,若组中member的DN(如CN=Hussain,ou=people,...)与用户实际DN(cn=hussain,ou=people,...)大小写不一致,会导致匹配失败。
  • 解决:添加roleMemberMatchCaseInsensitive="true"开启大小写不敏感匹配,或统一LDAP中用户DN与组member值的大小写格式。

4. Bind用户权限不足

  • 原因:配置的bindDn无权限读取ou=group下的组对象及member属性。
  • 解决:用ldapsearch测试Bind用户权限:
    ldapsearch -x -D "cn=binduser,dc=mydomain,dc=com" -w "MyBindPassword" -b "ou=group,dc=mydomain,dc=com" "(objectClass=groupOfNames)" member
    
    若返回空或权限错误,给Bind用户添加ou=group分支的读取权限。

5. 配置参数拼写错误

  • 原因:检查roleBaseDn、roleMemberAttribute等参数拼写是否与LDAP实际结构一致(比如ou=group是否与LDAP中组织单元名称完全匹配)。

修改后的示例配置

ldap {
  com.dtolabs.rundeck.jetty.jaas.JettyCachingLdapLoginModule required
  debug="true"
  contextFactory="com.sun.jndi.ldap.LdapCtxFactory"
  providerUrl="ldap://ldap.mydomain.com:389"
  bindDn="cn=binduser,dc=mydomain,dc=com"
  bindPassword="MyBindPassword"
  authenticationMethod="simple"
  forceBindingLogin="false"
  userBaseDn="ou=people,dc=mydomain,dc=com"
  userRdnAttribute="cn"
  userIdAttribute="cn"
  userPasswordAttribute="userPassword"
  userObjectClass="person"
  userLastNameAttribute="sn"
  userFirstNameAttribute="givenName"
  userEmailAttribute="mail"
  roleBaseDn="ou=group,dc=mydomain,dc=com"
  roleNameAttribute="cn"
  roleMemberAttribute="member"
  roleObjectClass="groupOfNames"
  # 新增组匹配相关参数
  roleMemberAttributeFormat="dn"
  roleSearchSubtree="true"
  roleMemberMatchCaseInsensitive="true"
  cacheDurationMillis="300000"
  reportStatistics="true"
  timeoutRead="10000"
  timeoutConnect="20000"
  nestedGroups="false";
};

修改配置后重启Rundeck服务,重新登录验证是否仍有警告,并检查用户角色是否正常加载。

内容的提问来源于stack exchange,提问作者Hussain Akbar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 17:48:21