2017-07-31 18 views
0

私はkap(4.0.9)がldap/activeディレクトリを介してユーザーを認証/承認するように設定しようとしています。Karaf with LDAP Auth

私はhttps://karaf.apache.org/manual/latest/#_available_realm_and_login_modulesあたりのdeployディレクトリに次のldap-module.xmlをコピーした:

<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ログインを見ることができるので、私は確信しています

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 
:設定は、少なくとも私はsshをしようとすると、私は次のログ(切り捨て)を取得し、私はLDAP通信のサメ見ることができます

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

を使用されています

...

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の役割にマッピングすることを扱うと思ったが、それは私にアクセスを許可していないようだ。 Webコンソールもアクセスを試みますが、最終的には失敗します。

私のユーザにssh karaf/consoleを有効にするためにLDAP/ADユーザロールをマッピングするために欠落している設定は何ですか?別のログインモジュールが必要ですか?そして、これを動的に行うにはどうすればよいですか(ldap-module.xmlバンドルでハードコーディングされたrole.mappingを使用しないでください)。

理想的には、ldapまたはローカルユーザーに同時にアクセスを許可することもできますが、これは可能ではない可能性があります。

答えて

0

運が良ければ、根本原因を突き止めることができました。カラフIRCチャンネルの皆さん、私が大声で考えさせてくれてありがとう。

最終的に、私は根本的な原因は、この例外であると信じて:

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

、私は実際にWebConsoleにハンドラでは、およびNOT 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をうまく変更できないので、この例外に関してigno​​rePartialNameResultにconfigオプションを追加する提案/解決策を借りています。私はなぜ部分的な名前の結果があるのか​​よく分かりませんが、エラーがrole.base.dnが私の場合に当てはまるuser.base.dnと同じレベルであることを暗示しています。例外をキャッチして既存のroleListを返すと、w/ldapユーザーに正常にログインできます。