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用户权限:
若返回空或权限错误,给Bind用户添加ldapsearch -x -D "cn=binduser,dc=mydomain,dc=com" -w "MyBindPassword" -b "ou=group,dc=mydomain,dc=com" "(objectClass=groupOfNames)" memberou=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
相关产品推荐
相关产品推荐

