こんにちは、サイオステクノロジーの藤原です。
今回はCentOSに標準インストールされているrsyslogを使ってOpenLDAPのログを取得する方法についてまとめます。
以前、OpenLDAPで監査ログ(auditlog)を取得する方法について、記事を書きました。
auditlogはバックエンドデータベースに対する操作(エントリの追加、変更、削除)のログを取得できましたが、検索などのログを取得できませんでした。
rsyslogを使う方法では、この検索などのログを取得することができます。
前提条件
- CentOS 7.8
- OpenLDAP 2.4.44
- ログを取得するDIT: fig.1参照
- rootdn: “cn=Manager,dc=example,dc=com”
fig.1 DIT
rsyslogとは
公式ホームページより、
RSYSLOG is the rocket-fast system for log processing.
とあるように、rsyslogはローカルやリモートのログを高速に処理するデーモンです。
fig.2に示すように、様々なソースからの入力を、処理し、多様な送り先へ出力することができます。
fig.2 rsyslogの入出力先
今回はOpenLDAPからの入力をlogファイルとして出力する設定を行います。
rsyslogの設定
以下の3手順で設定を行います。
- rsyslog.confに追記
- ログレベル設定
- デーモンの再起動
rsyslog.confに追記
$sudo vi /etc/rsyslog.conf
46行目あたりに#### RULES ####とあるので、このセクションに以下を追記します。
# Save LDAP messages also to slapd.log local4.* /var/log/slapd.log
slapdがlocal4ファシリティにログを出力をするので、rsyslogはこれを入力として受け取り、/var/log/slapd.logファイルに出力します。
local4.*というのはログを取得するフィルターでlocal4がファシリティ、アスタリスク(*)はプライオリティを表しています。
詳細については、RedHatのカスタマーポータルに載っています。
ログレベル設定
$sudo vi /etc/sysconfig/slapd
12行目SLAPD_OPTIONSのコメントアウトを外し、以下のように書き換えます。
SLAPD_OPTIONS="-s 256"
256という数字はログレベルを表しています。
ログレベルはどれくらいの粒度でログを記録するかを設定する値です。
ログレベルと粒度の関係をtable.1に示します。(OpenLDAPの公式ページ6.2.1.5. loglevelより)
table.1 ログレベルと粒度の関係
Level | description |
1 | trace function calls |
2 | debug packet handling |
4 | heavy trace debugging |
8 | connection management |
16 | print out packets sent and received |
32 | search filter processing |
64 | configuration processing |
128 | access control list processing |
256 | stats log connections/operations/results |
512 | stats log entries sent |
1024 | print communication with shell backends |
2048 | print entry parsing debugging |
16384 | syncrepl consumer processing |
32768 | only messages that get logged whatever log level is set |
今回は検索の操作と結果のログを取得したいのでログレベルは256に設定しました。
自分が知りたい情報の粒度に合わせて適切に設定しましょう。
デーモンの再起動
rsyslogを再起動してrsyslog.confに追記した内容を反映します。
$sudo systemctl restart rsyslog
slapdを再起動してログレベルの設定を反映します。
$sudo systemctl restart slapd
ログレベルを変更した場合にはslapdを再起動します。
以上で、rsyslogを使ってOpenLDAPのログを取得するための設定は終わりです。
次はログを見ていきます。
ログを見てみる
fig.1のDITに対して、ある操作を行った場合のログを見てみます。
$sudo cat /var/log/slapd.log Aug 19 02:23:30 fujiwara slapd[2075]: conn=1000 fd=11 ACCEPT from IP=[::1]:33462 (IP=[::]:389) Aug 19 02:23:30 fujiwara slapd[2075]: conn=1000 op=0 BIND dn="cn=Manager,dc=example,dc=com" method=128 Aug 19 02:23:30 fujiwara slapd[2075]: conn=1000 op=0 BIND dn="cn=Manager,dc=example,dc=com" mech=SIMPLE ssf=0 Aug 19 02:23:30 fujiwara slapd[2075]: conn=1000 op=0 RESULT tag=97 err=0 text= Aug 19 02:23:30 fujiwara slapd[2075]: conn=1000 op=1 SRCH base="ou=users,dc=example,dc=com" scope=2 deref=0 filter="(objectClass=*)" Aug 19 02:23:30 fujiwara slapd[2075]: conn=1000 op=1 SEARCH RESULT tag=101 err=0 nentries=4 text= Aug 19 02:23:30 fujiwara slapd[2075]: conn=1000 op=2 UNBIND Aug 19 02:23:30 fujiwara slapd[2075]: conn=1000 fd=11 closed
connはコネクションの番号です。コネクションの確立から解放までを1つの塊として番号が割り当てられています。
opは1回のコネクション中に行われた操作を表します。今回の場合、全部で3回操作が行われており、op=0はバインド、op=1は検索、op=2はアンバインドです。
このログを見ることで、
ローカルホストのipアドレス(::1)からポート389でコネクションが確立され、
バインドdn=”cn=Manager,dc=example,dc=com”でシンプル認証を行い、
ベースdn=”ou=user,dc=example,dc=com”に対して検索をかけ、4エントリがヒットし、
アンバインドし、コネクションが解放されたことが分かります。
どのようなコマンドが実行されたのか、なんとなく想像できますね。
正解はこれです。
$sudo ldapsearch -W -D cn=Manager,dc=example,dc=com -b ou=users,dc=example,dc=com
色々なコマンドを実行してログを確認することで、より理解が深まっていきますね。
まとめ
今回はrsyslogを使ったOpenLDAPのログの取り方についてまとめました。
手順は簡単で以下の3ステップで設定できます。
- rsyslog.confに追記
- ログレベル設定
- デーモンの再起動
適切なログレベルを設定しないと、情報が多すぎて読むのが大変でした。
データベースに加わった変更点だけを見たいときは、以前、使い方を説明したauditlogを使った方が読みやすいと思います。
使い分けが大事ですね。