技術的雑談-OpenLDAP 2.3のLDAP経由の設定を使う
環境
- CentOS 5.2
- OpenLDAP 2.3.27 (CentOS 5.2標準)
目的
- OpenLDAP 2.3のLDAP経由の設定を使えるようにする
内容
OpenLDAPのInstall
おもいっきり省略。
技術的雑談-OpenLDAPを立ち上げてみるを参照。
設定保存のディレクトリを作成
CentOS5.2の場合、OpenLDAPのデーモン(slapd)の設定ファイルは/etc/openldap/slapd.confにあるが、
同じディレクトリに「slapd.d」というディレクトリを作成する。
このディレクトリがないとLDAP経由で行われた設定がメモリ上でしか反映されず、保存されないらしい。
さらに、slapdのユーザ権限(CentOS5.2の場合は「ldap」ユーザ)でディレクトリ内に書き込み権限がないとダメっぽい。
# mkdir /etc/openldap/slapd.d # chown ldap:ldap /etc/openldap/slapd.d
設定ファイル編集
/etc/openldap/slapd.confの最後に以下の3行を追加する。
database config rootdn cn=config rootpw {SSHA}Um+mHLNo3Wht1TEiVuFzpsKOxxxxxxxx ← slappasswd -s なんとか で作ったパスワードハッシュ
さらに、slapd.confの内容を元にslapd.dディレクトリの中身の初期状態(?)を作る。
# su -c 'slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d' ldap config file testing succeeded
そうすると、/etc/openldap/slapd.d以下にファイルが作成される。
# ls -la 合計 8 drwxr-x--- 3 root root 4096 4月 8 15:03 cn=config -rw------- 1 root root 941 4月 8 15:03 cn=config.ldif
これらのファイルのパーミッションをldapユーザで読み書き可能なように変更しておく。
(そうしないと起動時に警告が出る。)
# chown -R ldap:ldap /etc/openldap/slapd.d
さらに、
CentOS(RedHat系?)の場合、service〜でslapdを起動すると、「slapd.d」ディレクトリを使用するコマンドラインオプションがそのままでは使われないので、コマンドライン引数を渡してやる必要がある。
具体的には、/etc/sysconfig/ldapというファイルを作成し、以下の内容を記述する。
(root権限で読めればOK。)
SLAPD_OPTIONS='-f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d'
(これに気がつかずにかなりハマった!!!!!!!!!)
ちなみに、設定が正しく行われていると、service ldap startした後に/var/run/openldap/slapd.argsの内容が、
/usr/sbin/slapd -h ldap:/// -u ldap -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
になっているが、OS Defaultのまま(=/etc/sysconfig/ldapファイルを作らない)場合、
/usr/sbin/slapd -h ldap:/// -u ldap
になっており、slapdにslapd.dディレクトリの存在が渡っていないことがわかる。
slapd起動
# service ldap start または # service ldap restart
接続
コマンドラインから接続してみる。
# ldapsearch -x -D cn=config -w hogehoge -b cn=config
何やらエントリーがたくさん表示されれば正解。
JXplorerからは、
- Host : <サーバのIPアドレス、又はhostname>
- Port : 389
- Protocol : LDAP v3
- DSML Service : <空欄のまま>
- Base DN : cn=config (固定?)
- Security :
- Level : User + Password
- User DN : cn=config
- Password : hogehoge (slappasswdの-sの後に指定した暗号化前のパスワード)
でアクセスできる。
動的変更できることの確認
てっとり早くJXplorerで接続。
で、左のツリーから「config」を選択し、右側のペインのタブで「Table Editor」を選択。
SSHなどでサーバに接続して、変更前の/etc/openldap/slapd.d/cn=config.ldifのタイムスタンプの確認をしておく。
確認できたらJXplorerから何かの値を変更する。
先ほどと同様に/etc/openldap/slapd.d/cn=config.ldifのタイムスタンプを確認し、更新されていればたぶん成功。
ちゃんと動的変更が効いていることを確認するために、slapdのLogLevelを変更してみる。
slapdのログは全てsyslogd経由で「local4」で出るらしいのでまず、syslogd.confの末尾に以下の行を追加する。
# Save slapd log message to slapd.log local4.* /var/log/slapd.log
次に/var/log/slapd.logを作成しておく。
# touch /var/log/slapd.log
さらに、syslogdに-HUPを送ってsyslog.confの変更を反映させる。
# kill -HUP <syslogdのpid>
「tail -f /var/log/slapd.conf &」 などを実行してslapd.logに変化があったらコンソールに出るようにしておき、その状態でJXplorerから「最新の状態に更新」などを実行する。
すると、コンソールにぶわっとslapdのログが吐かれる。
吐かれれば成功。
これ、後々セキュリティー機能を設定したりレプリケーションを行ったりしたときに非常に便利。
動的変更が保存されていることの確認
上記のLogLevelの変更を行った後でslapdを再起動してみる。
# service ldap restart
(tailを続けたままなら)slapd.logにslapd終了のlogと、その後の再起動と初期処理のログがぶわっと出れば成功。
履歴
- 2009/04/08 -- 初版
- 2009/04/10 -- /etc/sysconfig/ldapのあたりの設定を追記
技術的雑談へ戻る