OpenLDAPで監査ログを使ってみよう!Audit Logging overlay(auditlog)

こんにちは、サイオステクノロジーの藤原です。

OpenLDAPで監査ログを取得するためのオーバーレイAudit Logging overlay(auditlog)を使ったので、使用方法と注意点を残しておきます。

Audit Logging overlay(auditlog)とは

auditlogは、指定したバックエンドデータベースに加えられた変更記録を保存するオーバーレイです。

DITに対する操作(エントリの追加、変更、削除)のログをLDIF形式で保存できます。

ログは操作者やタイムスタンプなどが追加されて、指定したディレクトリに出力されます。

前提条件

  • CentOS 7.8
  • OpenLDAP 2.4.44
  • 監査対象DIT: fig.1参照
  • rootdn: “cn=Manager,dc=example,dc=com”
  • バックエンドデータベース: hdb

fig.1 監査対象DIT

 

auditlogの設定

auditlogを使用するために設定ツリーを変更します。

以下の3手順で設定します。

  1. ディレクトリの作成
  2. auditlogのロード
  3. auditlogの適用

ディレクトリの作成

監査ログを格納するディレクトリを作成します。

ディレクトリは/var/log直下に作成します。

$sudo mkdir -p /var/log/openldap/

slapdがディレクトリにログを作成できるように所有者を変更します。

$sudo chown -R ldap:ldap /var/log/openldap/

 

auditlogのロード

オーバーレイのロードを管理するエントリ”cn=module{0},cn=config”が存在しているか確認します。

$sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=module{0},cn=config

検索結果

  • 存在する -> A.エントリ”cn=module{0},cn=config”の変更へ
  • 存在しない -> B.エントリ”cn=module,cn=config”の作成へ

A.エントリ”cn=module{0},cn=config”の変更

エントリにolcModuleLoad属性を追加します。

$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:///
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: auditlog.la

modifying entry "cn=module{0},cn=config"

B.エントリ”cn=module,cn=config”の作成

$sudo ldapadd -Q -Y EXTERNAL -H ldapi:///
dn: cn=module,cn=config
cn: module 
objectClass: olcModuleList
olcModulePath: /usr/lib64/openldap
olcModuleLoad: auditlog.la

adding new entry "cn=module,cn=config"

 

auditlogの適用

バックデータベースのエントリの下にオーバーレイのエントリを追加します。

olcAuditLogFileには、

 ログを格納するディレクトリのパス(/var/log/openldap)+ ファイル名(auditlog.ldif)

を指定します。

olcAuditLogFileで指定したldifファイルにログが書き込まれます。

$sudo ldapadd -Q -Y EXTERNAL -H ldapi:///
dn: olcOverlay=auditlog,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcAuditLogConfig
olcOverlay: auditlog
olcAuditlogFile: /var/log/openldap/auditlog.ldif

adding new entry "olcOverlay=auditlog,olcDatabase={2}hdb,cn=config"

※このオーバーレイのエントリは削除することができないので注意しましょう。後述しますが、これを削除するためには設定ツリーごと削除、再構築する必要があります。

私の環境で削除を試みましたが、

ldap_delete: Server is unwilling to perform (53)

というエラーが出て削除できませんでした。(泣)

調べてみたところ、OpenLDAPの公式ページにこのようなスレッドを見つけました。

cn=config does not support delete operations. This will probably be supported in OpenLDAP 2.5.

cn=configは削除操作をサポートしていません。これはOpenLDAP 2.5でサポートされるでしょう。

と書いてあります。

次のバージョンに期待ですね。

ということでオーバーレイを消したいときはどうすれば良いのでしょうか。

先ほどのスレッドにこのような記述がありました。

slapcat -n0, edit LDIF, remove old configDB and reimport.

オーバーレイを消すためには設定ツリーのバックアップをとり、バックアップしたldifを編集、既存の設定ツリーを削除、再構築する必要があります。

詳しく説明すると長くなりそうなので、別の記事として書こうと思います。

 

以上でauditlogの設定は終わりです。

次はDITを操作して、どのようなログが出力されるかを見てみようと思います。

 

ログを見てみよう

fig.1で示したDITに対してエントリを追加、変更、削除し、ログを確認します。

ログのテンプレート

DITを操作(追加、変更、削除)した際、ログは以下のようなテンプレートに従って出力されます。

# 操作 記録時のUNIX時刻 操作されたデータベースのdn バインドdn 接続元ip connection番号
操作されたエントリのdn
操作
//・・・
// 詳細
//・・・
# end 操作 記録時のUNIX時刻

 

エントリの追加

操作:

$sudo ldapadd -W -D cn=Manager,dc=example,dc=com
dn: cn=user004,ou=users,dc=example,dc=com      
objectClass: person
cn: user004
sn: shiro
userPassword: Password004

adding new entry "cn=user004,ou=users,dc=example,dc=com"

ログ:

$cat /var/log/openldap/auditlog.ldif 
# add 1597707613 dc=example,dc=com cn=Manager,dc=example,dc=com IP=[::1]:37988 conn=1001
dn: cn=user004,ou=users,dc=example,dc=com
changetype: add
objectClass: person
cn: user004
sn: shiro
userPassword:: UGFzc3dvcmQwMDQ=
structuralObjectClass: person
entryUUID: bd7e6bf2-752e-103a-923c-25b41e619199
creatorsName: cn=Manager,dc=example,dc=com
createTimestamp: 20200817234013Z
entryCSN: 20200817234013.234238Z#000000#000#000000
modifiersName: cn=Manager,dc=example,dc=com
modifyTimestamp: 20200817234013Z
# end add 1597707613

エントリの追加時は、エントリの追加操作の詳細に加えて、作成者や変更者、変更時間などの属性が付与され記録されます。

 

エントリの変更

操作:

$sudo ldapmodify -W -D cn=Manager,dc=example,dc=com
dn: cn=user003,ou=users,dc=example,dc=com
changetype: modify
replace: sn
sn: goro

modifying entry "cn=user003,ou=users,dc=example,dc=com"

ログ:

$cat /var/log/openldap/auditlog.ldif 
# modify 1597708852 dc=example,dc=com cn=Manager,dc=example,dc=com IP=[::1]:39962 conn=1025
dn: cn=user003,ou=users,dc=example,dc=com
changetype: modify
replace: sn
sn: goro
-
replace: entryCSN
entryCSN: 20200818000052.377920Z#000000#000#000000
-
replace: modifiersName
modifiersName: cn=Manager,dc=example,dc=com
-
replace: modifyTimestamp
modifyTimestamp: 20200818000052Z
-
# end modify 1597708852

エントリの変更時は、エントリの変更操作の詳細に加えて、変更者や変更時間の属性も更新され記録されます。

 

エントリの削除

操作:

$sudo ldapdelete -W -D cn=Manager,dc=example,dc=com cn=user001,ou=users,dc=example,dc=com

ログ:

$cat /var/log/openldap/auditlog.ldif 
# delete 1597709207 dc=example,dc=com cn=Manager,dc=example,dc=com IP=[::1]:40868 conn=1026
dn: cn=user001,ou=users,dc=example,dc=com
changetype: delete
# end delete 1597709207

エントリの削除時は、エントリの削除操作の詳細のみが記録されます。

 

まとめ

今回はOpenLDAPでAudit Logging overlay(auditlog)を使用する方法と注意点をまとめました。

auditlogでは、DITに加えられた変更(エントリの追加、変更、削除)について詳細なログを取得することができました。

しかしながら、auditlogでは、DITに検索をかける場合のログなどを残すことができません。

rsyslogを使って検索などのログを取得する方法についてはこちらから。

 

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です