2014-08-05

mysqlで監査ログを設定する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
MySQLでもデータベースの操作ログを取ったほうがよいのかなぁと思ってしまう今日この頃です。

というわけで、どのようにすれば監査ログを残せるのかを調べました。

Enterprise Editionには、監査の機能があるようですが、今回はEnterprise Editionのことは対象外です。

他にMcAfeeがMySQL用の監査ツールを提供しているようなので、こちらの使い方になります。


以下はすべてrootユーザで行うものとします。

まずはインストールです。

https://bintray.com/mcafee/mysql-audit-plugin/release
から自分の環境にあったものをダウンロードします。
今回の環境は、64bitCentOS6上のMySQL5.6とします。

ファイルを取得して、zip解凍してプラグイン用のディレクトリにコピーをします。
wget http://dl.bintray.com/mcafee/mysql-audit-plugin/1.0.5/audit-plugin-mysql-5.6-1.0.5-479-linux-x86_64.zip
unzip audit-plugin-mysql-5.6-1.0.5-479-linux-x86_64.zip

cp audit-plugin-mysql-5.6/lib/libaudit_plugin.so /usr/lib64/mysql/plugin/


そして設定です。
/etc/my.cnf

[mysqld]セクションに以下を追加します。
------------------------------------------------
# McAfee Audit-Plugin
plugin-load=AUDIT=libaudit_plugin.so
audit_json_file = On
------------------------------------------------
他にも設定できる項目はあるのですが、とりあえず最低限動くようにするには上記でよさそうです。
他の項目に関しては、以下を参照してください。


設定が完了したらmysqlを再起動です。
service mysqld restart


プラグインが設定されているかの確認は、以下を実行してaudit系の設定が表示されればOKです。
mysql> SHOW VARIABLES LIKE 'audit_%';


これで監査ログが
/var/lib/mysql/mysql-audit.json
に出力されることになります。

出力されるログの内容に関しては以下が参考になります。


監査ログは、いっぱい出力されるのでファイルサイズが大きくなっていきます。
なので以下の設定をして必要なものだけに絞るのがよいかと思います。
audit_record_cmds:ロギング操作を限定する
audit_record_objs:ロギングしたいオブジェクトを限定する
audit_whitelist_users:ログキングしないユーザを限定する


それでも大きくなり続けるのは、なんとなくいやだったので、ログローテートを設定します。
以下のようにしてみました。
とりあえず毎日ローテートして30日分残すことにしてみました。

vi /etc/logrotate.d/mysql-audit-log-rotate
-----------------------------------
/var/lib/mysql/mysql-audit.json {
  daily
  rotate 30
  missingok
  compress
  delaycompress
  sharedscripts
  postrotate
    if test -x /usr/bin/mysqladmin && \
      /usr/bin/mysqladmin ping &>/dev/null
    then
      /usr/bin/mysql --defaults-extra-file=/root/.my.cnf -e "set global audit_json_file_flush=ON"
    fi
  endscript
}
-----------------------------------

上記で利用する.my.cnfも作成します。
vi /root/.my.cnf
-----------------------------------
[mysql]
password = xxxxxxxx
user = root
-----------------------------------
chmod 600 /root/.my.cnf


ログローテートの確認です。2回目のlsでログが増えていることを確認します。
ls -l /var/lib/mysql/mysql-audit.json*
logrotate -f /etc/logrotate.d/mysql-audit-log-rotate
ls -l /var/lib/mysql/mysql-audit.json*


監査ログはこんな感じで残せるようにできたけど、監査ログを確認して異常を検知する方法がよくわからないので、監査ログを活用する方法をちゃんと理解したいところです。


コメントを投稿