3.ファイルの変更チェック
システムの安定稼動のためには、アプリケーション関連の設定ファイルが変更されていないことを監視することも重要です。たとえ運用ルールで手動での更新が禁止されていたとしても、操作担当者がミスで変更してしまうこともありますし、構成管理システムを使っている場合でも、意図していないファイルの更新をしてしまうケースもあります。
設定ファイルの内容を変更すると、直後に問題が発生する場合だけでなく、数日後に問題が発生することもあります。その場合、アプリケーションの設定変更が行われていることを認識していないために、原因究明に時間がかかってしまうこともあります。
そのような状況を防ぐために、重要な設定ファイルは状態を監視し、場合によっては変更をトリガーで通知できるようにしておけば、このような事故を未然に防ぐことも可能です。
Zabbixエージェントには、ファイルの状態をチェックするためのキーがいくつか用意されています。これらのキーでどのような値が取得できるか、実際に確認します。
ファイルの更新日
ファイルが変更されたかどうかの一番基本的な方法は、ファイルの更新日を監視することです。更新日の変更は、vfs.file.dateキーで取得できます。
$ zabbix_get -s 127.0.0.1 -k vfs.file.time[/tmp/aaa] 1523669008 #ファイルの更新日付を変更 $ touch /tmp/aaa $ zabbix_get -s 127.0.0.1 -k vfs.file.time[/tmp/aaa] 1523669039
処理結果は、UNIXタイムになります。変更されたかどうかを検知するには、トリガーのdiff関数でチェックすればOKです。元々予定していた変更をした際にもトリガーが発行されるとうるさくなってしまうので、メンテナンスモードなどにしてから変更するといった運用ルールもきちんと作成しておくのがよいと思います。
キーvfs.file.timeはWindowsのファイルでも使用できます。
$ zabbix_get -s 192.168.0.2 -k vfs.file.time[c:\\temp\\aaa.txt] 1523667389
ファイルのダイジェスト
更新日付が変更された場合でも、ファイルの中身が変更されたどうかはわかりません。エディタでファイルの中身を参照しようとして、そのままファイルを更新してしまうケースですね。
また、ファイルのサイズを確認するだけでは、FILE=1をFILE=2に変えた場合、ファイル自体のサイズは変わらないので、ファイルの中身が変更されたかどうかはチェックできません。
さらにレアなケースですが、意図的にファイルの日付を元の日付に改ざんし、内容変更を隠蔽しようとするというケースもあるかもしれません(ここまでいくと犯罪ですが)。そのようなケースもファイルの中身自体を監視しておけば、すり替えを検知することができます。
Zabbixエージェントには、chsumやmd5のダイジェスト値を作成するキーもあるので、それらを使ってファイルが変更されたかどうかをチェックすることも可能です。
$ echo 111 > /tmp/aaa $ zabbix_get -s 127.0.0.1 -k vfs.file.md5sum[/tmp/aaa] 1181c1834012245d785120e3505ed169 #一文字だけ変更 $ echo 112 > /tmp/aaa $ zabbix_get -s 127.0.0.1 -k vfs.file.md5sum[/tmp/aaa] f3527f99cc6f600235ae6b562d3980d9
vfs.file.md5sum、vfs.file.cksumもWindows7でも実行可能でした。ただ、互換性の確認まではしていません。それぞれ、同じプラットフォーム上での変更のチェック、という用途で使う限りは問題ないと思います。
まとめ
ファイルの日付、サイズ、ダイジェストをチェックを行うことは、安定運用のために有効な手段です。また、セキュリティの観点でも、ファイルの監視をすることで、不正なソフトの挙動を検知できる可能性があります。ただ、悪質な進入に対してその効力には限界もあるので、メインのセキュリティ対策と併用するような使い方がよいと思います。