【LDAP環境構築:1】 openldap-servers インストールから起動まで

##### パッケージのインストール

```shell-session:
yum install openldap-servers
```
>
```
Dependencies Resolved
>
================================================================================
 Package               Arch        Version                   Repository    Size
================================================================================
Installing:
 openldap-servers      x86_64      2.4.23-32.el6_4.1         updates      2.0 M
Installing for dependencies:
 libtool-ltdl          x86_64      2.2.6-15.5.el6            base          44 k
 make                  x86_64      1:3.81-20.el6             base         389 k
 portreserve           x86_64      0.0.4-9.el6               base          23 k
Updating for dependencies:
 openldap              x86_64      2.4.23-32.el6_4.1         updates      265 k
>
Transaction Summary
================================================================================
Install       4 Package(s)
Upgrade       1 Package(s)
```

##### /etc/openldap/slapd.d の初期化と作業ディレクトの作成
RHEL6 では、アクセス手段のない設定データベースがインストール時に作成されるので削除

```shell-session:
rm -rf /etc/openldap/slapd.d/*
rm -rf /var/lib/ldap/*
mkdir -p /etc/openldap/tmp
chmod 600 /etc/openldap/tmp
```

##### Berkeley DBのバッファキャッシュの設定
Berkeley DBのバッファキャッシュ設定サンプルファイルをコピーする

```shell-session:
cp -av /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap /var/lib/ldap/DB_CONFIG
```

##### /etc/openldap/slapd.conf の作成
slapdの設定サンプルファイルをコピーする

```shell-session:
cp -av /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
```

##### LDAP 管理者のパスワードの作成
slappasswd コマンドでパスワードを生成しslapd.confのrootpw行に貼り付ける

```shell-session:
slappasswd -s 任意のパスワード
```
>
```
{SSHA}QYZEVs/nSk0mesckgE8R7kyQcliSm9AI
```

##### /etc/openldap/slapd.conf の修正

```shell-session:
vi /etc/openldap/slapd.conf
```
>
```text:slapd.conf
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
#----------------------------------------------------------
# スキーマファイルの設定
#----------------------------------------------------------
include         /etc/openldap/schema/corba.schema
include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/duaconf.schema
include         /etc/openldap/schema/dyngroup.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/java.schema
include         /etc/openldap/schema/misc.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/openldap.schema
include         /etc/openldap/schema/ppolicy.schema
include         /etc/openldap/schema/collective.schema
#----------------------------------------------------------
# 接続プロトコル
#----------------------------------------------------------
allow bind_v2
#----------------------------------------------------------
# 管理ファイル
#----------------------------------------------------------
pidfile                 /var/run/openldap/slapd.pid
argsfile                /var/run/openldap/slapd.args
#----------------------------------------------------------
# TLS の設定
#----------------------------------------------------------
#TLSCACertificatePath   /etc/openldap/cacerts/cacert.pem
TLSCertificateFile     /etc/openldap/certs/server.csr
TLSCertificateKeyFile  /etc/openldap/certs/server.key
#----------------------------------------------------------
# アクセスコントロールの設定
#----------------------------------------------------------
#--- userPassword に対するアクセス制限
#       自分自身は書き換え可能
#       Manager は書き換え可能
#       匿名接続ならば、認証したときにこの属性が使える
#       その他のアクセスの際は何もできない
access to attrs=userPassword
         by self write
         by dn="cn=Manager,dc=example,dc=com" write
         by anonymous auth
         by * none
#--- その他の属性に対するアクセス制限
#       自分自身は書き換え可能
#       Manager は書き換え可能
#       その他のアクセスの際はread のみ可能
access to *
         by self write
         by dn="cn=Manager,dc=example,dc=com" write
         by * read
#--- monitor データベースに対するアクセス制限
#       Manager は read のみ可能
#       その他のアクセスの際は何もできない
#       確認コマンド ldapsearch -x -D "cn=Manager,dc=example,dc=com" -W  +
database monitor
access to *
        by dn.exact="cn=Manager,dc=example,dc=com" read
        by * none
#----------------------------------------------------------
# データーベースの設定
#----------------------------------------------------------
# database      バックエンドデータベースの形式
# suffix        ベースDN
# checkpoint    トランザクションログのチェックポイント設定 <kbyte> <min>
# rootdn        管理者
# rootpw        管理者のパスワード(slappasswdコマンドで作成)
# directory     Database directory, Mode 700 recommended.
database        bdb
suffix          "dc=example,dc=com"
checkpoint      1024 15
rootdn          "cn=Manager,dc=example,dc=com"
rootpw          {SSHA}QYZEVs/nSk0mesckgE8R7kyQcliSm9AI
directory       /var/lib/ldap
#----------------------------------------------------------
# indexの設定
#   eq:等価性 pres:存在 sub:部分文字列
#   indexの設定を変更したら、indexの再構築が必要
#   slapindex -v -b "dc=example,dc=com" -f slapd.conf
#----------------------------------------------------------
index objectClass                       eq,pres
index ou,cn,mail,surname,givenname      eq,pres,sub
index uidNumber,gidNumber,loginShell    eq,pres
index uid,memberUid                     eq,pres,sub
index nisMapName,nisMapEntry            eq,pres,sub
```

##### /etc/openldap/slapd.conf のチェック

```shell-session:
sudo -u ldap slaptest -u -v -f /etc/openldap/slapd.conf
```
>
```
config file testing succeeded
```

##### /etc/openldap/slapd.d の更新

```shell-session:
sudo -u ldap slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
```
>エラーがでるが無視してよい
>
```shell
bdb_db_open: database "dc=example,dc=com": db_open(/var/lib/ldap/id2entry.bdb) failed: No such file or directory (2).
backend_startup_one (type=bdb, suffix="dc=example,dc=com"): bi_db_open failed! (2)
slap_startup failed (test would succeed using the -u switch)
```

##### LDAP サーバーの起動

```shell-session:
chkconfig slapd on
/etc/init.d/slapd start
```