Ubuntu

GitLab Active Directory 身份驗證:無結果且無身份驗證

  • February 26, 2017

我正在嘗試使用 GitLab 設置 LDAP 身份驗證(版本 7.12.2 安裝在 VM 上的 Ubuntu 14.04 amd64 上,設置了 Omnibus)。我已將 gitlab.rb 文件編輯為如下所示:

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

這會導致可怕的“無法從 Ldapmain 授權您,因為“憑據無效”。錯誤。對於使用者名(在 bind_dn 變數中),我已經嘗試過:“johnsmith@example.com”(基於使用者名的電子郵件)、“John Smith”(全名)和“johnsmith”(使用者名)。結果總是一樣的。我的密碼確實有一個@-sign。我不確定我是否需要逃避它,或者如何。

日誌顯示:

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)

gitlab-rake gitlab:ldap:check顯示了這一點:

Checking LDAP ...

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

Checking LDAP ... Finished

但是,當我從 Ubuntu VM 使用 ldapsearch 時(同樣的環境),我確實得到了一堆結果:

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

奇怪的是,結果中的 DN 如下所示:

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

也就是說,那裡有一個額外的OU。我還看到 ldapsearch 命令有-s sub,我認為這意味著搜尋子組。我對 LDAP 或 Active Directory 的來龍去脈不是很熟悉。

所以我相信我在我的基地中遺漏了一些東西,但我不確定是什麼。也可能是使用者過濾器的問題。我已經完成了必要的Google搜尋,這讓我走到了這一步,但現在我沒有想法和解決方案。

經過多次不同的嘗試,我能夠解決這個問題。幾點注意事項:

  • 確保除第一行之外的所有行都有一個縮進空格。第一行是寫著“main:”的那一行,而且根本沒有縮進。
  • bind_dn 不是綁定使用者的完整 LDAP 路徑,而只是使用者名。就我而言,它是“xxx@example.com”。
  • 基礎需要是 Active Directory 組或 DN 或包含所有使用者的任何名稱。

這是最終的 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: ''

引用自:https://serverfault.com/questions/707770