例えば Web コンテンツがハッキングなどによって書き換えられてしまった際にそれを検知できると助かります。
Tripwire などの商用ツールも有りますが、 Linux には auditd というデーモンがあります。これが割りと便利なので簡単な使い方をメモ。
例えば /var/www ディレクトリ内で発生する書き込み、属性の変更を監視したい場合、以下の様なルールを作る。
# vi /etc/audit/audit.rules
# First rule - delete all -D # Increase the buffers to survive stress events. # Make this bigger for busy systems -b 320 # Feel free to add below this line. See auditctl man page -w /var/www/ -p wa -k web-wa
-w は監視対象ディレクトリ
-p は監視の種類、 w: 書き込み a: 属性 r: 読み込み など
-k はログを見る際などのキーになる
更に特定のディレクトリだけは関しから外したいような場合は
-a exit,never -F dir=/var/www/tmp -k exclude -a exit,never -F dir=/var/www/cache -k exclude -a exit,always -F dir=/var/www -F perm=wa -k web-wa
などとやるとできる。
auditd 自体にそういう機能があるかはよくわからないが、とりあえず rsyslog と連携させれば通知メールは送れる。
まずは audisp という auditd の出力を少し拡張してくれるようなサービスの設定を変更して、 syslog へログを送るようにする。
vi /etc/audisp/plugins.d/syslog.conf
active = yes direction = out path = builtin_syslog type = builtin args = LOG_INFO format = string
これで auditd を再起動すれば、ログが syslog にも送られる。
ここで rsyslog 側に流れてきた auditd のログを検知して、メールを送信するように onmail モジュールの設定を行う。
vi /etc/rsyslog.d/onmail.conf
$ModLoad ommail $ActionMailSMTPServer localhost $ActionMailFrom from@from.com $ActionMailTo rcpt@to.com $template mailSubject,"web contents updated on %hostname%" $template mailBody,"RSYSLOG Alert\r\nmsg='%msg%'" $ActionMailSubject mailSubject # make sure we receive a mail only once in six # hours (21,600 seconds ;)) $ActionExecOnlyOnceEveryInterval 300 if $msg contains 'web-wa' then :ommail:;mailBody