Fedora12のopenldapを動的設定に対応させる

yumの自動更新によってopenldapが更新されると、設定ファイルslapd.confがslapd.conf.bakに書き換えられ、再起動に失敗するので、動的設定に対応してみました。

環境

  • Fedora12
  • openldap*-2.4.19-3.fc12.x86_64 => openldap*-2.4.19-4.fc12.x86_64
  • openldapの起動オプションに設定ファイル/etc/openldap/slapd.confを指定
    • /etc/sysconfig/ldap
      • SLAPD_OPTIONS='-f /etc/openldap/slapd.conf'
  • syncprovで、マルチマスタプロバイダ+コンシューマ混在設定
+--+                +--+
 | p | -------------| p |
+--+                +--+
    |
   +-----+-----+----+
    |        |        |       |
+--+ +--+ +--+ +--+
 | c |   | c |   | c |   | c |
+--+ +--+ +--+ +--+
p = プロバイダ
c = コンシューマ

目的

  • yumの自動更新後の再起動に失敗しないようにする。
  • LDAP経由で設定変更可能なようにする。

動的設定用データベース保存ディレクトリの再作成

# rm -rf /etc/openldap/slapd.d
# mkdir /etc/openldap/slapd.d
# chown ldap:ldap /etc/openldap/slapd.d

各設定ファイルの変更

動的設定の有効化

/etc/openldap/slapd.confの最終行に下記を追加する。

database config
rootdn cn=admin,cn=config                      # 動的設定で使用する管理者DN
rootpw {SSHA}dfjk;sdfjFDJKjrehrieru=df  # slappasswdコマンドで暗号化したパスワード
起動オプションの削除(デフォルト値に戻す)

/etc/sysconfig/ldapの"SLAPD_OPTIONS="をコメントアウト

#SLAPD_OPTIONS='-f /etc/openldap/slapd.conf'

slapdコマンドで動的設定へ初期データの移行と起動

slapdコマンドに移行する設定ファイルと動的設定用データベースを保存するディレクトリを指定して起動

# slapd -u ldap -h ldap:/// ldaps:///  -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
# cat /var/run/openldap/slapd.args  <= 起動オプションの確認
/usr/sbin/slapd -h  ldap:/// ldaps:/// -u ldap -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
設定確認

動的設定用データベースの内容を確認。
slapdコマンド実行時に指定した設定ファイルとディレクトリのパスが書き込まれていればOK

# ldapsearch -x -v -D cn=admin,cn=config -b cn=config -W
ldap_initialize( <DEFAULT> )
Enter LDAP Password:                     # <= パスワードを入力
filter: (objectclass=*)
requesting: All userApplication attributes
# extended LDIF
#
# LDAPv3
# base <cn=config> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# config
dn: cn=config
objectClass: olcGlobal
cn: config
olcConfigFile: /etc/openldap/slapd.conf  <= 設定ファイルパス
olcConfigDir: /etc/openldap/slapd.d         <= 動的設定用データベースのディレクトリパス
olcAllows: bind_v2
olcArgsFile: /var/run/openldap/slapd.args
olcAttributeOptions: lang-
olcAuthzPolicy: none
olcConcurrency: 0

動的設定保存確認

再起動して、動的設定に移行された設定で起動するかどうか確認
ちなみに、起動オプションに設定ファイル等が未指定の場合の優先度は下記の順

  1. 動的設定用データベースディレクトリ(有効である場合)
  2. 設定ファイル
# service slapd restart
# cat /var/run/openldap/slapd.args  <= 起動オプションの確認
/usr/sbin/slapd -h  ldap:/// ldaps:/// -u ldap    <= 設定ファイルやディレクトリが削除されている
# ldapsearch -x -v -D cn=admin,cn=config -b cn=config -W
ldap_initialize( <DEFAULT> )
Enter LDAP Password:                     # <= パスワードを入力
filter: (objectclass=*)
requesting: All userApplication attributes
# extended LDIF
#
# LDAPv3
# base <cn=config> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# config
dn: cn=config
objectClass: olcGlobal
cn: config
olcConfigFile: /etc/openldap/slapd.conf 
olcConfigDir: /etc/openldap/slapd.d         <= 動的設定用データベースのディレクトリパス
olcAllows: bind_v2
olcArgsFile: /var/run/openldap/slapd.args
olcAttributeOptions: lang-
olcAuthzPolicy: none
olcConcurrency: 0

LDAPデータを検索できるか確認

LDAPで管理している既存データの確認

# ldapsearch -x

LDAPユーザの確認

# id smbldapuser01
uid=1004(smbldapuser01) gid=513(Domain Users) 所属グループ=513(Domain Users)

設定ファイルのバックアップ

次回更新されても問題ないようにファイル名を下記の名前でバックアップ

# mv /etc/openldap/slapd.conf /etc/openldap/_slapd.conf

作業後

ldap*コマンドでopenldapの設定ができるようになったけれど、プロバイダからコンシューマにopenldapのコンシューマ用設定を配布できる方法が見つからなかったので、コンシューマでも上記の移行作業を行いました。(コンシューマ x 10台)

ただ、コンシューマの設定はすべて同じだったので、Funcというフレームワークを使用して一括で設定を行いました。