Mac OSXにOpenLDAPを導入・設定する手順 [P1]

#OpenLDAPの導入
MacはすでにOpenLDAPを含んでいますのでさらに導入するのは必要がありませんが、もうし導入したい場合は先立ってbrewを導入して以下のようにOpenLDAP導入する

- Brewの導入：http://brew.sh/
- brew install homebrew/dupes/openldap --with-berkeley-db4

#OpenLDAPの設定手順

##ldap.conf( /etc/openldap/ldap.conf ) : 

LDAPのBASEとURIを定義するところです

```shell-session
#
# LDAP Defaults
#
# See ldap.conf(5) for details
# This file should be world readable but not world writable.
#BASE   dc=example,dc=com
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666
BASE    dc=localhost
URI     ldap://localhost
#SIZELIMIT      12
#TIMELIMIT      15
#DEREF          never
TLS_REQCERT     demand
```
## slapd.conf ( /etc/openldap/slapd.conf )
まずは必要なスキーマを含めるようにする

```shell-session

include         /private/etc/openldap/schema/core.schema
include         /private/etc/openldap/schema/cosine.schema
include         /private/etc/openldap/schema/nis.schema
include         /private/etc/openldap/schema/inetorgperson.schema

```
bdpデータベースに応じてのモジュールをコメントアウトする

```shell-session

modulepath      /usr/libexec/openldap
moduleload      back_bdb.la
BDPデータベースに関する設定は以下になります
#######################################################################
 
# BDB database definitions
 
#######################################################################
database        bdb
suffix          "dc=localhost"
rootdn          "cn=Manager,dc=localhost"
rootpw          {SSHA}w2PML4P/bcKEiW1YfF8Y0PiJHaCnGAY9
```

- **rootdnは後ほどよく使われるので覚えておいてください。**
- **rootpwは別のターミナルでslappasswdで生成されます。**
- 新パスワードは仮で「admin」にしておく。
 
LDAPサーバーのデータの保存する場所はdirectoryで指定されます。

```shell-session
directory       /private/var/db/openldap/openldap-data
```

以上で書いてあるフォルダーへ移動してDBの必要なファイルをdefaultからcopyする

```shell-session

$cp DB_CONFIG.default DB_CONFIG

```

# LDAP操作
## 設定ファイル句法は正しいかどうかの確認

```
$sudo slaptest

```
 **[bdb_monitor_db_open: monitoring disabled; configure monitor database to enable
config file testing succeeded]がでてくるかもしれませんが無視してもいいです**

## サーバー起動
```shell-session
% sudo /usr/libexec/slapd -d3
```

無事に起動できればdn2id.bdbやid2entry.bdbが自動的に生成されましてサビスは上に指定していたURIで動いているはずです。psコマンドで確認できます

```shell-session
#ps -ef | grep slapd

```

## 検索
slapdを初めて起動したときの確認

```shell-session

$ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts

```

##登録

構成定義ファイルの拡張子はLDIFです。下の例ではorganization.ldif とする

```
dn:cn=company,dc=localhost
objectclass:dcObject
objectClass:organization
dc:localhost
o:My_Company
description:Company
```
ldapaddで登録する

```shell-session
$ldapadd -x -w admin -f organization.ldif -D "cn=Manager,dc=localhost" 
```
**要注意：**
- 「admin」は上に述べたrootpwである。
- 「cn=Manager,dc=localhost」は設定ファイルで定義した「rootdn」である。
 
## 削除

```shell-session
ldapdelete -x -w admin -D "cn=Manager,dc=localhost" "cn=company,dc=localhost" 
```
- 一番目のパラムはrootdnで２番目のパラムは削除したいアイテムです
- rootpwは最後に入られます

 
## objectClassについて

| No | オブジェクトクラス名	 | 必須属性名 | 意味 | 備考 |
|:-:|:-:|:-:|:-:|:-:|
|1   |  dcObject | dc  |  domain component |  - |
|2   | person  | sn  |  姓 |   |
|3   | person  |  cn | 人の名前 (common name)  |   |
 

## よく遭遇するトラブル

| No | 区分 | メッセージ | 対処 |
|:-:|:-:|:-:|:-:|
| 1  |  ldapsearch/add/delete | Can't contact LDAP server (-1)  | 環境変数LDAPCONFで指定されたldap.confのHOST設定は正しくない恐れがある |
| 2  | ldapsearch/add/delete  |  SASL(-1): generic failure: GSSAPI Error: Miscellaneous failure (No credentials cache found) |  -xオプションを付ければ解決|
| 3  | ldapsearch/add/delete  | ldap_delete: Strong(er) authentication required (8)　additional info: modifications require authentication  |  -xに加えて、-w secretも付けてみよう。secreteはrootpwの値です |
| 4  | ldapsearch/add/delete  | ldap_delete: Server is unwilling to perform (53)　additional info: no global superior knowledge  | 削除指定したDN名が不明確でrootDNは正しく指定されていない  |
| 5  | ldapsearch/add/delete  | ldap_bind: Invalid credentials (49)  |  -D [rootdn]をつけてみましょう。 |
| 6  | slapcat  | slap_startup failed  | OSを再起動したら治られるかも  |
| 7  | ldapadd  |  additional info: objectClass: value #0 invalid per syntax | 必要なschemaファイルがslapd.confでincludeされていない  |