PostfixとDovecotとOpenLADP(その2/4) olcDbIndexとolcAccessを編集する。

セキュアなメールサーバーをLDAPを絡めて構築する。

環境:

Ubuntu LTS 12.04
Linux version 3.11.0-18-generic (buildd@toyol) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #32~precise1-Ubuntu SMP Thu Feb 20 17:52:10 UTC 2014
/usr/sbin/slapd -V
@(#) $OpenLDAP: slapd (Sep 19 2013 22:39:38) $
buildd@panlong:/build/buildd/openldap-2.4.28/debian/build/servers/slapd

前回は、openLDAP2.4へmail.schemaの追加を実施したので、今回はその続きから開始。引き続きPostfix+Dovecot+OpenLDAPでメールサーバ | UNIXLifeのページに従って行う。

OpenLDAP2.4のolcDbIndex

LDAPの性能はIndexに左右されるらしいので、そのチューニングを行う。 OpenLDAP2.3以降ではslapd.confが非奨励となっているので、またまたcn=configのデータツリーの変更作業が必要だ。 CentOS6 OpenLDAPのチューニングというナイスなページを見つけたので、その手順に従う。 まず、現状の設定を確認する。

root@IPD-0197:/var/lib/ldap# ldapsearch -Y EXTERNAL -H ldapi:/// -b olcDatabase={1}hdb,cn=config                        
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
# extended LDIF
#
# LDAPv3
# base <olcDatabase={1}hdb,cn=config> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# {1}hdb, config
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=ramuda,dc=co,dc=jp
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=admin,dc=nodomain" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=nodomain" write by * read
olcLastMod: TRUE
olcRootDN: cn=xxxx,dc=ramuda,dc=co,dc=jp
olcRootPW: {SSHA}MFceE6Hfd2NxfwqvfqwvfpDvuTo36CGPl9ATCnUZUX
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcDbIndex: objectClass eq

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

当たり前ではあるが、案の定、デフォルトのものしか設定されていないようだ。

index変更用のLDIFファイルを作成する。

root@IPD-0197:/home/kitada/ldap-modify# vi indexTune.ldif
dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcDbIndex
olcDbIndex: objectClass eq,pres
olcDbIndex: ou eq,pres,sub
olcDbIndex: cn eq,pres,sub
olcDbIndex: mail eq,pres,sub
olcDbIndex: surname eq,pres,sub
olcDbIndex: givenname eq,pres,sub
olcDbIndex: uidNumber eq,pres
olcDbIndex: gidNumber eq,pres
olcDbIndex: loginShell eq,pres
olcDbIndex: uid eq,pres,sub
olcDbIndex: memberUid eq,pres,sub
olcDbIndex: nisMapName eq,pres,sub
olcDbIndex: nisMapEntry eq,pres,sub

上記LDIFでLDAPの設定を変更する。

root@IPD-0197:/home/kitada/ldap-modify# ldapmodify -x -W -D cn=config -f ./indexTune.ldif 
Enter LDAP Password: 
modifying entry "olcDatabase={1}hdb,cn=config"

変更が正しく反映されたかを確認。

root@IPD-0197:/home/kitada/ldap-modify# ldapsearch -Y EXTERNAL -H ldapi:/// -b olcDatabase={1}hdb,cn=config             
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
# extended LDIF
#
# LDAPv3
# base  with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# {1}hdb, config
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=ramuda,dc=co,dc=jp
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=admin,dc=nodomain" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=nodomain" write by * read
olcLastMod: TRUE
olcRootDN: cn=xxxx,dc=ramuda,dc=co,dc=jp
olcRootPW: {SSHA}MFceE6Hfd2qvwefqwefqwNpDvuTo36CGPl9ATCnUZUX
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcDbIndex: objectClass eq,pres
olcDbIndex: ou eq,pres,sub
olcDbIndex: cn eq,pres,sub
olcDbIndex: mail eq,pres,sub
olcDbIndex: surname eq,pres,sub
olcDbIndex: givenname eq,pres,sub
olcDbIndex: uidNumber eq,pres
olcDbIndex: gidNumber eq,pres
olcDbIndex: loginShell eq,pres
olcDbIndex: uid eq,pres,sub
olcDbIndex: memberUid eq,pres,sub
olcDbIndex: nisMapName eq,pres,sub
olcDbIndex: nisMapEntry eq,pres,sub

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
root@IPD-0197:/home/kitada/ldap-modify#

設定できた。

OpenLDAP2.4のolcAccess

今回のセキュアなメールサーバ設定の手順には関係ないのだが、DN: olcDatabase={1}hdb,cn=configのolcAccess属性に気になる設定が…

  (省略)
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=ramuda,dc=co,dc=jp
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=admin,dc=nodomain" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=nodomain" write by * read
olcLastMod: TRUE
  (省略)

このdc=”cn=admin,dc=nodomain”は、apt-getでインストールした際のデフォルトのままだ。
これって大丈夫なのかなぁ。
ちょっと気持ち悪いんで、現状の正しい管理者にolcRootDNへ変更します。

olcAccess属性変更用のLDIFファイルを作成。

root@IPD-0197:/home/kitada/ldap-modify# vi olcAccChange.ldif 
dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=xxxx,dc=ramuda,dc=co,dc=jp" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=xxxxx,dc=ramuda,dc=co,dc=jp" write by * read

上記LDIFでLDAPの設定を変更する。

root@IPD-0197:/home/kitada/ldap-modify# ldapmodify -x -W -D cn=config -f ./olcAccChange.ldif 
Enter LDAP Password: 
modifying entry "olcDatabase={1}hdb,cn=config"

変更が反映されたかを確認する。

root@IPD-0197:/etc/ldap/slapd.d/cn=config# ldapsearch -Y EXTERNAL -H ldapi:/// -b olcDatabase={1}hdb,cn=config
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
# extended LDIF
#
# LDAPv3
# base <olcDatabase={1}hdb,cn=config> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# {1}hdb, config
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=ramuda,dc=co,dc=jp
olcLastMod: TRUE
olcRootDN: cn=xxxxx,dc=ramuda,dc=co,dc=jp
olcRootPW: {SSHA}MFceqvfwfwefE6Hfd2NpDvuTo36CGPl9ATCnUZUX
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcDbIndex: objectClass eq,pres
olcDbIndex: ou eq,pres,sub
olcDbIndex: cn eq,pres,sub
olcDbIndex: mail eq,pres,sub
olcDbIndex: surname eq,pres,sub
olcDbIndex: givenname eq,pres,sub
olcDbIndex: uidNumber eq,pres
olcDbIndex: gidNumber eq,pres
olcDbIndex: loginShell eq,pres
olcDbIndex: uid eq,pres,sub
olcDbIndex: memberUid eq,pres,sub
olcDbIndex: nisMapName eq,pres,sub
olcDbIndex: nisMapEntry eq,pres,sub
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=xxxxx,dc=ramuda,dc=co,dc=jp" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=xxxxx,dc=ramuda,dc=co,dc=jp" writ
 e by * read

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

よしOKかな。

インデックスの再構築

olcDbIndexを変更したので、インデックスを再構築する必要がありそう。
「slapindex -v -b dc=unixlife,dc=local -f slapd.conf
しなければならないらしいのだが、たぶんこれも駄目だろう。

googleの旅に出る。
OpenLDAP Software 2.4 Administrator’s Guide: Configuring slapdのページに、下記のような記述を発見した。

5.2.6.8. olcDbLinearIndex: { TRUE | FALSE }

If this setting is TRUE slapindex will index one attribute at a time. The default settings is FALSE in which case all indexed attributes of an entry are processed at the same time. When enabled, each indexed attribute is processed individually, using multiple passes through the entire database. This option improves slapindex performance when the database size exceeds the BDB cache size. When the BDB cache is large enough, this option is not needed and will decrease performance. Also by default, slapadd performs full indexing and so a separate slapindex run is not needed. With this option, slapadd does no indexing and slapindex must be used.

つまり、データベースのサイズがBDBキャッシュサイズを超えたなら意味があるよ。そうでないのなら指定する必要はないし、BDBキャッシュサイズが十分に大きい時にTUREにするとパフォーマンスが低下するよ。
という事らしい。・・・・・結局、olcDbIndexを変更する必要は無かったわけでしょうか?・・・・・

まぁ、いいや。このまま放置ということにします。

その3につづく

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>