ウイルス定義の更新を自動化したついでに、スキャンも自動化しようと試みましたが、うまくいかず。。。
スキャンはしているのですけど、スキャンのプロセスが終了しないんです。。。><;
スキャンは「avgscan」というコマンドを実行するのですけど、この「avgscan」が終了せず、プロセスが残ったままになってしまいます。
なんせ、フリーですから、サポートも受けられないしので、コマンドラインに戻らないのが、仕様なのかバグなのかも不明。。。
まあ、プロセスが残るだけで他に影響がないようなので、後で不要なプロセスを切れば問題はないです。
定義の更新はログ出力するようにしたので、スキャンもログ出力するようにシェル化してみました。
スキャンはしているのですけど、スキャンのプロセスが終了しないんです。。。><;
スキャンは「avgscan」というコマンドを実行するのですけど、この「avgscan」が終了せず、プロセスが残ったままになってしまいます。
なんせ、フリーですから、サポートも受けられないしので、コマンドラインに戻らないのが、仕様なのかバグなのかも不明。。。
まあ、プロセスが残るだけで他に影響がないようなので、後で不要なプロセスを切れば問題はないです。
定義の更新はログ出力するようにしたので、スキャンもログ出力するようにシェル化してみました。
で、↓が作成したシェル。
スキャンが終了しないので、非常に苦労してます。
スキャン実行(avgscan)を実行すると、スキャンが終了しても次の処理が実行されないため、バックグラウンドでスキャンを実行してます。
バックグラウンドで実行しているので、いつスキャンが終了するか分からない。。。
なので、「-r」オプションでスキャン結果をファイル出力し、そのスキャン結果ファイルをスキャン終了時に出力される文字列で検索してます。
で、10秒毎の検索をループさせ、スキャンが終了しているかの判定を行ってます。
(非常に面倒な処理です。。。><;)
このシェルではスキャンのプロセスを落としていないので、プロセスは残ったままになります。
なので、シェル実行後、手動でプロセスを kill してます。。。
で、このシェルで出力したログは↓になります。
(「/var/samba/public」にウィルステスト用ファイルを置いて検証、テスト用ファイルは下記でダウンロードできます)
↓ちゃんとウィルスと認識してますww
/var/samba/public/eicar.com Virus identified EICAR_Test
/var/samba/public/eicar.com.txt Virus identified EICAR_Test
ウィルスチェックもしてますし、ログも残ります。
まあ、及第点ですねww
【今後の課題】
○シェル内でスキャンプロセスを切る
スキャンのプロセスIDを取得できれば、プロセスを kill できるはず。
今のところ、pidof で検証してますが、うまくプロセスIDが取得できない状態。。。
「pidof」がダメだったら、「ps -ef|grep <実行しているスキャンプロセス>」を awk で加工すれば、プロセスIDが取得できるかな??
○ウィルススキャン結果のメール通知
今のところ、このシェルは手動実行し、スキャン結果をコンソールで確認しているので、メールでの通知は不要。
常時起動して、定期的にウィルススキャンするのであれば、メールか何かで通知があると便利かもww
【ウイルステスト用ファイル】
The Anti-Virus or Anti-Malware test file:http://www.eicar.org/anti_virus_test_file.htm
#! /bin/sh
##################################
# AVGファイルスキャンシェル
#
##################################
avg_log_dir=/var/log/
avg_log_name=avg.log
avg_log_file=$avg_log_dir$avg_log_name
avg_log_temp=$avg_log_dir'avg_temp.log'
avg_scan_dir=' /var/samba/public '
avg_command='avgscan -H -r '$avg_log_temp$avg_scan_dir
avg_end_keywd='Errors reported'
# ログ出力
echo '['`date +'%Y/%m/%d %T %Z'`']' `hostname` $avg_command':START' >> $avg_log_file
# スキャンの実行(バックグラウンド)
$avg_command &
avg_end_flg=0
while [ $avg_end_flg -eq 0 ];do
sleep 10
avg_end_flg=`tail -n 2 $avg_log_temp | grep "$avg_end_keywd" | wc -l`
done
# スキャン結果ファイルをログへ追記出力
cat -v $avg_log_temp >> $avg_log_file
echo '['`date +'%Y/%m/%d %T %Z'`']' `hostname` $avg_command':END' >> $avg_log_file
# 一時ログファイルの削除
rm $avg_log_temp
スキャンが終了しないので、非常に苦労してます。
スキャン実行(avgscan)を実行すると、スキャンが終了しても次の処理が実行されないため、バックグラウンドでスキャンを実行してます。
バックグラウンドで実行しているので、いつスキャンが終了するか分からない。。。
なので、「-r」オプションでスキャン結果をファイル出力し、そのスキャン結果ファイルをスキャン終了時に出力される文字列で検索してます。
で、10秒毎の検索をループさせ、スキャンが終了しているかの判定を行ってます。
(非常に面倒な処理です。。。><;)
このシェルではスキャンのプロセスを落としていないので、プロセスは残ったままになります。
なので、シェル実行後、手動でプロセスを kill してます。。。
で、このシェルで出力したログは↓になります。
(「/var/samba/public」にウィルステスト用ファイルを置いて検証、テスト用ファイルは下記でダウンロードできます)
ログ出力内容
[yyyy/mm/dd hh:mm:dd JST] hostname avgscan -H -r /var/log/avg_temp.log /var/samba/public :START
AVG command line Anti-Virus scanner
Copyright (c) 2009 AVG Technologies CZ
Virus database version: 270.12.50/2150
Virus database release date: aaa, dd mm yyyy hh:mm:ss +09:00
Scan command: /opt/avg/avg8/bin/avgscan -H -r /var/log/avg_temp.log /var/samba/public
/var/samba/public/eicar.com Virus identified EICAR_Test
/var/samba/public/eicar.com.txt Virus identified EICAR_Test
------------------------------------------------------------------------------
Scan started at: aaa, dd mm yyyy hh:mm:ss +09:00
Scan ended at: aaa, dd mm yyyy hh:mm:ss +09:00
Elapsed time: 6s
------------------------------------------------------------------------------
Files scanned : 2(2)
Infections found : 2(2)
PUPs found : 0
Files healed : 0
Warnings reported : 0
Errors reported : 0
------------------------------------------------------------------------------
[yyyy/mm/dd hh:mm:dd JST] hostname avgscan -H -r /var/log/avg_temp.log /var/samba/public :END
↓ちゃんとウィルスと認識してますww
/var/samba/public/eicar.com Virus identified EICAR_Test
/var/samba/public/eicar.com.txt Virus identified EICAR_Test
ウィルスチェックもしてますし、ログも残ります。
まあ、及第点ですねww
【今後の課題】
○シェル内でスキャンプロセスを切る
スキャンのプロセスIDを取得できれば、プロセスを kill できるはず。
今のところ、pidof で検証してますが、うまくプロセスIDが取得できない状態。。。
「pidof」がダメだったら、「ps -ef|grep <実行しているスキャンプロセス>」を awk で加工すれば、プロセスIDが取得できるかな??
○ウィルススキャン結果のメール通知
今のところ、このシェルは手動実行し、スキャン結果をコンソールで確認しているので、メールでの通知は不要。
常時起動して、定期的にウィルススキャンするのであれば、メールか何かで通知があると便利かもww
【ウイルステスト用ファイル】
The Anti-Virus or Anti-Malware test file:http://www.eicar.org/anti_virus_test_file.htm