Vagrant+DockerでLDAPサーバを構築

# Vagrant+DockerでLDAPサーバを構築

今回はVirtualBox + Vagrantを使って、仮想環境を構築。

さらに、仮想環境にDockerを入れLDAPサーバを動かす。

## 仮想環境を構築
今回はVirtualBox + Vagrantを使って、仮想環境を構築。
* まず、仮想環境を2個作るための設定を書き出し。

```:Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.box = "ubuntu14.04"

  config.vm.define :server do |node|
    node.vm.box = "ubuntu14.04"
    node.vm.network :private_network, ip:"192.168.33.11"
  end

  config.vm.define :client do |node|
    node.vm.box = "ubuntu14.04"
    node.vm.network :private_network, ip:"192.168.33.12"
  end
end
```

* 仮想環境の起動

`vagrant up`

## server側の操作
* server側のメモリ量が足りないので、VirtualBoxのGUIからメモリ量を4GBに増やした。
* dockerのInstall

```bash
sudo -s
apt-get update
wget -qO- https://get.docker.com/ | sh
```

* docker imageをDL

```bash
docker pull osixia/openldap
docker pull osixia/phpldapadmin
```

* docker containerを作成するスクリプトを書き出し

```bash:ldap.sh
SERVICE=ldap-service
HOST_NAME=ldap-host
PASSWORD=adminpass
DOMAIN=example.com

docker run \
    -p 389:389 \
    --name $SERVICE \
    --hostname $SERVICE \
    --env 'LDAP_ORGANISATION=Lab' \
    --env LDAP_DOMAIN=$DOMAIN \
    --env LDAP_ADMIN_PASSWORD=$PASSWORD \
    --detach \
    osixia/openldap

docker run \
    -p 443:443 \
    --name ${SERVICE}-admin \
    --hostname ${SERVICE}-admin \
    --link $SERVICE:$HOST_NAME \
    --env PHPLDAPADMIN_LDAP_HOSTS=$HOST_NAME \
    --detach \
    osixia/phpldapadmin
```

* docker を走らせる
`bash ldap.sh`

## phpldapadminの操作

* phpldapadminがブラウザ上から閲覧できるので、ブラウザで`https://192.168.33.11`にアクセス

* loginする。

```
DN : cn=admin,dc=example,dc=com
PW : adminpass
```

* ouを作成する。

create new entry here から　Generic: Organisational Unitを選択

![ou.jpg](https://qiita-image-store.s3.amazonaws.com/0/136317/11889a41-43dd-5f2c-6789-4d57e2568273.jpeg)

ou=people と　ou=group　を作成する。

* groupの作成

ou=group の Create a child entry を選択し、Generic: Posix Group を選択

適当にこんな感じで作成。

![group.jpg](https://qiita-image-store.s3.amazonaws.com/0/136317/f1501eba-ca83-134b-e6b2-7761404de86b.jpeg)

* userの作成

ou=people の Create a child entry を選択し、Generic: User Account を選択

適当にこんな感じで作成。

![user.jpg](https://qiita-image-store.s3.amazonaws.com/0/136317/b2395f10-2b9b-43c2-7a4f-b04e57374637.jpeg)

## client側の操作

* まず必要なものをInstall

```bash
sudo -s
apt-get install libnss-ldap libpam-ldap ldap-utils
```

コマンド実行すると、紫のBGにいろいろ出てくるので色々設定していく。

* LDAP URI の指定

ここ間違えると動かないし、先頭はldapi:///ではないので要注意。　
`ldap://192.168.33.11:389/`

* base の指定 `dc=example,dc=com`

* LDAP Version の指定 `3`

* 次2つの選択はDefaultでOK

* 管理アカウントの設定 `cn=admin,dc=example,dc=com`

* 管理アカウントのPW `adminpass`

* 暗号化 `md5`

これでLDAP自体の設定は終わり。UbuntuがLDAPを使うように設定していく。

* /etc/nsswitch.conf の編集

```:/etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap

hosts:          files myhostname dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       ldap nis
```

* /etc/pam.d/common-password の編集

```:/etc/pam.d/common-password
#
# /etc/pam.d/common-password - password-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define the services to be
# used to change user passwords.  The default is pam_unix.

# Explanation of pam_unix options:
#
# The "sha512" option enables salted SHA512 passwords.  Without this option,
# the default is Unix crypt.  Prior releases used the option "md5".
#
# The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in
# login.defs.
#
# See the pam_unix manpage for other options.

# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules.  See
# pam-auth-update(8) for details.

# here are the per-package modules (the "Primary" block)
password        [success=2 default=ignore]      pam_unix.so obscure sha512
password        [success=1 user_unknown=ignore default=die]     pam_ldap.so try_first_pass
# here's the fallback if no module succeeds
password        requisite                       pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
password        required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
# end of pam-auth-update config
```

ここで再起動して、ユーザーが反映されているか見てみる。

`getent passwd`

これでさっき作成したユーザが反映されていれば終わり。

## 参考
* http://qiita.com/kokardy/items/1179bb2f96f790acc6c5
* http://christina04.blog.fc2.com/blog-entry-179.html