dockerでldapサーバを立てる


# 概要

gitlabサーバやredmineサーバを立ち上げるのユーザの一元管理をしたい思いldapサーバを立ち上げました。世の中ではsamba4などもあるみたいですが、まずはdockerでopenldapサーバだけを立ち上げました。そのうちgitlabサーバと連携したいと思っています。

# 参考サイト

以下のサイトを参考にしています。

- [CI/CD関連ツールのユーザー情報をLDAPで一元管理してみる](https://qiita.com/kazuki43zoo/items/0d4e5c22d7c76fc3c76f)
- [docker上にRedmineとopenLDAP認証環境を構築](https://qiita.com/ir-shin1/items/12d0dbea40d1f1f06747)

# 環境

下表のような環境で動作しています。

|-|-|
|:-- |:-- |
| ホストPC | lubuntu 18.04 |
| docker | 18.06.0-ce |
| docker-compose | 1.22.0 |

# docker-compose.yml

以下のようなdocker-compose.ymlを用意します。ldapサーバ本体のopenldapとwebブラウザ上からldapサーバの管理ができるphpldapadminの2つの設定をしています。

```
version: '3'

services:
  ldap-server:
    image: osixia/openldap:latest
    restart: always
    container_name: ldap-host
    environment:
      LDAP_ORGANISATION: "dmaf"
      LDAP_DOMAIN: "airimania.com"
      LDAP_ADMIN_PASSWORD: "dondake19940412"
    networks:
      - webnet

  ldap-admin:
    image: osixia/phpldapadmin:latest
    restart: always
    container_name: ldap-admin
    environment:
      PHPLDAPADMIN_LDAP_HOSTS: "ldap"
      PHPLDAPADMIN_HTTPS: "false"
    ports:
      - "8080:80"
    links:
      - "ldap-server:ldap"
    networks:
      - webnet

networks:
  webnet:
```

# サーバの起動

上で用意したdocker-compose.ymlのあるディレクトリでdocker-compose upコマンドでコンテナを起動します。初回起動時はイメージをダウンロードするため少し時間がかかります。

```
$ ls
docker-compose.yml
$ docker-compose up -d
Pulling ldap-server (osixia/openldap:latest)...
latest: Pulling from osixia/openldap
f2aa67a397c4: Pull complete
1d225acca1cf: Pull complete
f6ee938fdfb5: Pull complete
b984a0680ade: Pull complete
3f3d50974264: Pull complete
ce7e422fcd12: Pull complete
998fb9cc9f69: Pull complete
242749cf31f0: Pull complete
Digest: sha256:6ceb347feb37d421fcabd80f73e3dc6578022d59220cab717172ea69c38582ec
Status: Downloaded newer image for osixia/openldap:latest
Pulling ldap-admin (osixia/phpldapadmin:latest)...
latest: Pulling from osixia/phpldapadmin
afeb2bfd31c0: Pull complete
a3d3c5dab1e4: Pull complete
918b0d782d3a: Pull complete
75da0c7eae3a: Pull complete
4339b9002d45: Pull complete
cff1838ed856: Pull complete
987155a2bc0b: Pull complete
325d85698781: Pull complete
e196b746c3ec: Pull complete
Digest: sha256:1ab629698ae0abff6e00d23feb978d5345abf656205cb5da3795daedec8cad9e
Status: Downloaded newer image for osixia/phpldapadmin:latest
Creating ldap-host ... done
Creating ldap-admin ... done
```

docker-compose psコマンドで起動しているコンテナの確認が出来ます。

```
$ docker-compose ps
   Name            Command         State               Ports            
------------------------------------------------------------------------
ldap-admin   /container/tool/run   Up      443/tcp, 0.0.0.0:8080->80/tcp
ldap-host    /container/tool/run   Up      389/tcp, 636/tcp 
```

# ldapサーバログイン

サーバに接続するとログイン画面が表示されました。この例ではdockerホスト=ローカルホストなのでlocalhost:8080で接続しています。接続すると以下のようが画面が現れます。

![ldap_top.png](https://qiita-image-store.s3.amazonaws.com/0/271649/56bb9969-9a86-cda8-b92b-1f5d7a000083.png)

adminは初期設定でされているようなのでcn=admin、dcはdocker-compose.ymlのLDAP_DOMAINで定義した値を入れ、PasswordはLDAP_ADMIN_PASSWORDで定義した値でログインできます。上のdocker-compose.ymlでは以下のようになります。



|  属性名 | 値    |
|:-----------------|:------------------|
| Login DN            |       cn=admin,dc=airimania,dc=com | 
| Password | dondake19940412              |

![ldap_login.png](https://qiita-image-store.s3.amazonaws.com/0/271649/16a475a8-0ebf-94ae-f83c-ae24dd0fd4cf.png)

## エントリの追加

この記事ではdmafという名前のouとその下にユーザmon.higumaを作成します。

まずはouの作成をします。

1. 左のツリーの下Create new entry hereを押す
2. Generic: Organisational Unitをチェックする
3. Organizational Unitに名前をつける
4. Commitボタンを押す


![ldap_ou.png](https://qiita-image-store.s3.amazonaws.com/0/271649/23248914-43e7-22dc-1fb0-bbd3e5fce230.png)

次にouの下にユーザを作成します。

1. ou=dmafの画面を開くとCreate a child entryがあるのでクリックする
2. Kolab: User Entryをチェックする
3. 各項目を埋める最低限First Name, Last Name, Common Name, Enail, Passwordを埋めれば良い。


![ldap_createuser.png](https://qiita-image-store.s3.amazonaws.com/0/271649/39f6972c-838b-5018-c299-d0b06dad39cd.png)


ユーザのエントリが出来ました。

![ldap_user.png](https://qiita-image-store.s3.amazonaws.com/0/271649/e595d051-f2d9-1052-758b-e6df4c038514.png)