OpenLDAPの設定ディレクトリ

#設定ディレクトリのエントリと役割
OpenLDAPへのサーバーの設定は、設定ディレクトリ(Config Directory)の情報を変更することで行う

| エントリのdn | 役割 |
|:-----------|:------------|
| cn=config       | LDAPサーバ全体の設定を管理するエントリ        |
| cn=schema,cn=config     | スキーマデータを管理するためのコンテナ      |
| olcDatabase={-1}frontend,cn=config       | LDAPサーバが扱うデータベースの設定を管理する        |
| olcDatabase={0}config,cn=config         | 設定ディレクトリへのアクセス権など、設定ディレクトリに関する設定を管理するエントリ          |
| olcDatabese={1}mdb,cn=config       | データ用ディレクトリの設定を管理するエントリ       |

・「{0}」のような数値がついて表記されているものがあり、同じ階層のエントリの中で順序に意味がある場合に付けられるプレフィックス

#設定ディレクトリへのアクセス
rootユーザでldapi:///というURLに対してアクセスすることで設定ディレクトリへのアクセスを行う
ldapi:///はUNIXドメインソケットを使ってローカルなLDAPサーバと通信を行うための指定

ldapsearchコマンドで設定を確認する場合の動作例
`-Y EXTERNAL` LDAP Version 3のSASL認証の機能のうち外部認証(Linuxユーザ認証)を使用する指定
`-b` 設定ディレクトリのベースDNを指定

```
# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'cn=config' '(objectClass=*)' dn
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=config

dn: cn=schema,cn=config

dn: cn={0}core,cn=schema,cn=config

dn: olcDatabase={-1}frontend,cn=config

dn: olcDatabase={0}config,cn=config

dn: olcDatabase={1}mdb,cn=config

```
`SASL/EXTERNAL authentication started` LDAPサーバへ接続し、SASL/EXTERNAL認証を行うことを表示
`SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth` SASL認証に使うユーザ名を表示
cn=peercred,cn=external,cn=authは、Linuxユーザでの認証を示す
gidNumber=0+uidNumber=0は、rootユーザのUID、GIDそのもの
`SASL SSF: 0` 認証が成功したことを示す
`dn: cn=config` 以降が検索の結果

`-Q` オプションを使用すると以上の表示を抑制できる

```
# ldapsearch -LLL -Q -Y EXTERNAL -H ldapi:/// -b 'cn=config' '(objectClass=*)' dn
dn: cn=config

dn: cn=schema,cn=config

dn: cn={0}core,cn=schema,cn=config

dn: olcDatabase={-1}frontend,cn=config

dn: olcDatabase={0}config,cn=config

dn: olcDatabase={1}mdb,cn=config

```
##アクセスの簡略化
長いコマンドラインを簡略化する方法

```
# vi /usr/local/etc/openldap/ldap.conf
+URI     ldapi:///
+SASL_MECH EXTERNAL
+BASE    cn=config

# ldapsearch -Q -LLL '(objectClass=*)' dn
dn: cn=config

dn: cn=schema,cn=config

dn: cn={0}core,cn=schema,cn=config

dn: olcDatabase={-1}frontend,cn=config

dn: olcDatabase={0}config,cn=config

dn: olcDatabase={1}mdb,cn=config

```
#設定の確認
ldapsearchコマンドを使用してcn=configのエントリの内容を閲覧する例

```
# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config '(cn=config)'
dn: cn=config
objectClass: olcGlobal
cn: config
olcConfigFile: slapd.conf
olcConfigDir: slapd.d
olcArgsFile: /usr/local/var/run/slapd.args
olcAttributeOptions: lang-
olcAuthzPolicy: none
olcConcurrency: 0
olcConnMaxPending: 100
olcConnMaxPendingAuth: 1000
olcGentleHUP: FALSE
olcIdleTimeout: 0
olcIndexSubstrIfMaxLen: 4
olcIndexSubstrIfMinLen: 2
olcIndexSubstrAnyLen: 4
olcIndexSubstrAnyStep: 2
olcIndexHash64: FALSE
olcIndexIntLen: 4
olcListenerThreads: 1
olcLocalSSF: 71
olcLogLevel: 0
olcMaxFilterDepth: 1000
olcPidFile: /usr/local/var/run/slapd.pid
olcReadOnly: FALSE
olcSaslAuxpropsDontUseCopyIgnore: FALSE
olcSaslSecProps: noplain,noanonymous
olcSockbufMaxIncoming: 262143
olcSockbufMaxIncomingAuth: 16777215
olcThreads: 16
olcThreadQueues: 1
olcToolThreads: 1
olcWriteTimeout: 0
```
#設定の変更
ldapmodifyコマンドを使用する
##ルートDNのパスワードの変更(属性値の変更)
登録状況の確認

```
# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b olcDatabase={1}mdb,cn=config
dn: olcDatabase={1}mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {1}mdb
olcDbDirectory: /usr/local/var/openldap-data
olcSuffix: dc=example,dc=com
olcAddContentAcl: FALSE
olcLastMod: TRUE
olcLastBind: TRUE
olcMaxDerefDepth: 15
olcReadOnly: FALSE
olcRootDN: cn=Manager,dc=example,dc=com
olcRootPW: {SSHA}904gvYMd0lwUC9Vtj5FzkG2DnbvRWOg4
olcSyncUseSubentry: FALSE
olcMonitoring: TRUE
olcDbNoSync: FALSE
olcDbIndex: objectClass eq
olcDbMaxReaders: 0
olcDbMaxSize: 1073741824
olcDbMode: 0600
olcDbSearchStack: 16
olcDbMaxEntrySize: 0
olcDbRtxnSize: 10000
```
`olcRootDN`という属性の値を変更する

次のLDIFファイルを用意する
※rootpasswd

```
# cat /usr/local/etc/openldap/ldif/change-rootpw.ldif
dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}9c/3/IFFHubW9nkC0ppbZwS38B2+t1g5
```
LDIFファイルを指定して設定を変更

```
# ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f /usr/local/etc/openldap/ldif/change-rootpw.ldif
modifying entry "olcDatabase={1}mdb,cn=config"
```
変更されたことを確認

```
#  ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b olcDatabase={1}mdb,cn=config |grep olcRootPW
olcRootPW: {SSHA}9c/3/IFFHubW9nkC0ppbZwS38B2+t1g5
```
ここまで
#参考
・『入門LDAP/OpenLDAP ディレクトリサービス導入・運用ガイド 第3版』