Mimura です。
今までこのサーバでは Clam AntiVirus を使っていたのですが、
HSPプログラムの誤検出がどーにもこーにも直らず、今まで検索対象から外していたのですが、
さすがにまずいだろ。ということで、ウィルススキャナを変えてみました。
昨日、Avira Antivir の Linux 版をインストールして、 Cron で動かしてみたのですが、
全領域スキャンやらせてみますと、5時間ぐらい連続稼働してもまだ終わらない。と言うことで強制終了掛けて、
アンインストールしました。
今回、私の家のPCの全てに入れてある Avast! の Linux 版をサーバにも導入してみることにしました。
先ほど、全領域スキャンをやらせてみていたのですが、いい感じで、速度も速く誤検出もない。
と言うことでしばらく様子見も含めてそのまま入れておくことにしてみます。
閑話休題
早速インストール方法等について記述していきたいと思います。
またしてもめちゃくちゃ長くなりそうなので記事分割っ。
まず、Avast! さんですが、
avast! Linux Home Edition ダウンロード
こちらのリンクよりダウンロードが可能です。
※インストール、及び、各種コマンドについては、全てRoot 権限で行ってください。
セキュリティ的に怪しい感じもしますが、各ユーザごとにライセンスキーを要求したり、
ウィルスデータベースを保存したりしますので、cron で走らせることを考えると Root でやったほうがいいです。
・・そんなわけで、最初に su しましょう。
CentOS 5.3 でしたら RPM パッケージがいい感じです。
インストール時に「 rpm –ivh avast4workstation-1.3.0-1.i586.rpm 」と素直にやると、エラーが出ます。
ここで表示されたエラーについては、[centos-users 1134] Re libexpat.so.1の作り方についてによると、
何となく無視できそうなので、「 rpm –ivh –nodeps –ivh avast4workstation-1.3.0-1.i586.rpm 」と無理矢理インストールします。
(実際の挙動に関してですが、 nodeps でインストールしてもちゃんと動きます。)
次。
Avast! さんは、ちょっと登録が必要です。
登録が嫌だ! と言う方。 とりあえず必要な情報は「メールアドレス、名前、国名」ですが、
レスポンスを見る限り、名前と国の名前は偽っても大丈夫なようです。
(メールアドレスは登録コードが送られてくるので正しいのでないとNGです。 なお、スパムは来ませんので大丈夫です。)
avast! 4 Home Edition の登録 – 非商用無料アンチウイルス
登録はここから。
次に、登録完了&インストール完了 しましたら、
コンソールから
# avast
と入力します。
そうしますと、
Couldn’t find a registration key in ~/.avast/avastrc file!
Please register avast! at http://www.avast.com/i_kat_207.php?lang=ENG
to get the key.
NOTE: if avast! rejects the key, remove ~/.avast/avastrc file and
run this script again with a valid key.Please enter the key here:
と言われますので、メールで送られてきたライセンスキーを入力(貼り付け)て、エンターキーを押します。
これでセットアップは完了です。
GUI版もあるようですが、GUIはあんまり使わないので コンソール版で・・w
Avast コマンドのヘルプは、
Usage: avast [OPTION…] <areaname…>
avast v1.3.0 — command-line virus scannerOptions:
-_, –console Application will be working in STDIN/STDOUT mode
-a, –testall Test all of the files (default)
-b, –blockdevices Scan block devices
-c, –testfull Scan entire files
-d, –directory Scan only directory content, no subdirectoires
-i, –ignoretype Ignore virus sets
-n, –nostats No virus check statistics
-p, –continue=1234 Automatic action with infected file:
1:delete, 2:(not supported), 3:repair, 4:stop
-r, –report=[*]file Create report file, ‘*’ for OK results
-t, –archivetype[=ZGBTIJRXOQHFVKPYD6UCWAN] Scan archives: Z:ZIP(default),
G:GZ(default), B:BZIP2(default), T:TAR(default),
I:MIME, J:ARJ, R:RAR, X:Exec(default), O:ZOO,
Q:ARC, H:LHA, F:TNEF, V:CPIO, K:CHM, P:RPM,
Y:ISO, D:DBX, 6:SIS, U:OLE(default), C:CAB,
E:ACE, 1:INSTALL(default), W:WINEXEC(default),
A:All, N:None
-v, –viruslist=mask Show list of all specific viruses
-h, –help Give this help list
–usage Give a short usage message
-V, –version Print program versionMandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.
こんな感じです。
そんなこんなで。ここで余談を幾つか。
とりあえずここで宣言しておきますが、Linux 版には Windows 版にある、常駐保護機能は無いです。
・・というか、Linux 系のウィルススキャナにはほぼ無いです。
Windows 系は、Vista になってやっと、セキュリティに目を向けたような感じがしてて、
XP 系まではむちゃくちゃ危ないです。だって。ウィルスとかがシステムの中枢に普通にアクセスできるんですから。
(Vista or 7 でも、UAC 切ってあると XP 並の保護レベルになります。
(UAC 切らないと動かない? そういうプログラムは使わないようにしましょう。 いや。真面目に。
・・とまぁ。あれですが、なぜ Linux 系のウィルススキャナには常駐保護がないのか。
簡単です。 パーミッション設定がちゃんとしていれば、元々、中枢に容易にアクセスできるものじゃないんです。
もっと保護をしたいのであれば、 SELinux 入れればかなりすばらしい状態になります。
(・・でも、ユーザが Root で使い続けている状況でしたら・・。
(それだと全く関係無い状態になるので、一般ユーザ使いましょう・・って。普通はそうしますよね。
また、Linux 系のウィルスはほぼ無いんです。んじゃ、何で君は動かしているんだ。と聞かれれば、
サイト管理人のPCがウィルス感染して、それの2次配布サーバとなることが無いように動かしてます。
(・・一応、このサーバでサイト運営している人は私以外にもいますので・・。
さてさて。
Linux ではウィルススキャナは動かすとしても Cron で1日1回フルスキャンをさせます。
私のほうでも使うことになって、 Cron のスクリプトを先ほど書いておりました。
以下に載せておきますので、あくまでも「自己責任」でお使いください。
#!/bin/sh
HOME=/root
# Virus Chest Path.
CHESTPATH=(YOU MUST CHANGE THIS PATH)# Avast Update.
avast-update -qAVASTLOG=`mktemp`
avast / -p3 -r$AVASTLOG -n -tA > /dev/null# delete "RESULT LOG" and "TRUE LOG"
grep -v "\[OK\]" $AVASTLOG | grep -v "\#" > $AVASTLOG[ ! -z "$(cat $AVASTLOG)" ] && \
# VIRUS FOUND!
SENDLOG=`mktemp`
ID=0
cat $AVASTLOG | while read VIRUS
do
if [ -z "$VIRUS" ]; then
break
fiFILE=`echo $VIRUS | sed -e ‘s/\[.*//’`
MOVEAT=`echo $CHESTPATH$FILE | sed -e ‘s/\/\//\//g’`
VIRUSNAME=`echo $VIRUS | sed -e ‘s/.*\[//’ -e ‘s/\].*//’ -e ‘s/infected by: //’`
RESULT=`echo $VIRUS | sed -e ‘s/\[.*//’`if [ "`echo $FILE | grep $CHESTPATH`" ]; then
continue
fiID=`expr $ID + 1`
echo "Virus No.$ID" >> $SENDLOG
echo "—————————————" >> $SENDLOG
echo "Virus Name : $VIRUSNAME" >> $SENDLOG
echo "Infected File : $FILE" >> $SENDLOGif [ "`echo $VIRUS | grep ‘repair error’`" ]; then
# Can’t Repair File.
MAKEDIRECTORYPATH=`dirname $MOVEAT`
mkdir -p $MAKEDIRECTORYPATH > /dev/null
mv -f $FILE $MOVEAT > /dev/null
echo "Destination : $MOVEAT" >> $SENDLOG
echo "Result : Infected File Moved. (Repair Error)" >> $SENDLOG
else
echo "Result : $RESULT" >> $SENDLOG
fiecho "—————————————" >> $SENDLOG
echo "" >> $SENDLOG
doneif [ "$SENDLOG" ]; then
if [ "`cat $SENDLOG`" ]; then
cat $SENDLOG | mail -s "Virus Found in `hostname`" root
fi
rm -rf $SENDLOG
firm -rf $AVASTLOG
ウィルスを検知すると、ファイルの修復を試みた後、無理ならファイルを指定したチェストディレクトリに移動させます。
Avastのコマンドラインにはウィルスチェストの機能がなさそうなので、自前で実装しました。
(初めて書いたスクリプトなので・・。かなり汚いです。はい。)
とりあえず、このスキャナがウィルスを検知しますと、Rootに、
Virus No.1
—————————————
Virus Name : EICAR Test-NOT virus!!!
Infected File : /root/test/eicar.com.1
Destination : /root/test/chest/root/test/eicar.com.1
Result : Infected File Moved. (Repair Error)
—————————————
この様なメールが届きます。 修復不能であっても、既に別のディレクトリに移動されてますので、問題ないか・・も。
ちなみに、自動的に削除したい場合は、avast のコマンドラインオプションを変更すれば可能です。
かなり長文になりましたが、とりあえず、これから使っていってみたいと思います。
10月21日 修正
Cron スクリプトに関し、Cron のホームディレクトリはルートディレクトリで動作するようなので、
これまた非常に汚いですが、 HOME を強制的に root のところに変更するようにしました。
ピンバック: 開発日々の走り書き~ » Linux版「Avast! Linux Home Edition」のインストール