アクセスログとは、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 \ |
注1:“enable-accesslog”はアクセスログモジュールのみ、“enable-overlays”はすべての追加モジュールを含めてコンパイルすることを指定するオプションです。
ここでは、OpenLDAPサーバ側の設定を行う前に、アクセスログを記録するバックエンドデータベースを配置するディレクトリを“var/openldap-accesslog”として準備します。
# cd /usr/local/openldap-2.4.19 |
次の例では、OpenLDAPサーバの設定ファイルslapd.confに、アクセスログの調査対象とするバックエンドデータベースをsuffix“dc=my-domain,dc=com”、またアクセスログを蓄積するバックエンドデータベースをsuffix“cn=accesslog”としてディレクティブを設定しています。
# cd /usr/local/openldap-2.4.19 |
注2:アクセスログで利用するスキーマ情報は、アクセスログモジュール内(overlays/accesslog.c)に実装されています。このため、設定ファイル内で、明示的にスキーマファイルを読み込む必要はありません。また、ここでのobjectClassはフィルタなしでの検索に備えるため、reqStartはlogpurge機能が利用するため、reqDNは後述の検索例でフィルタ条件に利用しているため、等価インデックス(eq)を指定しています。
上記の設定例では、「あるエントリのユーザーが、直近の1週間で、このOpenLDAPサーバを認証に利用できているか」を確認するアクセスログを取得することを目的としています。このような設定は、例えば、不要なエントリをクリーンアップする際に、現在もシステムを利用しているのか、それとも長くシステムを利用しておらず削除候補となるユーザーのエントリであるのかの判定に応用することができます。
設定変更後は、OpenLDAPサーバを再起動してアクセスログへの記録を開始します。
# cd /usr/local/openldap-2.4.19 |
次のコマンド例では、ここまでに説明したアクセスログ設定を行い、アクセスログが蓄積された後、特定エントリ(uid=test1000,ou=people,dc=my-domain,dc=com)の認証が成功した記録を確認するため、reqDN属性を条件に検索を行っています。
# cd /usr/local/openldap-2.4.19 |
アクセスログモジュールでは、次のディレクティブが利用可能です。
ディレクティブ | 説明 |
---|---|
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サーバのログの読み方を中心に説明します。
Copyright © ITmedia, Inc. All Rights Reserved.