2017-07-31 81 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用戶。