CentOS7 + OpenLDAP最小構成の構築

# まえがき
OpenLDAP作るのは、社内の専門家の人にやってもらうのがほとんどなので、自分で作ることはまずないんだけど、ちょっとした用事で自前で作る必要があって、そのときに残したメモ。

とりあえず用意するだけっていうならこれでOKなはず。

ちなみに偉大な先人たちのほぼコピペです。ありがとうございます。


# 環境
CentOS 7(1503)

# 参考URL
* <http://qiita.com/kazukikudo/items/703d6e6664e13882fa0b> #非常に参考になりました。ありがとうございます。
* <http://www.unix-power.net/linux/openldap.html>
* <https://www.osstech.co.jp/~hamano/posts/centos7-openldap-ssh/>

# 準備
```
yum install openldap openldap-clients openldap-devel openldap-servers
cp -a /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
systemctl enable slapd
systemctl start slapd
```

# 実作業
基本パターンとして、OpenLDAPに何かを追加したいときは`ldapadd`を使用して、何かを変更したいときは`ldapmodify`を使用する。
それぞれのコマンドで"-w"で指定するのはパスワード。
今回の場合、`hogehoge`をパスワードとして利用している。

## サーバ管理者パスワード設定
slappasswdを使うとパスワード入力を求められるので、今後サーバ全体の管理者パスワードとして使用したい文字列を入力
そうするとハッシュ化された文字列が生成されるので、add_rootpw.ldifに入力

```
slappasswd
vim add_rootpw.ldif
ldapadd -Y EXTERNAL -H ldapi:// -f add_rootpw.ldif 
```

```bash:add_rootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: [slappasswdで出力されたハッシュ文字列を入力]
```

## ベースDNの変更
```
vim mod_dom.ldif
ldapmodify -x -D cn=config -w hogehoge -f mod_dom.ldif 
```

```bash:mod_dom.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=example,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=example,dc=com
```

## データベース管理者のパスワード設定
ベースDNのデータベース管理者のパスワードを設定。
サーバ管理者だとベースDNへの書き込み権限を持たず、エントリの追加が弾かれてしまう。

```
slappasswd
vim add_adminpw.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f add_adminpw.ldif
```

```bash:add_adminpw.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: [slappasswdで出力されたハッシュ文字列を入力]
```

## dcとかouとか追加
```
vim base.ldif
ldapadd -x -D "cn=Manager,dc=example,dc=com" -w hogehoge -f base.ldif 
```

```bash:base.ldif
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc.

dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group
```

## スキーマ拡張
これやらないとユーザ追加するときにobjectClassないやでーって言われて弾かれるから必須

```
ldapadd -Y EXTERNAL -H ldapi:// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:// -f /etc/openldap/schema/nis.ldif 
```

## ユーザ追加

```
vim add_user.ldif 
ldapadd -x -D "cn=Manager,dc=example,dc=com" -w hogehoge -f add_user.ldif 
```

```bash:add_user.ldif
dn: uid=0024a59b6ad0,ou=People,dc=example,dc=com
objectClass: posixAccount
objectClass: inetOrgPerson
sn: 0024a59b6ad0
cn: 0024a59b6ad0
uid: 0024a59b6ad0
displayName: 100
homeDirectory: /home/0024a59b6ad0
loginShell: /bin/bash
uidNumber: 1004
gidNumber: 1004
userPassword: 0024a59b6ad0
```

## 確認
これで全ユーザひっぱれる

```
ldapsearch -x -w hogehoge -D "cn=Manager,dc=example,dc=com" -b "ou=People,dc=example,dc=com"
```

## おまけ(ユーザの属性変更)
```
vim mod_user.ldif
ldapmodify -x -D "cn=Manager,dc=example,dc=com" -w hogehoge -f mod_user.ldif
```

```bash:mod_user.ldif
dn: uid=0024a59b6ad0,ou=People,dc=example,dc=com
changetype: modify
replace: displayName
displayName: 999
```