GitLab Active Directory-Authentifizierung: Keine Ergebnisse und keine Authentifizierung


8

Ich versuche, die LDAP-Authentifizierung mit GitLab einzurichten (Version 7.12.2 unter Ubuntu 14.04 amd64 auf einer VM installiert, Omnibus eingerichtet). Ich habe meine Datei gitlab.rb so bearbeitet, dass sie wie folgt aussieht:

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

Dies führt zu dem gefürchteten "Konnte Sie nicht von Ldapmain autorisieren, weil" Ungültige Anmeldeinformationen "." Error. Ich habe für den Benutzernamen (in der Variablen bind_dn) versucht: "johnsmith@example.com" (E-Mail basierend auf dem Benutzernamen), "John Smith" (vollständiger Name) und "johnsmith" (Benutzername). Die Ergebnisse sind immer gleich. Mein Passwort enthält ein @ -Zeichen. Ich bin mir nicht sicher, ob ich entkommen muss oder wie.

Protokolle zeigen dies:

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)

Und gitlab-rake gitlab:ldap:checkzeigt dies:

Checking LDAP ...

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

Checking LDAP ... Finished

Wenn ich jedoch ldapsearch von der Ubuntu-VM (also derselben Umgebung) verwende, erhalte ich eine Reihe von Ergebnissen:

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

Seltsamerweise sehen die DNs in den Ergebnissen folgendermaßen aus:

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

Das heißt, es gibt dort eine zusätzliche Organisationseinheit. Ich sehe auch, dass der Befehl ldapsearch hat -s sub, was meiner Meinung nach bedeutet, Untergruppen zu durchsuchen. Ich bin mit den Vor- und Nachteilen von LDAP oder Active Directory nicht besonders vertraut.

Ich glaube, ich vermisse etwas in meiner Basis, bin mir aber nicht sicher, was. Dies kann auch ein Problem mit dem Benutzerfilter sein. Ich habe das erforderliche Googeln durchgeführt, was mich so weit gebracht hat, aber jetzt habe ich keine Ideen und Lösungen mehr.


1
Ihr Eintrag für basesieht etwas kurz aus. Was passiert, wenn Sie dort den vollständigen Pfad Ihres ldapsearch-Ergebnisses (einschließlich aller Organisationseinheiten) eingeben?
Etagenklo

@etagenklo: du bist richtig. Ich habe einige andere Änderungen vorgenommen und konnte es zum Laufen bringen. Ich werde als Antwort für die Nachwelt posten.
Siride

Diese Antwort könnte hilfreich sein: stackoverflow.com/a/54462889/6290553
Raktim Biswas

Antworten:


11

Ich konnte dies nach vielen verschiedenen Versuchen lösen. Ein paar Anmerkungen:

  • Stellen Sie sicher, dass alle Zeilen außer der ersten ein Leerzeichen für den Einzug haben. Die erste Zeile sagt "main:" und hat überhaupt keinen Einzug.
  • Der bind_dn ist nicht der vollständige LDAP-Pfad für den Bindungsbenutzer, sondern nur der Benutzername. In meinem Fall ist es "xxx@example.com".
  • Die Basis muss die Active Directory-Gruppe oder der DN sein oder wie auch immer sie heißt, die alle Benutzer enthält.

Hier ist die letzte YAML:

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: 'user@example.com'
 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: ''

1
so viel +1! Dies ist die einzige Lösung im gesamten Stackexchange-Netzwerk, die für mich funktioniert hat!
Noir
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.