Apache Directory Studio で OpenLDAP 2.4 環境をゆるふわ構築

RHEL 6 系は OpenLDAP が 2.4 になっており，設定が OpenLDAP 上に存在していじれる (on-line configuration) ということで，今までの知識と異なる部分がある。

今回は 参考サイト: [CentOS 6にOpenLDAP環境を構築する](http://www.02.246.ne.jp/~torutk/linux/centos6/openldap.html) をベースに構築してみる。

## 初期設定

参考サイトの「dc=config へのアクセス設定」あたりまではこのとおりにやる (ここはさすがに Apache Directory Studio でさわれないので)。
ここで注意するのは，ここで作成した `dc=config` のパスワードというのは，on-line configuration 用のアカウント (とパスワード) であるということ。

## on-line configuration による基本設定

### on-line configuration 用 connection profile の作成

1. Apache Directory Studio を立ち上げ，「New LDAP Connection」を作成する
    1. 接続の設定は……
        1. 「Connection Name」は適当に名付ける
        2. 「Hostname」に LDAP サーバのホスト名を入力する
        3. 「Next」をおす
    2. 認証情報の設定は……
        1. 「Authentication Method」は「Simple Authentication」のままで
        2. 「Bind DN or user」に `cn=config` と入力
        3. 「Bind password」に先ほどのパスワードを入力
            - 入力しなくてもよい。接続時に効かれるようになる。
            - 「Check Authentication」で認証できるかテストできるので楽
    3. Base DN の設定は……
        1. 「Get base DNs from Root DSE」のチェックを外す (重要)
        2. 「Base DN」に `cn=config` と入力

### 各種基本設定を行う

`my-domain.com` ではなく `example.org` に変更する場合。

1. 左のツリーペインで `cn=config` ノードを開く
2. さらにツリーペインの `olcDatabase={1}monitor` を選択する
    1. `olcAccess` の Value の `by dn.base="cn=manager,dc=my-domain,dc=com"` という部分を `by dn.base="cn=Manager,dc=example,dc=org"` に変更する
3. ツリーペインの `olcDatabase={2}bdb` を選択する
    1. `olcSuffix` を `dc=my-domain,dc=com` から `dc=example,dc=org` に変更する
    2. `olcRootDN` を `cn=Manager,dc=my-domain,dc=com` から `cn=Manager,dc=example,dc=org` に変更する
    3. 右側のペインペインで右クリックするとメニューに「New Attribute...」があるので選択
        1. `olcRootPW` を作成
        2. Value に `{SSHA}` パスワード等を入力する

ここで設定した `cn=Manager,dc=example,dc=org` (とパスワード) がツリー全体の管理者アカウント的なものになる。先ほどの `cn=config` と異なることに注意。
つまり，ツリーをいじるためにはあたらしい connection profile を作成する必要がある。

先ほどの `cn-config` 用 connection profile と同様に `cn=Manager,dc=example,dc=org` 用 connection profile を作成する。
(こんどは「Get base DNs from Root DSE」はオンのままでいいと思うけど)

## LDAP ツリーの操作

### Root tree の整備

`cn=Manager,dc=example,dc=org` で接続しなおす (以降は `cn=config` のままではうまくいかない)。

普通は Organization を作成したりするんだろうけど，ここでは (ActiveDirectory に倣い) ツリーのルートに `domain` objectClass なコンテナを作成してみる。

1. 左ツリーペインの「Root DSE」を右クリックして「New Context Entry」を選択
2. 「Create entry from scratch」を選択し「Next」
3. 「Object Classes」に `domain` を「Add」 (`top` も自動的に追加される) して，「Next」
4. `DN` に `dc=example,dc=org` を入力し, 「Next」
5. 「Finish」を押下

これで左のツリーペインの「Root DSE」の下に `dc=example,dc=org` という名前で地球儀アイコンのエントリが作成される。
初めてのエントリ作成おめでとう。

### Person の作成

もうあとは同じようにできると思うけど。
Hoge Fuga さんのレコードを作成してみる。

1. 今作成した `dc=example,dc=org` ノードを右クリックし (こんどは) 「New Entry」を選択
2. 「Object classes」に `person` を「Add」して「Next」
3. Distinguished Name を設定する
    1. 「RDN:」が `cn = Hoge Fuga` となるようにする。
        1. (実は，DN のベースにするのは `cn` でなくても構わない。objectClass に `uidObject` を追加して，`uid` を一意キーに含めてもいい)
    2. 「DN Preview」が `cn=Hoge Fuga,dc=sub,dc=example,dc=org` となる
4. Next すると `sn` が必須属性なのに空で怒られるので「Hoge」と入力
5. Finish すると作成される

今作成したユーザを一意に識別する識別子が，さきほどの `cn=Hoge Fuga,dc=sub,dc=example,dc=org` である。

この Person にパスワード (`userPassword`) を設定すると，このユーザで LDAP ツリーにアクセスすることができるようになる。

1. 右メインペインで右クリックし，「New Attribute ...」を選択
2. `userPassword` を入力
3. Password Editor が立ち上がるのでパスワードを設定

Person に `userPassword` フィールドを設定するのは必須ではないけど，設定すると，そのユーザが自分でアクセスできるよ，という話。


ちなみにバルクで追加するなら，結局 LDIF ファイルを作るのが吉。