Clam AntiVirusで特定のフォルダ内だけを定期的にチェックさせる方法

Clam AntiVirusで特定のフォルダ内だけを定期的にチェックさせる方法の画像

ただの備忘録なんですが。
たとえばユーザーがアップロードできるようなサイトを運営していたとして、そのアップロードされるフォルダだけを頻繁(1時間ごと)にウイルスチェックさせたいということがあります。

手順は以下のとおり、前提としてClam AntiVirusはインストールされているものとします。
オープンソースのウィルス対策ソフトである Clam AntiVirus をCentOSにインストールする

【やりたいこと(例)】
・/var/www/html/uploads/ フォルダのみを定期チェックしたい
・ウイルスを発見したら(example@example.com)にメール通知したい

1. ウイルスチェックを定期実行させるシェルスクリプトをcron.hourlyに作成する

作成したいシェルの名前を upfilecheck.sh とすると

# vi /etc/cron.hourly/upfilecheck.sh

で開いた画面で以下のものを貼り付ける。
「/var/www/html/uploads」と「example@example.com」の箇所は、各自で変更してください。

#!/bin/bash
PATH=/usr/bin:/bin
 
#ウイルスに関するメッセージを入れる変数を作成
CLAMSCANTMP=`mktemp`
 
#clamdscanをアップロードされたファイルフォルダ内のみで実行。
#ウイルスが見つかった場合削除して、メッセージを代入
clamdscan /var/www/html/uploads --remove > $CLAMSCANTMP 2>&1
 
# $CLAMSCANTMPにウイルス発見された場合にメール通知
[ ! -z "$(grep FOUND$ $CLAMSCANTMP)" ] && \
grep FOUND$ $CLAMSCANTMP | mail -s "Virus Found" example@example.com
rm -f $CLAMSCANTMP

2. 作成したシェルスクリプトに実行権限を付与する

# chmod +x /etc/cron.hourly/upfilecheck.sh

3. 作成したスクリプトが問題なく動くかテストする

チェックされるフォルダに移動する

# cd /var/www/uploads

テスト用のウイルスをダウンロードする。

# wget http://www.eicar.org/download/eicar.com.txt
# wget http://www.eicar.org/download/eicarcom2.zip

さきほど作ったシェルスクリプトを実行してみる。

# sh /etc/cron.hourly/upfilecheck.sh

実行して、ダウンロードしたテスト用ウイルスファイルが削除されて、メールの通知が来ていれば成功です。