CentOS 5.3 に Avast! Linux Home Edition. 入れてみた。


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 scanner

Options:
  -_, –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 version

Mandatory 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 -q

AVASTLOG=`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
        fi

        FILE=`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
        fi

        ID=`expr $ID + 1`
        echo "Virus No.$ID" >> $SENDLOG
        echo "—————————————" >> $SENDLOG
        echo "Virus Name        : $VIRUSNAME" >> $SENDLOG
        echo "Infected File     : $FILE" >> $SENDLOG

        if [ "`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
        fi

        echo "—————————————" >> $SENDLOG
        echo "" >> $SENDLOG
done

if [ "$SENDLOG" ]; then
        if [ "`cat $SENDLOG`" ]; then
                cat $SENDLOG | mail -s "Virus Found in `hostname`" root
        fi
        rm -rf $SENDLOG
fi

rm -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 のところに変更するようにしました。


 

関連記事