41
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

docker上にRedmine、gitlabのopenLDAP認証環境を構築

docker環境で openLDAP認証を使用してRedmine、gitlabにログインする。

docker上にRedmineのインストールを行ったが、gitlabやJenkinsなどの導入を考慮すると、ユーザ管理の認証に工夫が必要になる。
いろいろググると、openLDAP、Active DirectoryやOAuthで認証する方法があるらしいので、まずは、openLDAPでの認証を試してみる。

環境

  • docker desktop for mac 2.1.0.5
  • OpenLDAP osixia/openldap:1.3.0、osixia/phpldapadmin:0.9.0
  • DB postgres:12.1-alpine
  • Redmine redmine:4.0.5-alpine

いつものように、dockerのイメージはlatestではない最新のタグを使用する。
openldapでサーチを行うと、osixia/openldapが先頭に出てきたので、使用するopenLDAPはosixia/openldapとした。本当はOFFICIALなopenLDAPがあれば良かったのだが。

1. docker設定

osixia/docker-openldapを参考にインストール、起動を行う。

今までdockerコマンドを直接叩いていたが、docker-compose を使ってみる。
使用するポートは、80がredmine用、8080がPHPLDAPadminの設定用に割り当てる。また、LDAPの認証確認のため永続化のためのvolumeは割り当てない。

docker-compose.yml の記述方法バージョンがあり、version 2にするとlinksの設定が上手く各コンテナの /etc/hosts に反映されなかったので、バージョン未指定にしていたが、コンテナ内でpingを打つと応答が返ってきたので、dockerのDNSサーバがアドレス解決しているようだ。

docker-compose.yml
version: '2'

services:
  openldap:
    image: osixia/openldap:1.1.9
    container_name: test1-ldap
    environment:
      LDAP_ORGANISATION: "example"
      LDAP_DOMAIN: "example.com"
      LDAP_ADMIN_PASSWORD: "ldappw"

  admin:
    image: osixia/phpldapadmin:0.7.0
    container_name: test1-ldapadmin
    environment:
      PHPLDAPADMIN_LDAP_HOSTS: "ldap"
      PHPLDAPADMIN_HTTPS: "false"
    ports:
      - "8080:80"
    links:
      - "openldap:ldap"

  redmine:
    image: redmine:3.4.2
    container_name: test1-redmine
    environment:
      REDMINE_DB_PASSWORD: rdpassword
    ports:
      - "80:3000"
    links:
      - "postgres:postgres"
      - "openldap:ldap"

  postgres:
    image: postgres:9.6.3
    container_name: test1-postgres
    environment:
      POSTGRES_PASSWORD: rdpassword
      POSTGRES_USER: redmine

3. 起動

$ docker-compose up -d
Creating network "dockeropenldap_default" with the default driver
Creating test1-postgres
Creating test1-ldap
Creating test1-ldapadmin
Creating test1-redmine
$ docker ps
CONTAINER ID   IMAGE                       COMMAND                 CREATED         STATUS         PORTS                           NAMES
c8a2dc1abb60   redmine:3.4.2               "/docker-entrypoint.s"  15 seconds ago  Up 13 seconds  0.0.0.0:80->3000/tcp            test1-redmine
f0e6bd74985b   osixia/phpldapadmin:0.7.0   "/container/tool/run"   15 seconds ago  Up 13 seconds  443/tcp, 0.0.0.0:8080->80/tcp   test1-ldapadmin
9d2a041e880e   osixia/openldap:1.1.9       "/container/tool/run"   17 seconds ago  Up 14 seconds  389/tcp, 636/tcp                test1-ldap
b2aeed884b3a   postgres:9.6.3              "docker-entrypoint.sh"  17 seconds ago  Up 15 seconds  5432/tcp                        test1-postgres

4. OpenLDAPの設定

ホストPCからゲストにアクセスする。 http://192.168.45.131:8080

phpLDAPadminホーム

4.1 ログイン

loginを押下し、ログインを行う。

  Login DN: cn=admin,dc=example,dc=com
  Password: ldappw

phpLDAPadminログイン

ログインするとホーム画面を表示

phpLDAPadminホーム画面

4.2 Organisational Unitの作成

認証するユーザを登録するUnit(ou)を作成する。

「dc=example,dc=com」を開き、「Create new entry here」を選択

Organisational Unitの作成

「Generic: Organisational Unit」を選択、Unit名に「ProjectX」を入力

Organisational Unit名の選択

「ProjectX」を入力後、「Create Object」、「commit」を選択しouを作成

Organisational Unit名の設定

4.3 ユーザの登録

「ou=ProjectX,dc=example,dc=com」配下にユーザを登録する。

「ou=ProjectX」を開き、「Create a child entry」を選択

ユーザの登録

「Kolab: User Entry」を選択

ユーザ情報入力

以下の入力フィールドに値を入れる。Common NameをRedmineのログインIDとするため、Common Nameは半角英数字としている。

  • First name (例:山田)
  • Last name (例:太郎)
  • Common Name (例:taro.yamada)
  • Email (例:taro.yamada@example.com)
  • Password (パスワードの暗号化は、何でも良いが、趣味で ssha)

ユーザ情報入力

「Create Object」(ページの下の端)、「commit」を選択しユーザを作成する。

ユーザ登録

複数人ユーザを登録する場合は、これを繰り返す。

5. Redmineの設定

ホストPCからゲストにアクセスする。http://192.168.45.131

5.1 ログイン

redmineログイン

ユーザadmin、パスワードadminでログインする。パスワード変更画面になるので、adminのパスワードを変更する。

5.2 新しい認証方式の追加

「管理」⇒「LDAP認証」⇒「新しい認証方式」で設定方式の追加を行う。

認証方式情報入力

  • 名称:openLDAP
  • ホスト:ldap
  • ポート:389
  • アカウント:cn=admin,dc=example,dc=com
  • パスワード:ldappw
  • ベースDN:ou=ProjectX,dc=example,dc=com

あわせてユーザーを作成:チェック

  • ログインIDの属性:cn
  • 名の属性:givenName
  • 姓の属性:sn
  • メールアドレスの属性:mail

認証方式登録

認証方式登録

5.3 ログアウトし、LDAPで登録したユーザ(taro.yamada)でログイン

「あわせてユーザーを作成」をチェックしているので、Redmineに登録していないユーザは自動的に登録される。

登録ユーザログイン

6. Redmineの終了

コンテナを終了後、コンテナを削除し、獲得したvolumeを削除する。

$ docker-compose down -v

課題?

Redmineの個人設定の画面から、名、性、メールアドレスが変更できるが、変更した内容がopenLADPへは反映されない。また、パスワードを変更する場合は、openLDAPにログインして行う必要がある。

個人設定画面

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
41
Help us understand the problem. What are the problem?