Autenticação do GitLab Active Directory: sem resultados e sem autenticação

8

Estou tentando configurar a autenticação LDAP com o GitLab (versão 7.12.2 instalada no Ubuntu 14.04 amd64 em uma VM, configuração Omnibus). Eu editei meu arquivo gitlab.rb para ter a seguinte aparência:

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

Isso resulta no temido "Não foi possível autorizá-lo no Ldapmain porque" Credenciais inválidas "." erro. Eu tentei, para o nome de usuário (na variável bind_dn): "[email protected]" (email com base no nome de usuário), "John Smith" (nome completo) e "johnsmith" (nome de usuário). Os resultados são sempre os mesmos. Minha senha possui um sinal @. Não tenho certeza se preciso escapar ou como.

Os logs mostram isso:

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)

E gitlab-rake gitlab:ldap:checkmostra isso:

Checking LDAP ...

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

Checking LDAP ... Finished

No entanto, quando uso o ldapsearch na VM do Ubuntu (no mesmo ambiente), recebo vários resultados:

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

Curiosamente, os DNs nos resultados são assim:

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

Ou seja, há uma UO extra lá. Também vejo que o comando ldapsearch possui -s sub, o que eu acredito que significa procurar subgrupos. Não estou familiarizado com os detalhes do LDAP ou do Active Directory.

Então, acredito que estou perdendo algo em minha base, mas não sei ao certo o que. Também pode ser um problema com o filtro do usuário. Eu fiz o Google necessário, o que me levou até aqui, mas agora estou sem idéias e soluções.

siride
fonte
1
Sua entrada para baseparece um pouco curta. O que acontece quando você coloca o caminho completo do resultado do ldapsearch lá (incluindo todas as OUs)?
etagenklo
@etagenklo: você está correto. Fiz outras alterações e consegui fazê-lo funcionar. Vou postar como resposta para a posteridade.
siride
esta resposta pode ser útil: stackoverflow.com/a/54462889/6290553
Raktim Biswas

Respostas:

11

Consegui resolver isso depois de várias tentativas diferentes. Algumas notas:

  • Verifique se todas as linhas, exceto a primeira, possuem um único espaço para recuo. A primeira linha é a que diz "main:" e que não tem recuo.
  • O bind_dn não é o caminho LDAP completo para o usuário de ligação, mas apenas o nome de usuário. No meu caso, é "[email protected]".
  • A base precisa ser o grupo ou o DN do Active Directory ou o que for chamado, que contém todos os usuários.

Aqui está o 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
fonte
1
muito +1! Esta é a única solução em toda a rede stackexchange que estava funcionando para mim!
Noir