Authentification GitLab Active Directory: aucun résultat et aucune authentification

8

J'essaie de configurer l'authentification LDAP avec GitLab (version 7.12.2 installée sur Ubuntu 14.04 amd64 sur une machine virtuelle, configuration Omnibus). J'ai modifié mon fichier gitlab.rb pour qu'il ressemble à ceci:

gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS' # remember to close this block with 'EOS' below
 main: # 'main' is the GitLab 'provider ID' of this LDAP server
   label: 'LDAP'
   host: '********'
   port: 389
   uid: 'sAMAccountName'
   method: 'plain' # "tls" or "ssl" or "plain"
   bind_dn: 'CN=********,OU=********,OU=********,DC=********,DC=***'
   password: '********'
   active_directory: true
   allow_username_or_email_login: false
   block_auto_created_users: false
   base: 'DC=********,DC=***'
   user_filter: ''
EOS

Cela se traduit par le redouté "Impossible de vous autoriser à partir de Ldapmain car" Informations d'identification non valides "." Erreur. J'ai essayé, pour le nom d'utilisateur (dans la variable bind_dn): "[email protected]" (email basé sur le nom d'utilisateur), "John Smith" (nom complet) et "johnsmith" (nom d'utilisateur). Les résultats sont toujours les mêmes. Mon mot de passe contient un signe @. Je ne sais pas si je dois y échapper, ni comment.

Les journaux montrent ceci:

Started POST "/users/auth/ldapmain/callback" for 127.0.0.1 at 2015-07-22 17:15:01 -0400
Processing by OmniauthCallbacksController#failure as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"[FILTERED]", "username"=>"********", "password"=>"[FILTERED]"}
Redirected to http://192.168.56.102/users/sign_in
Completed 302 Found in 14ms (ActiveRecord: 3.6ms)
Started GET "/users/sign_in" for 127.0.0.1 at 2015-07-22 17:15:01 -0400
Processing by SessionsController#new as HTML
Completed 200 OK in 20ms (Views: 8.3ms | ActiveRecord: 2.9ms)

Et gitlab-rake gitlab:ldap:checkmontre ceci:

Checking LDAP ...

LDAP users with access to your GitLab server (only showing the first 100 results)
Server: ldapmain

Checking LDAP ... Finished

Cependant, lorsque j'utilise ldapsearch à partir de la machine virtuelle Ubuntu (donc le même environnement), j'obtiens un tas de résultats:

ldapsearch -x -h ******** -D "********@********.***" -W -b "OU=********,OU=********,DC=********,DC=***" -s sub "(cn=*)" cn mail sn dn

Curieusement, les DN dans les résultats ressemblent à ceci:

dn: CN=John Smith,OU=********,OU=********,OU=********,DC=********,DC=***

Autrement dit, il y a une unité d'organisation supplémentaire là-dedans. Je vois également que la commande ldapsearch a -s sub, ce qui, je crois, signifie rechercher des sous-groupes. Je ne connais pas très bien les tenants et aboutissants de LDAP ou d'Active Directory.

Je crois donc que je manque quelque chose dans ma base, mais je ne sais pas quoi. Il peut également s'agir d'un problème avec le filtre utilisateur. J'ai fait le googling requis, ce qui m'a mené jusqu'ici, mais maintenant je n'ai plus d'idées et de solutions.

siride
la source
1
Votre entrée pour basesemble un peu courte. Que se passe-t-il lorsque vous y mettez le chemin complet de votre résultat ldapsearch (y compris toutes les unités d'organisation)?
etagenklo
@etagenklo: vous avez raison. J'ai apporté d'autres modifications et j'ai pu le faire fonctionner. Je posterai comme réponse pour la postérité.
siride
cette réponse pourrait être utile: stackoverflow.com/a/54462889/6290553
Raktim Biswas

Réponses:

11

J'ai pu résoudre ce problème après de nombreux essais différents. Quelques notes:

  • Assurez-vous que toutes les lignes sauf la première ont un seul espace pour le retrait. La première ligne est celle qui dit "principal:" et qui n'a aucun retrait.
  • Le bind_dn n'est pas le chemin LDAP complet pour l'utilisateur de liaison, mais juste le nom d'utilisateur. Dans mon cas, c'est "[email protected]".
  • La base doit être le groupe Active Directory ou le nom distinctif ou tout autre nom qui contient tous les utilisateurs.

Voici le YAML final:

main: # 'main' is the GitLab 'provider ID' of this LDAP server
 label: 'Active Directory'
 host: 'ad-server.example.com'
 port: 389
 uid: 'sAMAccountName'
 method: 'plain' # "tls" or "ssl" or "plain"
 bind_dn: '[email protected]'
 password: 'password'
 active_directory: true
 allow_username_or_email_login: false
 block_auto_created_users: false
 base: 'OU=ABC,OU=XYZ,DC=example,DC=com'
 user_filter: ''
siride
la source
1
tellement +1! C'est la seule solution sur tout le réseau stackexchange qui fonctionnait pour moi!
Noir