我正在尝试设置 rundeck,以便它根据 Active Directory 进行身份验证
我一直收到这个错误
维基百科包含有关该403. Reason: !role
错误的 信息https://github.com/rundeck/rundeck/wiki/FAQ#i-get-an-error-logging-in-http-error-403--reason-role
Rundeck 2.6.2-1(从 .deb 安装)
Ubuntu 14.04
jaas-ldap.conf
ldap {
com.dtolabs.rundeck.jetty.jaas.JettyCachingLdapLoginModule required
debug="true"
contextFactory="com.sun.jndi.ldap.LdapCtxFactory"
providerUrl="ldap://DC01.example.com:389"
bindDn="cn=rundeck,OU=MyOU,DC=example,DC=com"
bindPassword="correct-horse-battery-staple"
authenticationMethod="simple"
forceBindingLogin="true"
userBaseDn="DC=example,DC=com"
userRdnAttribute="sAMAccountName"
userIdAttribute="sAMAccountName"
userPasswordAttribute="unicodePwd"
userObjectClass="user"
roleBaseDn="DC=example,DC=com"
roleNameAttribute="sAMAccountName"
roleUsernameMemberAttribute="cn"
roleMemberAttribute="member"
roleObjectClass="group"
cacheDurationMillis="300000"
supplementalRoles="user"
reportStatistics="true"
timeoutRead="10000"
timeoutConnect="20000"
nestedGroups="true";
};
/var/lib/rundeck/exp/webapp/WEB-INF/web.xml
...
<security-role>
<role-name>Enterprise Admins</role-name>
</security-role>
...
轮廓
...
export RDECK_JVM="-Djava.security.auth.login.config=/etc/rundeck/jaas-ldap.conf \
-Dloginmodule.name=ldap \
...
我知道这违反了最佳做法,原因如下:
- 使用“简单”身份验证和端口 389。所有密码均以纯文本发送!
- baseDN 太宽泛,应缩小范围以加快 ldap 搜索速度
- 如果使用 forceBindingLogin,则不需要 bindDN
其他资源:
https://github.com/rundeck/rundeck/issues/590
https://github.com/rundeck/rundeck/issues/620
http://www.bitester.com/2015/12/ldap-authentication-with-rundeck.html
答案1
我发现至少在我的用例中我必须删除roleUsernameMemberAttribute
定义 supplementalRoles
最终的工作示例(未优化)
ldap {
com.dtolabs.rundeck.jetty.jaas.JettyCachingLdapLoginModule required
debug="true"
contextFactory="com.sun.jndi.ldap.LdapCtxFactory"
providerUrl="ldap://DC01.example.com:389"
bindDn="cn=rundeck,OU=MyOU,DC=example,DC=com"
bindPassword="correct-horse-battery-staple"
authenticationMethod="simple"
forceBindingLogin="true"
userBaseDn="DC=example,DC=com"
userRdnAttribute="sAMAccountName"
userIdAttribute="sAMAccountName"
userPasswordAttribute="unicodePwd"
userObjectClass="user"
roleBaseDn="DC=example,DC=com"
roleNameAttribute="sAMAccountName"
roleMemberAttribute="member"
roleObjectClass="group"
cacheDurationMillis="300000"
supplementalRoles="user"
reportStatistics="true"
timeoutRead="10000"
timeoutConnect="20000"
nestedGroups="true";
};
注意:这仅进行 ldap 身份验证。您还可以混合使用本地帐户和 ldap 帐户。
更新
附加文件和信息这个 github 问题