2017-07-31 2 views
0

Je suis en train d'installer karaf (4.0.9) pour authentifier/autoriser les utilisateurs via ldap/Active Directory.Karaf w/LDAP Auth

J'ai copié le ldap-module.xml suivants dans le répertoire deploy par 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> 

Je vois les journaux, et je peux voir la connexion LDAP sur le domaine, donc je suis confiant la configuration est au moins utilisé

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

Lorsque je tente de ssh, je reçois les journaux suivants (tronqués), et je peux voir les requins communications 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 

Je peux voir LDAP autoriser mon utilisateur, mais il semble que je n'ai pas la permission de se connecter. Je pensais que le role.mapping gérerait le mappage de mon appartenance LDAP/AD aux rôles Karaf, mais cela ne semble pas me permettre d'y accéder. Webconsole tente également d'autoriser l'accès, mais échoue finalement.

De quelle configuration ai-je besoin pour mapper les rôles utilisateur LDAP/AD pour activer ssh karaf/console pour mon utilisateur? Ai-je besoin d'un autre module de connexion? Et comment puis-je le faire dynamiquement (sans utiliser role.mapping codé en dur dans le bundle ldap-module.xml)?

Idéalement, j'aimerais aussi pouvoir donner simultanément l'accès à ldap OU aux utilisateurs locaux, mais je réalise que ce n'est peut-être pas possible.

Répondre

0

Par chance, j'ai réussi à trouver la cause première. Merci aux gens du canal IRC de Karaf qui m'ont permis de penser à haute voix.

En fin de compte, je crois que la cause est cette exception:

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

Je ne vois que fait cette exception dans le gestionnaire de webconsole, et non pas dans le gestionnaire ssh/shell (mais ssh ne fonctionne pas non plus, alors ...)

L'exception vient de LDAPCache.java (namingEnumeration.hasMore(), ~ ligne 259) et, finalement, de

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

Cette exception se propage à l'appelant. Puisque je ne peux pas très bien changer la JVM, j'emprunte une suggestion/solution d'ajout d'une option de configuration à ignorePartialNameResult concernant cette exception. Je ne comprends pas pourquoi il y a un résultat de nom partiel, mais j'ai vu un commentaire impliquant que l'erreur était due à role.base.dn étant le même niveau que le user.base.dn qui est vrai dans mon cas. Après avoir intercepté l'exception et renvoyé le roleList existant, je parviens à me connecter avec succès aux utilisateurs w/ldap.