1. 程式人生 > 實用技巧 >GitLab 通過ldap完成帳號認證

GitLab 通過ldap完成帳號認證

gitlab安裝參考官網:https://about.gitlab.com/install/#centos-7

預設情況下,Gitlab沒有開啟ldap的認證,這個功能需要通過配置檔案來啟用,所以在現有Gitlab中,往配置檔案裡邊新增如下配置:

vi /etc/gitlab/gitlab.rb

gitlab_rails['ldap_enabled'] = true gitlab_rails['prevent_ldap_sign_in'] = false gitlab_rails['ldap_servers'] = { 'main' => { 'label' => 'LDAP', # 隨便自定義
'host' => '10.0.20.19', # ldap的server地址 'port' => 389, # ldap埠 'uid' => 'cn', # 配置為cn或者sn都可以,但要注意使用者名稱稱將會以此處配置為依據 'bind_dn' => 'cn=admin,dc=aihelp,dc=net', # 管理員賬號 'password' => '123456', # 管理員密碼 'encryption' => 'plain', # 加密 'allow_username_or_email_login' => false, # 是否啟用郵件作為使用者名稱登陸
'block_auto_created_users' => false, 'base' => 'dc=aihelp,dc=net', # 核心配置,表示從哪一層讀取使用者資訊 'user_filter' => '(memberof=cn=jenkins,ou=group,dc=aihelp,dc=net)', # LDAP使用者進行過濾 'lowercase_usernames' => false, 'group_base' => '', 'admin_group' => '', 'external_groups' => [],
'sync_ssh_keys' => false } }
其中:
label 是顯示在GitLab登入框的上方文字描述。
host 和 port 是 LDAP 服務的主機地址及埠
bind_dn 和 password 是一個管理 LDAP 的 dn 及密碼
base 表示 LDAP 將以該 dn 為 節點,向下查詢使用者
user_filter 表示以某種過濾條件篩選使用者,比如假設我們只希望所屬組為 java-platform 的使用者來訪問 GitLab,則可以在這裡設定 (memberOf=ou=java-platform,ou=people,dc=domain,dc=com)

配置新增之後,依舊像安裝時候那樣,過載一下配置:
gitlab-ctl reconfigure

過載過程如果不報錯,可以使用如下命令驗證功能是否可用:

$ gitlab-rake gitlab:ldap:check
Checking LDAP ...
LDAP: ... Server: ldapmain
LDAP authentication... Success
LDAP users with access to your GitLab server (only showing the first 100 results)
    DN: uid=test01,ou=people,dc=eryajf,dc=net    cn: ceshi
    DN: uid=test02,ou=people,dc=eryajf,dc=net    cn: test02
    DN: uid=test03,ou=people,dc=eryajf,dc=net    cn: test03
    DN: uid=admin,ou=people,dc=eryajf,dc=net     cn: Admin
Checking LDAP ... Finished

使用ldap使用者名稱密碼進行登陸即可,此時登陸進去是沒有任何專案的許可權,如果需要某許可權,可以對使用者進行組或者單專案的授權。

關於老使用者的賬號許可權問題
在實際情況下,我們一般是先gitlab已有賬號,且運行了一段時日。後面的需求是接入LDAP,但是使用者和賬號是想保留,對於使用者來說是無感知的接入。

解決辦法: LDAP建立的賬號,cn=使用者名稱,description=姓名,mail=郵箱 對映 gitLab建立的賬號,Username=使用者名稱,Name=姓名, Email=郵箱 兩個賬戶體系的賬號,只要做到LDAP的郵箱mail和gitLab的郵箱Email一致,前者就不會重新建立賬號,後者的姓名不會被前者所覆蓋。 如果兩邊的賬號郵箱不一致,會存在兩個賬號。