連載
» 2010年01月20日 00時00分 公開

OpenLDAPによるディレクトリサーバ運用(3):ものいわぬOpenLDAPサーバのログ管理 (3/3)

[菊池研自,伊藤忠テクノソリューションズ株式会社]
前のページへ 1|2|3       

OpenLDAPサーバのアクセスログ

 アクセスログとは、OpenLDAPサーバにモジュールを追加することで利用可能となる機能であり、アクセス状況を把握する目的で利用されます。このアクセスログは、指定するバックエンドデータベースに対して行われたbind(認証)、add(追加)、modify(変更)といった指定する操作を、ファイルではなく別のバックエンドデータベースへ記録することができます。また、記録したログはldapsearchにて条件を絞り込んで参照できます。

 本連載の対象OSであるCentOSにバンドルされるOpenLDAPサーバ(openldap-serversパッケージ)には、アクセスログモジュールが含まれていません。CentOS 5.3以降、アクセスログなどのオーバレイ機能は、openldap-servers-overlaysパッケージとして、別途、提供されています。

 また、アクセスログは、OpenLDAPサーバのコンパイル時にも、デフォルトでは含まれないオプションです。この機能を利用するには、コンパイルの過程で“--enable-accesslog=yes”または“--enable-overlays=yes”など、明示的にオプションを追加する必要があります(注1)。

$ CPPFLAGS=-I/usr/local/BerkeleyDB.4.7/include \
> LDFLAGS=-L/usr/local/BerkeleyDB.4.7/lib \
> ./configure --prefix=/usr/local/openldap-2.4.19 --enable-accesslog=yes

注1:“enable-accesslog”はアクセスログモジュールのみ、“enable-overlays”はすべての追加モジュールを含めてコンパイルすることを指定するオプションです。


アクセスログの出力

 ここでは、OpenLDAPサーバ側の設定を行う前に、アクセスログを記録するバックエンドデータベースを配置するディレクトリを“var/openldap-accesslog”として準備します。

# cd /usr/local/openldap-2.4.19
# mkdir var/openldap-accesslog
# cp etc/openldap/DB_CONFIG.example var/openldap-accesslog/
# chown -R ldap.ldap var/openldap-accesslog
# chmod 700 var/openldap-accesslog

 次の例では、OpenLDAPサーバの設定ファイルslapd.confに、アクセスログの調査対象とするバックエンドデータベースをsuffix“dc=my-domain,dc=com”、またアクセスログを蓄積するバックエンドデータベースをsuffix“cn=accesslog”としてディレクティブを設定しています。

# cd /usr/local/openldap-2.4.19
# vi etc/openldap/slapd.conf

...[略]...
# 監査対象のバックエンドデータベース
database        bdb
suffix          "dc=my-domain,dc=com"
rootdn          "cn=Manager,dc=my-domain,dc=com"
rootpw          secret
directory       /usr/local/openldap-2.4.19/var/openldap-data

index   objectClass     eq
...[略]...         ↓ 監査対象のDB "dc=my-domain,dc=com"への設定
overlay accesslog  ←アクセスログモジュールを利用
logdb cn=accesslog ←アクセスログ用のデータベースを指定
logops bind        ←記録対象のLDAPの操作を指定
logpurge 7+00:00 1+00:00 ←毎日チェックし、7日以前の記録は削除
logsuccess TRUE    ←記録対象であっても失敗した操作は記録しない

# アクセスログ用のデータベースの設定
database        bdb
suffix          "cn=accesslog"
directory       /usr/local/openldap-2.4.19/var/openldap-accesslog
index   objectClass,reqStart,reqDN    eq         ←検索対象の属性 ※注2
access to *
    by dn.base="cn=Manager,dc=my-domain,dc=com" read ←管理者のみ参照可

注2:アクセスログで利用するスキーマ情報は、アクセスログモジュール内(overlays/accesslog.c)に実装されています。このため、設定ファイル内で、明示的にスキーマファイルを読み込む必要はありません。また、ここでのobjectClassはフィルタなしでの検索に備えるため、reqStartはlogpurge機能が利用するため、reqDNは後述の検索例でフィルタ条件に利用しているため、等価インデックス(eq)を指定しています。


 上記の設定例では、「あるエントリのユーザーが、直近の1週間で、このOpenLDAPサーバを認証に利用できているか」を確認するアクセスログを取得することを目的としています。このような設定は、例えば、不要なエントリをクリーンアップする際に、現在もシステムを利用しているのか、それとも長くシステムを利用しておらず削除候補となるユーザーのエントリであるのかの判定に応用することができます。

 設定変更後は、OpenLDAPサーバを再起動してアクセスログへの記録を開始します。

# cd /usr/local/openldap-2.4.19
# kill -INT `cat var/run/slapd.pid`

# ./sbin/slapindex -b cn=accesslog        ←すでにアクセスログが記録された状態で
# chown -R ldap.ldap var/openldap-accesslog ←indexを変更した場合に実行が必要
# ./libexec/slapd -u ldap

アクセスログの確認

 次のコマンド例では、ここまでに説明したアクセスログ設定を行い、アクセスログが蓄積された後、特定エントリ(uid=test1000,ou=people,dc=my-domain,dc=com)の認証が成功した記録を確認するため、reqDN属性を条件に検索を行っています。

# cd /usr/local/openldap-2.4.19
# ./bin/ldapsearch -x -b cn=accesslog -D cn=Manager,dc=my-domain,dc=com -W \
> reqDN=uid=test1000,ou=people,dc=my-domain,dc=com -LLL

Enter LDAP Password:    ←管理者ユーザーのパスワードを入力(ここでは“secret”)
#                       ←7日以内に認証が成功した記録がなく、エントリが返らない

アクセスログに設定可能なディレクティブ一覧

 アクセスログモジュールでは、次のディレクティブが利用可能です。

ディレクティブ 説明
logdb アクセスログを蓄積するバックエンドデータベースのsuffixを指定
例)logdb cn=accesslog
logops 記録対象とする操作(add、delete、modify、modrdn、compare、search、bind、unbind、abandon)を指定。次のエイリアス利用も可能。
writes:add、delete、modify、modrdnを含む
reads:compare、searchを含む
session:bind、unbind、abandonを含む
all:すべての操作を含む
例)logops bind writes
logold 削除(delete)、変更(modify)処理にて、変更前のエントリ情報を記録する対象エントリを特定するために、マッチさせるフィルタを指定
例)logold uid=test*
logoldattr 変更処理(modifyおよびmodrdn)にて、変更前の値も記録対象とする属性を指定
例)logoldattr cn uid uidNumber
logpurge ログを保持する期間および削除可能かどうかの確認を行う間隔を指定。時間の指定に利用するフォーマットは[ddd+]hh:mm[:ss]。日数、秒は省略可能
例)logpurge 7+00:00 1+00:00
logsuccess TRUEを設定した場合は、成功した操作のみを記録。デフォルトはFALSEであり、成功、失敗に関わらずlogopsで指定された操作を記録
例)logsuccess TRUE

 次回は、もう1つのログに関連する追加モジュールである監査ログモジュールと、今回説明したsyslogに送付するOpenLDAPサーバのログの読み方を中心に説明します。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。