===============================================
20171009_第2次修改 ccb_warlock
===============================================
今天調試gitlab接入AD域控,找了很多資料才解決了問題,在此處做記錄。
gitlab有自己的用戶機制,但其也兼容ldap的用戶驗證機制(本質上openldap和AD域控都是基於ldap機制),由於公司內部的統一賬戶機制正在調整,故需要將gitlab進行配置,試驗下來社區版的gitlab經過修改配置文件后可以使用openldap和微軟ad域控作為其用戶機制。
版本:gitlab 社區版 9.3.4(漢化)
gitlab目錄:/etc/gitlab
gitlab配置文件:/etc/gitlab/gitlab.rb(社區版初始該文件內容為空)
一、接入openldap
1.1 修改配置文件gitlab.rb
在gitlab.rb文件中添加下面配置,其中:
1.host,是搭建的openldap的ip,根據實際情況修改;
2.uid,可以配置cn,也可以配置uid,都能識別(具體為什么沒深入研究);
3.bind_dn,openldap的管理員賬號,根據實際情況修改;
4.password,openldap的管理員,根據實際情況修改;
5.active_directory,似乎是針對連接是否是ad域控的標示,因為這部分是openldap的配置,故為false;
6.allow_username_or_email_login,用戶登錄是否用戶名和郵箱都可以,方便用戶故配置true;
7.base,用戶列表所在的目錄,因為新增的用戶都在openldap的People下,故這么配置,根據實際情況修改;
1 # 指明服務的地址 2 external_url = 'http://localhost' 3 4 # 開啟ldap 5 gitlab_rails['ldap_enabled'] = true 6 gitlab_rails['ldap_servers'] = YAML.load <<-'EOS' ###! **remember to close this block with 'EOS' below** 7 main: # 'main' is the GitLab 'provider ID' of this LDAP server 8 label: 'LDAP' 9 host: '192.168.6.4' 10 port: 389 11 uid: 'uid' 12 method: 'plain' # "tls" or "ssl" or "plain" 13 bind_dn: 'cn=Manager,dc=abc,dc=cn' 14 password: '123456' 15 active_directory: false 16 allow_username_or_email_login: true 17 block_auto_created_users: false 18 base: 'ou=People,dc=abc,dc=cn' 19 user_filter: '' 20 EOS
1.2 重新加載新配置
# gitlab-ctl reconfigure
運行后最后一行為“gitlab Reconfigured!”才說明是加載新配置成功,否則就是根據報錯信息找錯誤。
1.3 查看是否能正常獲取用戶列表
# gitlab-rake gitlab:ldap:check
正常連接的情況下執行之后能看到用戶的列表
1.4 重啟gitlab
# gitlab-ctl restart

重啟成功后,gitlab的界面就會變成下面這樣。

openldap的用戶通過“LDAP”頁進入,管理員root通過“標准”頁進入。
二、接入AD
2.1 修改配置文件gitlab.rb
在gitlab.rb文件中添加下面配置,其中:
1.host,是搭建的微軟域服務器的ip,根據實際情況修改;
2.uid,必須配sAMAccountName才能識別;
3.bind_dn,域服務器的管理員賬號,根據實際情況修改;
4.password,域服務器的管理員,根據實際情況修改;
5.active_directory,似乎是針對連接是否是ad域控的標示,因為這部分是域服務器的配置,故為true;
6.allow_username_or_email_login,用戶登錄是否用戶名和郵箱都可以,方便用戶故配置true;
7.base,用戶列表所在的目錄,因為新增的用戶都在People下(試驗了用戶放在User時gitlab檢測不到用戶,故新建了一個目錄People,並將新建的用戶移入了該目錄下),故這么配置,根據實際情況修改;
external_url = 'http://localhost' 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: '192.168.6.1' port: 389 uid: 'sAMAccountName' method: 'plain' # "tls" or "ssl" or "plain" bind_dn: 'cn=Administrator,cn=users,dc=myad,dc=cn' password: '123456' active_directory: true allow_username_or_email_login: true block_auto_created_users: false base: 'ou=People,dc=myad,dc=cn' user_filter: '' EOS
2.2 重新加載新配置
# gitlab-ctl reconfigure
運行后最后一行為“gitlab Reconfigured!”才說明是加載新配置成功,否則就是根據報錯信息找錯誤。
2.3 查看是否能正常獲取用戶列表
# gitlab-rake gitlab:ldap:check
正常連接的情況下執行之后能看到用戶的列表
2.4 重啟gitlab
# gitlab-ctl restart

重啟成功后,gitlab的界面就會變成下面這樣。

openldap的用戶通過“LDAP”頁進入,管理員root通過“標准”頁進入。
2.5 確認該用戶不處於特殊狀態
1.不處於“禁用賬戶”的狀態;
2.不處於“需要首次登錄修改密碼”的狀態;
(處於上面任意一種狀態的賬戶在登錄gitlab時都會報“Cloud not authenticate you from Ldapmain because "Invalid creadentials".”)
參考資料:
1.https://my.oschina.net/firxiao/blog/357559
2.https://ssorc.tw/6358
3.https://docs.gitlab.com/ee/administration/auth/ldap.html
