※2019/10/09 Omnibus packageについて追記
LDAP内包Active Directory連携の記事はいくつかありましたが、OpenLDAP連携は見当たらなかったので設定でハマったところも含めて纏めました。
本稿ではGitLab Community EditionとOpenLDAPの連携設定を記載しています。※Enterprise Edition追加機能については取り扱いません。
#前提
GitLabのインストールが完了している事。※環境情報を含め別稿参照
# gitlab-rake gitlab:env:info
GitLab information
Version: 11.5.3
Revision: aa11737
#設定変更
GitLabの設定ファイルを編集します。
gitlab.rb
を開くと以下のようなLDAP設定群があります。
### LDAP Settings
###! Docs: https://docs.gitlab.com/omnibus/settings/ldap.html
###! **Be careful not to break the indentation in the ldap_servers block. It is
###! in yaml format and the spaces must be retained. Using tabs will not work.**
# gitlab_rails['ldap_enabled'] = false
###! **remember to close this block with 'EOS' below**
# gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
# main: # 'main' is the GitLab 'provider ID' of this LDAP server
# label: 'LDAP'
# host: '_your_ldap_server'
# port: 389
# uid: 'sAMAccountName'
# encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
# bind_dn: '_the_full_dn_of_the_user_you_will_bind_with'
# password: '_the_password_of_the_bind_user'
# active_directory: true
# allow_username_or_email_login: false
# lowercase_usernames: false
# block_auto_created_users: false
# base: ''
# user_filter: ''
# ## EE only
# group_base: ''
# admin_group: ''
# sync_ssh_keys: false
#
# secondary: # 'secondary' is the GitLab 'provider ID' of second LDAP server
# label: 'LDAP'
# host: '_your_ldap_server'
# port: 389
# uid: 'sAMAccountName'
# bind_dn: '_the_full_dn_of_the_user_you_will_bind_with'
# password: '_the_password_of_the_bind_user'
# encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
# verify_certificates: true
# active_directory: true
# allow_username_or_email_login: false
# lowercase_usernames: false
# block_auto_created_users: false
# base: ''
# user_filter: ''
# ## EE only
# group_base: ''
# admin_group: ''
# sync_ssh_keys: false
# EOS
これを以下のように設定します。
## EE only
以下の設定やセカンダリLDAPサーバはCommunity Editionでは使用できないのでコメントアウトしたまま設定は変更しません。
**忘れないで**とコメントあるように本ブロック最終行のEOS
を忘れずにアンコメントします。
### LDAP Settings
###! Docs: https://docs.gitlab.com/omnibus/settings/ldap.html
###! **Be careful not to break the indentation in the ldap_servers block. It is
###! in yaml format and the spaces must be retained. Using tabs will not work.**
gitlab_rails['ldap_enabled'] = true
###! **remember to close this block with 'EOS' below**
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
main: # 'main' is the GitLab 'provider ID' of this LDAP server
label: 'LDAP Account'
host: '192.168.1.200'
port: 389
uid: 'uid'
bind_dn: 'cn=gitlab-BaseDN,ou=People,dc=example,dc=co,dc=jp'
password: 'p@ssw0rd'
encryption: 'plain'
verify_certificates: false
active_directory: false
allow_username_or_email_login: true
lowercase_usernames: true
block_auto_created_users: false
base: 'dc=example,dc=co,dc=jp'
user_filter: ''
# ## EE only
# group_base: ''
# admin_group: ''
# sync_ssh_keys: false
#
# secondary: # 'secondary' is the GitLab 'provider ID' of second LDAP server
# label: 'LDAP'
# host: '_your_ldap_server'
# port: 389
# uid: 'sAMAccountName'
# bind_dn: '_the_full_dn_of_the_user_you_will_bind_with'
# password: '_the_password_of_the_bind_user'
# encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
# verify_certificates: true
# active_directory: true
# allow_username_or_email_login: false
# lowercase_usernames: false
# block_auto_created_users: false
# base: ''
# user_filter: ''
# ## EE only
# group_base: ''
# admin_group: ''
# sync_ssh_keys: false
EOS
本設定に用いたLDAP設定及びアカウント情報は下記画像の通りです。
##設定項目解説
キー | 説明 |
---|---|
gitlab_rails['ldap_enabled'] | LDAPユーザ認証機能の有効化 |
label | サインインページの認証選択タブのラベル表示※後述1 |
host | LDAPサーバのホスト |
port | LDAPサーバのポート |
uid | LDAPアカウントの項目でGitLabユーザー名としたい属性を指定1 |
bind_dn | 接続先LDAPに存在する適当なアカウント2の完全なDNを指定 |
password | bind_dnで設定したLDAPアカウントのパスワード |
encryption | 暗号化方法 |
verify_certificates | SSL暗号化を使用している場合のSSL証明書による検証の有効化 |
active_directory | LDAPサーバーがActive Directory LDAPサーバーであるかどうか |
allow_username_or_email_login | 有効化している場合はサインイン時のユーザ名入力項目で@以降の入力を無視する3,4 |
lowercase_usernames | LDAPユーザー名の小文字を有効にする |
block_auto_created_users | 新規に作成されるユーザをブロック状態にする※後述2 |
base | GitLabがLDAPサーバからユーザを検索し始めるルート階層 |
user_filter | 特定のLDAPユーザのみフィルタしたい場合にLDAPクエリを指定 |
###後述1:label
解説の通りです。例えば以下のような設定にすれば画像のようになります。
label: 'えるだっぷ'
###後述2:block_auto_created_users
GitLabユーザーに登録の無いユーザーがLDAPを用いて認証(サインイン)するとLDAP情報を参照し、自動でGitLabユーザーが作成されます。
ユーザー作成と同時にGitLabへサインインができるようになりますが、本項目をtrueにしておくと新規作成されたユーザーはデフォルトでブロック状態となり、画像のようにサインインできなくなります。(作成済みのユーザーは通常通りサインイン可能です。)
サインインできるようにするにはGitLab管理者ユーザーでサインインして、管理領域 > ユーザーの Blocked タブに新規作成されたユーザーが居るはずなので右の設定ボックスからUnblockをクリックします。
#設定適用
以下コマンドで変更内容を適用します。完了まで1~2分程度かかります。
# gitlab-ctl reconfigure
Starting Chef Client, version 13.6.4
resolving cookbooks for run list: ["gitlab"]
Synchronizing Cookbooks:
- package (0.1.0)
~~(中略)~~
Running handlers:
Running handlers complete
Chef Client finished, 7/586 resources updated in 43 seconds
gitlab Reconfigured!
#確認
LDAP連携設定ができているか確認します。
正しく連携設定ができていれば、以下コマンドで設定した接続先LDAPサーバにて見つかったアカウント情報を取得できます。
このコマンドで情報が取得できなかった場合は設定内容を見直してください。
# gitlab-rake gitlab:ldap:check RAILS_ENV=production
Checking LDAP ...
Server: ldapmain
LDAP authentication... Success
LDAP users with access to your GitLab server (only showing the first 100 results)
DN: cn=hoge,ou=people,dc=example,dc=co,dc=jp uid: hoge
DN: cn=huga,ou=people,dc=example,dc=co,dc=jp uid: huga
DN: cn=piyo,ou=people,dc=example,dc=co,dc=jp uid: piyo
~~(中略)~~
Checking LDAP ... Finished
コマンド結果問題なければブラウザからサインインページへアクセスしてください。
左端に設定したlabelでLDAPアカウント認証用のタブが追加されている筈です。
#LDAP以外のユーザー新規登録を制限したい場合
LDAP連携ができたのでLDAP以外の方法でユーザーの新規登録ができないようにしたい場合があると思います。
その場合はGitLab管理者ユーザーでサインインして、管理領域 > 設定 > サインアップの制限 スクロール内の「Sign-up enabled」項目のチェックを外した後にスクロール内の「Save changes」をクリックして変更を保存してください。
サインインページ認証項目右端のRegisterタブが消えている筈です。
#補足
設定ファイルは3つありますが、
gitlab.rb
にてアンコメントした設定項目は再読み込み(設定適用)時に
gitlab.yml
の同じ設定項目の値を上書きするので基本的にgitlab.rb
を編集します。
※Omnibus package版ではないGitLabを利用している場合は、gitlab.rb
が無いようですのでgitlab.yml
を修正してください。
/var/opt/gitlab/gitlab-rails/etc/gitlab.yml
/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
/etc/gitlab/gitlab.rb
#参考
LDAP | GitLab Docs
How to configure LDAP with GitLab CE | GitLab Docs
Setting up LDAP sign-in | GitLab Docs
GitLabでLDAP連携するための設定
GitLabでLDAP(ActiveDirectory)認証の設定をする
GitLabにLDAPでログインする
authentication - GitLab & OpenLDAP: Invalid credentials - Server Fault
-
デフォルト設定のまま変更していない方が多いのですが、OpenLDAPでは'uid'等に変更しないとLDAP連携に成功しませんでした。
公式ドキュメントには記載が無いですが、LDAPアカウントから取り込む際にGitLabのユーザ名となる属性名を指定するのかな?と考えています。 ↩ -
LDAP管理者アカウントでなくても良い。 ↩
-
例えばjane.doe@example.comと入力した内容は ⇒ jane.doeとして認証される。 ↩
-
uid項目の値が一意になるならtrueにしても大丈夫な筈です。 ↩