Redmine
openldap
docker

docker上にRedmineとopenLDAP認証環境を構築

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

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

環境

  • CentOS7.3 (VMWare Fusion上にゲストOSとして構築)
  • Docker 1.12.6 (yumリポジトリのものを使用)
  • docker-compose 2.2.1 (yumリポジトリのものを使用)
  • Redmine redmine:3.4.2 (docker hubよりpull)
  • DB postgres:9.6.3 (docker hubよりpull)
  • OpenLDAP osixia/openldap:1.1.9、osixia/phpldapadmin:0.7.0 (docker hubよりpull)

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

1. dockerイメージの取得

$ docker pull osixia/openldap:1.1.9
$ docker pull osixia/phpldapadmin:0.7.0
$ docker pull redmine:3.4.2
$ docker pull postgres:9.6.3

2. 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へは反映されない。また、パスワードを変更する場合は、おぺんLDAPにログインして行う必要がある。

個人設定画面

参考