nginxでldap認証を体験


## 参考

* [h3nrik/nginx-ldap Repository | Docker Hub Registry - Repositories of Docker Images](https://registry.hub.docker.com/u/h3nrik/nginx-ldap/)

## 今回利用するdockerイメージ

```bash:
docker pull h3nrik/nginx-ldap
docker pull nickstenning/slapd
```

## ホスト側での準備

```bash:
sudo apt-get install ldap-utils
wget https://raw.githubusercontent.com/g17/nginx-ldap/master/config/sample.ldif
wget https://raw.githubusercontent.com/g17/nginx-ldap/master/config/basic/nginx.conf
```

# LDAPサーバ

```bash:ldapという名前でコンテナ起動
docker run \
 -e LDAP_DOMAIN=example.com \
 -e LDAP_ORGANIZATION="Example Ltd." \
 -e LDAP_ROOTPASS=toor \
 --name ldap \
 -d \
 -p 389:389 nickstenning/slapd
```

* pass: toor


## LDAPサーバにアカウント登録

```bash:sample.ldifを使う
ldapadd \
 -v \
 -h localhost:389 \
 -c \
 -x \
 -D cn=admin,dc=example,dc=com \
 -W \
 -f sample.ldif
```

```bash:登録確認
ldapsearch  \
 -v \
 -h localhost:389 \
 -b 'ou=users,dc=example,dc=com' \
 -D 'cn=admin,dc=example,dc=com'  \
 -x \
 -W '(&(objectClass=person)(uid=test))'
```

# nginx

* ./nginx.conf のログ出力場所を修正

```diff:
-   error_log /usr/local/nginx/logs/error.log;
-   access_log /usr/local/nginx/logs/access.log;
+   error_log /var/log/nginx/error.log debug;
+   access_log /var/log/nginx/access.log;
```

## nginx起動

```bash:
docker run \
 --name nginx \
 --link ldap:ldap \
 -d \
 -v `pwd`/nginx.conf:/etc/nginx/nginx.conf:ro \
 -p 80:80 h3nrik/nginx-ldap
```

## webページの認証を確認

![auth.png](https://qiita-image-store.s3.amazonaws.com/0/25728/5fe25c34-3a26-792e-bdc6-fabce8a70b31.png "auth.png")

* test / t3st で nginxの認証が通ることを確認。

```bash:ログの見方
docker exec -i -t nginx less /var/log/nginx/error.log
```

* shift-f でtailモード。

## パスワードの変更

* [ldapmodify によるエントリの変更 (Sun Java System Directory Server Enterprise Edition 6.3 管理ガイド)](http://docs.oracle.com/cd/E19575-01/820-4816/bcacx/index.html)

```ldif:元ファイル(sample.ldif)抜粋
  dn: uid=test,ou=users,dc=example,dc=com
  objectclass: inetOrgPerson
  objectclass: person
  gn: Test
  sn: Person
  cn: Test Person
  uid: test
  userPassword: t3st
```

```diff:change_pass.ldif
  dn: uid=test,ou=users,dc=example,dc=com
- objectclass: inetOrgPerson
- objectclass: person
- gn: Test
- sn: Person
- cn: Test Person
- uid: test
+ changetype: modify
+ replace: userPassword
+ userPassword: t3st2
```

```bash:変更実施
ldapmodify -v -h localhost:389 -c -x -D cn=admin,dc=example,dc=com -W -f change_pass.ldif
```

* test / t3st2 で nginxの認証が通ることを確認。

## ユーザ(ken)の追加

```ldif:add_ken.ldif
dn: uid=ken,ou=users,dc=example,dc=com
objectclass: inetOrgPerson
objectclass: person
gn: Test
sn: Person
cn: Test Person
uid: ken
userPassword: pass1
```

```bash:適用
ldapadd -v -h localhost:389 -c -x -D cn=admin,dc=example,dc=com -W -f add_ken.ldif
```

## グループにユーザ(ken)追加

```bash:mod_member.ldif
dn: cn=docker,ou=groups,dc=example,dc=com
changetype: modify
add: member
member: uid=ken,ou=users,dc=example,dc=com
```

```bash:適用
ldapmodify -v -h localhost:389 -c -x -D cn=admin,dc=example,dc=com -W -f mod_member.ldif
```

* ken / pass1 で nginxの認証が通ることを確認。

次は [sharaku/ldap Repository | Docker Hub Registry - Repositories of Docker Images](sharaku/ldap Repository | Docker Hub Registry - Repositories of Docker Images) を試してみる。