2017-07-31 82 views
0

我试图设置karaf(4.0.9)通过ldap/active目录认证/授权用户。Karaf w/LDAP认证

我已经复制下面的LDAP-module.xml到deploy目录每https://karaf.apache.org/manual/latest/#_available_realm_and_login_modules

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" 
    xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0" 
    xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"> 

    <jaas:config name="karaf" rank="1"> 
    <jaas:module className="org.apache.karaf.jaas.modules.ldap.LDAPLoginModule" flags="sufficient"> 
     initialContextFactory=com.sun.jndi.ldap.LdapCtxFactory 
     connection.username=cn=ldapsearch,cn=users,dc=eng,dc=net 
     connection.password=**** 
     connection.protocol= 
     connection.url=ldap://server:389 
     user.base.dn=dc=eng,dc=net 
     user.filter=(samaccountname=%u) 
     user.search.subtree=true 
     user.debug=true 
     role.base.dn=dc=eng,dc=net 
     role.name.attribute=cn 
     role.filter=(member=%fqdn) 
     role.search.subtree=true 
     role.mapping=jtAdmins=admin,user,operator 
     authentication=simple 
     debug=true 
    </jaas:module> 
    </jaas:config> 

</blueprint> 

我看到了日志,我可以看到的境界LDAP登录,所以我有信心在配置至少使用

[email protected](jaas)> jaas:realm-list 
Index | Realm Name | Login Module Class Name 
----------------------------------------------------------------------- 
1  | karaf  | org.apache.karaf.jaas.modules.ldap.LDAPLoginModule 

当我尝试用ssh中,我得到以下日志(截断),我可以看到鲨鱼LDAP通讯:

2017-07-31 16:50:39,229 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Get the user DN. 
2017-07-31 16:50:39,238 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Looking for the user in LDAP with 
2017-07-31 16:50:39,238 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | base DN: dc=eng,dc=net 
2017-07-31 16:50:39,238 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | filter: (samaccountname=jtAdmin) 
2017-07-31 16:50:39,244 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Found the user DN. 
2017-07-31 16:50:39,245 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Bind user (authentication). 
2017-07-31 16:50:39,245 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Set the security principal for CN=jtAdmin,CN=Users,dc=eng,dc=net 
2017-07-31 16:50:39,245 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Binding the user. 
2017-07-31 16:50:39,254 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | User jtAdmin successfully bound. 
2017-07-31 16:50:39,256 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Looking for the user roles in LDAP with 
2017-07-31 16:50:39,256 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | base DN: dc=eng,dc=net 
2017-07-31 16:50:39,256 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | filter: (member=CN=jtAdmin,CN=Users,DC=eng,DC=net) 
2017-07-31 16:50:39,359 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | User jtAdmin is a member of role Domain Computers 
2017-07-31 16:50:39,359 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Parse role mapping jtAdmin=admin,user,operator 
2017-07-31 16:50:39,359 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Parse role mapping jtAdmin=admin,user,operator 
2017-07-31 16:50:39,359 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | User jtAdmin is a member of role Domain Controllers 

...

2017-07-31 16:50:39,364 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Parse role mapping jtAdmins=admin,user,operator 
2017-07-31 16:50:39,364 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | Parse role mapping jtAdmins=admin,user,operator 
2017-07-31 16:50:39,364 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | LDAP role jtAdmins is mapped to Karaf role admin 
2017-07-31 16:50:39,364 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | LDAP role jtAdmins is mapped to Karaf role user 
2017-07-31 16:50:39,365 | DEBUG | 8]-nio2-thread-9 | LDAPLoginModule     | 35 - org.apache.karaf.jaas.modules - 4.0.9 | LDAP role jtAdmins is mapped to Karaf role operator 

我可以看到LDAP授权我的用户,但似乎我没有权限登录。我认为role.mapping会处理我的LDAP/AD成员映射到Karaf角色,但这似乎不允许我访问。 Webconsole也试图允许访问,但最终失败。

我缺少什么配置来映射LDAP/AD用户角色以为我的用户启用ssh karaf/console?我需要另一个登录模块吗?我该如何动态地执行此操作(而不是在ldap-module.xml包中使用硬编码的role.mapping)?

理想情况下,我也希望能够同时授予ldap或本地用户访问权限,但我意识到这可能是不可能的。

回答

0

幸运的是,我设法追查了根本原因。感谢karaf IRC频道的人们,让我大声思考。

最终,我认为根本原因是此异常:

javax.naming.PartialResultException: Unprocessed Continuation Reference(s); remaining name ... 

我实际上只看到这个异常的Web控制台处理程序,而不是在SSH /壳处理(但SSH也不管用,所以......)

的异常是从LDAPCache.java(namingEnumeration.hasMore()来了,〜行259),并最终从

at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2914) 
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2888) 

此异常传播到呼叫者,召集者。由于我无法很好地更改JVM,因此我借用一个建议/解决方案,将有关此异常的配置选项添加到ignorePartialNameResult。我不太明白为什么会出现部分名称结果,但是我看到一个意见,暗示该错误是由于role.base.dn与user.base.dn相同的级别,在我的情况中这是真实的。捕获异常并返回现有角色列表后,我可以成功登录w/ldap用户。