CentOS7へclamavインストール(epelリポジトリ使用)

CentOS7にepelリポジトリで提供されているClamAV(アンチウイルスソフト)をインストールする手順です。

【2017.04.20追記】 freshclamの設定作業に漏れがあったので追記しました。対象ファイルは「/etc/freshclam.conf」「/etc/sysconfig/freshclam」になります。

【2017.11.03修正】 ウイルススキャン用スクリプトの修正を行いました。

前提条件

「epel」リポジトリにあるclamavをインストールするので、「epel」リポジトリを使用できるように設定しておいてください。

epelリポジトリの追加方法はこちらのページで説明しています。

ClamAVインストール

今回は「epel」リポジトリで提供されているClamAVのインストールを行い、clamd@scanをデーモンとして起動させ、それと連携するclamdscanを使用してウイルススキャンを行うという環境を構築していきます。

インストール

yumを使用してClamAVの各パッケージをインストールしていきます。

# yum install --enablerepo=epel clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd

※「RPMforge」にあるclamdとは異なり、「epel」のリポジトリのClamAVはその機能ごとに色々なパッケージに分かれていますので注意してください

パッケージ説明

各パッケージの説明を「yum info」コマンドで表示されたものを元に、ざっくりと翻訳してみました。

パッケージ名 内容
clamav ClamAVの各種ツール類
clamav-data ウイルスデータベース
clamav-devel ClamAVに必要なライブラリやヘッダーファイル
clamav-filesystem ClamAVに必要とされるユーザ作成スクリプトやファイルシステムの構造を提供
clamav-lib ClamAVに必要とされる動的共有ライブラリ
clamav-scanner 一般的なclamd用サービス
clamav-scanner-systemd systemd用clamav-scanner起動スクリプト
clamav-server clamdデーモンの実行に必要なファイル
clamav-server-systemd systemd用clamav-serverのテンプレート
clamav-update ウイルスデータベースを更新するためパッケージ
freshclamがインストールされる

clamd@scan設定

デーモンとして常時動作させるためclamd@scanの設定を行っていきます。

設定ファイルは「/etc/clamd.d/scan.conf」となりますので、このファイル編集し設定を行っていきます。

# cd /etc/clamd.d/
# cp -p scan.conf scan.conf_yyyymmdd
# vi scan.conf

設定項目

設定項目 変更前 変更後
Exampleのコメント化 Example #Example
ログファイル設定 #LogFile /var/log/clamd.scan LogFile /var/log/clamd.scan
ログファイルサイズ設定 #LogFileMaxSize 2M LogFileMaxSize 2M
ログに時間を表示 #LogTime yes LogTime yes
ログローテーション設定 #LogRotate yes LogRotate yes
ローカルソケット使用設定(1行での設定となります) #LocalSocket /var/run/clamd.scan/clamd.sock LocalSocket /var/run/clamd.scan/clamd.sock
異常終了時にソケットを削除 #FixStaleSocket yes FixStaleSocket yes
スキャン除外ディレクトリ設定 #ExcludePath ^/proc/
#ExcludePath ^/sys/
ExcludePath ^/proc/
ExcludePath ^/sys/
ExcludePath ^/dev/
実行ユーザ設定 User clamscan User root
設定項目説明
Exampleのコメント化
「Example」という設定があると「clamd@scan」は動作をやめてしまうので、「Example」部分の前に「#」をつけて、コメントにします。
ログファイル設定
ログを記録するファイルを設定しログを収集します。
ログファイルサイズ設定
ログファイルの最大サイズを設定します。

ログファイルに時間を設定
ログに時刻も含め記録する。
ログローテーション設定
ログをローテーションさせる設定。
ローカルソケット使用設定
ローカルソケットを使用し、ローカルからのみ接続できるようにします。

(画面のサイズ上2行に見えますが、1行での設定となります)

異常終了時にソケットを削除
異常終了した際にソケットを削除する設定。
スキャン除外ディレクトリ設定
ウイルススキャンを行わないディレクトリを指定します。
今回は「/dev」ディレクトリもウイルスチェックから外していますが、環境に合わせて設定を行ってください。
実行ユーザ設定
rootユーザで実行するように変更します。

clamd@scan起動

/etc/clamd.d/scan.confの設定が完了したら、clamd@scanを起動します。

# systemctl start clamd@scan

動作確認

「systemctl status clamd@scan」コマンドを実行して、正常にclamd@scanが起動しているか確認してください。

# systemctl status clamd@scan
● clamd@scan.service - Generic clamav scanner daemon
   Loaded: loaded (/usr/lib/systemd/system/clamd@scan.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2016-08-07 23:35:04 JST; 48s ago
 Main PID: 8888 (clamd)
   CGroup: /system.slice/system-clamd.slice/clamd@scan.service
           mq8888 /usr/sbin/clamd -c /etc/clamd.d/scan.conf --foreground=yes

clamd@scan自動起動設定

自動起動設定を行います。

# systemctl enable clamd@scan.service

ウイルスデータベース更新設定

「freshclam」を使用して、ウイルスのデータベースを自動的に更新する設定を行っています。

「/etc/freshclam.conf」設定

「freshclam」の設定である「/etc/freshclam.conf」を編集します。

# cp -p /etc/freshclam.conf /etc/freshclam.conf_yyyymmdd
# vi /etc/freshclam.conf

設定項目

設定項目 変更前 変更後
Exampleのコメント化 Example #Example
ログファイル設定 #UpdateLogFile /var/log/freshclam.log UpdateLogFile /var/log/freshclam.log
ログファイルサイズ設定 #LogFileMaxSize 2M LogFileMaxSize 2M
ログに時間を表示 #LogTime yes LogTime yes
ログローテーション設定 #LogRotate yes LogRotate yes
データベースオーナー設定(2017.04.20追記) #DatabaseOwner clamupdate DatabaseOwner root
ミラーデータベース設定 #DatabaseMirror db.XY.clamav.net DatabaseMirror db.jp.clamav.net
clamd@scanへの更新通知 #NotifyClamd /path/to/clamd.conf NotifyClamd /etc/clamd.d/scan.conf
設定項目説明
Exampleのコメント化
「Example」という設定があると「freshclam」は動作をやめてしまうので、「Example」部分の前に「#」をつけて、コメントにします。
ログ設定
ログファイルを設定しログの収集を行います。
ログファイルサイズ設定
ログファイルのサイズを設定します。
ログに時間を表示
ログに時間を表示させます。
ログローテーション設定
ログをローテーションさせます。
データベースオーナー設定
データベースの所有者を「root」に設定しないと「clamd@scan」への更新通知で下記のようなWARNINGとなるので変更します。

WARNING: Clamd was NOT notified: Can't connect to clamd through /var/run/clamd.scan/clamd.sock: Permission denied

ミラーサーバの設定
ウイルスデータベースをダウンロードするためのミラーサーバを設定します。
clamd@scanへの更新通知
ウイルスデータベースに更新があった場合clamd@scanに通知し、データを再読み込みするように通知させる設定。

「/etc/sysconfig/freshclam」編集(2017.04.20追記)

「freshclam」を使用してウイルス定義データベースの自動更新を行うためには、「/etc/sysconfig/freshclam」ファイルの編集も必要なのですが、その作業説明が抜けていましたので追記させて頂きます。すいませんでした。

設定ファイルを編集する場合は、念のためにバックアップをとってから作業を行いましょう。

# cp -p /etc/sysconfig/freshclam /etc/sysconfig/freshclam_yyyymmdd
# vi /etc/sysconfig/freshclam
変更前

初期設定では自動更新が「disabled-warn」に設定されているため、自動更新が実施されません。

### !!!!! REMOVE ME !!!!!!
### REMOVE ME: By default, the freshclam update is disabled to avoid
### REMOVE ME: network access without prior activation
FRESHCLAM_DELAY=disabled-warn   # REMOVE ME
変更後

「FRESHCLAM_DELAY=disabled-warn」部分の行頭に「#」を付けてコメント化し、自動更新されるように設定を変更します。

### !!!!! REMOVE ME !!!!!!
### REMOVE ME: By default, the freshclam update is disabled to avoid
### REMOVE ME: network access without prior activation
#FRESHCLAM_DELAY=disabled-warn   # REMOVE ME <---「#」を付けてコメント化します

この作業を行わないと、下記のWARNINGとなりウイルスデータベースの更新が行われませんので注意してください。

ウイルス定義データベース更新が行われない場合のエラー内容
WARNING: update of clamav database is disabled; please see
  '/etc/sysconfig/freshclam'
  for information how to enable the periodic update resp. how to turn
  off this message.
2018.08.29追記

CentOS7.5の環境で確認したところ、「### !!!!! REMOVE ME !!!!!!」以下の設定が無くなっていました。

この場合「# FRESHCLAM_DELAY=」と設定されていることを確認しておいてください。

動作確認

手動で「freshclam」を実行してウイルスデータベースが更新できることを確認します。

# freshclam -u root

ウイルスデータベース自動更新

CentOSでは「/etc/cron.d/clamav-update」が自動的に作成されて、「cron」への設定が行われます。
これにより、3時間おきにウイルスデータベースの更新がチェックされます。

ログ確認

3時間毎の更新ログは「/var/log/freshclam.log」に出力されるので、更新に問題が発生していないか確認してください。

ウイルススキャン動作確認

clamdscanを使用してウイルスチェックの動作試験をおこないます。

テスト用ファイルのダウンロード

実際のウイルスを使って動作試験を行うわけにはいかないので、EICARが開発したウイルスチェックテスト用ファイルである「eicar.com」をダウンロードしてきて動作試験を行います。

ダウンロードURL  http://www.eicar.org/download/eicar.com

# cd /root
# wget http://www.eicar.org/download/eicar.com

※今回は「/root」ディレクトリに「wget」を使用してダウンロードしています。

clamdscan実行

「clamdscan」でダウンロードした「eicar.com」が格納されている、「/root」ディレクトリのウイルススキャンを行うのですが、そのまま「clamdscan」コマンドを実行すると、「ERROR: Can't parse clamd configuration file /etc/clamd.conf」とエラーが表示されてしまいます。

これは、「clamdscan」が設定ファイルの場所を「/etc/clamd.conf」であると認識しているために発生しています。

# clamdscan /root
ERROR: Can't parse clamd configuration file /etc/clamd.conf

これを解消するために、シンボリックリンクを作成しエラーが発生しないように対応します。

# ln -s /etc/clamd.d/scan.conf /etc/clamd.conf

シンボリックリンクを作成するとエラーが発生しなくなるので、ウイルススキャンの動作試験を行っていきます。

ウイルスが検知されると「/root/eicar.com: Eicar-Test-Signature FOUND」と、検知されたファイルが表示され、感染ファイル数も「Infected files: 1」といったように表示されます。

# clamdscan /root
/root/eicar.com: Eicar-Test-Signature FOUND

----------- SCAN SUMMARY -----------
Infected files: 1
Time: 7.074 sec (0 m 7 s)

ちなみに、下記が「eicar.com」が無い状態で「clamdscan」を実行した結果となります。

ウイルスが検知されなかったので「/root: OK」とチェック結果が表示され、感染ファイル数も「Infected files: 0」と表示されています。

# clamdscan /root
/root: OK

----------- SCAN SUMMARY -----------
Infected files: 0
Time: 6.832 sec (0 m 6 s)

ウイルススキャン実行方法

ClamAVのインストールが完了したので、ウイルスチェックの「手動実行」と「定期実行」の方法について説明していきます。

手動実行

すぐにウイルスキャンをしたい場合などは、こちらの方法でウイルススキャンを手動で実行することが出来ます。

書式

clamdscan [オプション] [ファイルまたはディレクトリ]
オプション

普段使用しそうなオプションを抜粋して説明しています。

オプション 説明
--remove 検出したウイルスデータを削除する
(注意して使用してください)
--move=ディレクトリ 検出したウイルスデータを設定したディレクトリに移動する
ディレクトリは事前に作成すること
--log=ログファイル スキャン結果を設定したログファイルに記録する
--config-file=コンフィグファイル コンフィグファイルを指定してclamdscanを実行する

「--remove」「--move」オプションを指定しなかった場合は、検知したウイルスを表示するだけとなります。

実行例

「/home」ディレクトリ配下をウイルススキャンを実施する場合は下記のように実行します。

# clamdscan /home

定期実行

今回は、スキャン結果のメール通知が出来るようなスクリプトを作成して、それをcronから呼び出して定期スキャンを実行できるようにしていきます。

ウイルススキャン用スクリプト作成

ウイルススキャンを行うために、下記の機能をもったスクリプトを作成していきます。

  • ClamAVの更新
  • ウイルスキャン
  • スキャン結果の通知
# cd /root
# vi virus_check.sh ※スクリプト名が間違っていたので修正しました
# vi virus_scan.sh
ウイルススキャンスクリプト
#!/bin/bash

SCANDIR=/
VIRUS_MVDIR=/root/virus
MAILADDR=tamohiko@server-memo.net

CLAMDSCAN=/bin/clamdscan
HOSTNAME=`hostname`
RUNDATE=`date +%Y%m%d-%H%M%S`
SCANTMP=/tmp/clamdscan_$RUNDATE

CLAMUPDATE="clamav-server \
clamav-data \
clamav-update \
clamav-filesystem \
clamav \
clamav-scanner \
clamav-scanner-systemd \
clamav-devel \
clamav-lib \
clamav-server-systemd"


# ClamAV update

yum -y update --enablerepo=epel $CLAMUPDATE


# Virus scan

$CLAMDSCAN $SCANDIR > $SCANTMP 2>&1
#$CLAMDSCAN $SCANDIR --move=$VIRUS_MVDIR > $SCANTMP 2>&1
#$CLAMDSCAN $SCANDIR --remove > $SCANTMP 2>&1


# Mail notification

[ ! -z "$(grep FOUND$ $SCANTMP)" ] && \
cat $SCANTMP | mail -s "[Virus Found] $HOSTNAME $RUNDATE" $MAILADDR

[ -z "$(grep FOUND$ $SCANTMP)" ] && \
cat $SCANTMP | mail -s "[Virus Not Found] $HOSTNAME $RUNDATE" $MAILADDR

rm -f $SCANTMP

【2017.11.03】スクリプトを修正 

  • ClamAVアップデート対象を指定する「CLAMUPDATE」に「clamav-scanner」を追加
  • ClamAV update処理の際に「epel」リポジトリの指定が抜けていたので修正
変更前 yum -y update $CLAMUPDATE
変更後 yum -y update --enablerepo=epel $CLAMUPDATE

変数説明

上記のスクリプトで、環境に合わせて設定が必要な変数について説明します。

変数名 設定内容
SCANDIR ウイルスチェックを行うディレクトリを設定
VIRUS_MVDIR --moveオプションを使用する際に、ウイルスを移動させるためのディレクトリを設定
MAILADDR スキャン結果をメールで通知する際の、メールアドレスを設定
ウイルスチェック時の動作について

clamdscanを行う際のオプションの有無については、下記の3種類を用意してあります。

  • オプション無し
  • --moveオプション付き
  • --removeオプション付き

スクリプト内の下記部分がその部分となりますので、動作させたい部分の「#」を外し、それ以外は「#」をつけてください。

# Virus scan

$CLAMDSCAN $SCANDIR > $SCANTMP 2>&1
#$CLAMDSCAN $SCANDIR --move=$VIRUS_MVDIR > $SCANTMP 2>&1
#$CLAMDSCAN $SCANDIR --remove > $SCANTMP 2>&1
パーミッション変更

作成したスクリプトには「chmod」コマンドで実行権限を付与します。

# chmod 744 /root/virus_scan.sh
スクリプト動作テスト

作成したスクリプトはcronに登録する前に、手動で実行して正常に動作するか確認してください。

# sh -x virus_scan.sh

「mail」コマンドがインストールされていない場合は、「virus_check.sh: 行 38: mail: コマンドが見つかりません」といったメッセージが表示されて、メール送信ができません。

この場合は「yum install mailx」で「mail」コマンドをインストールしてください。

ウイルススキャンの定期実行

cronに登録して毎日定期的にウイルススキャンを行うように設定をします。

今回は「/etc/cron.d/」ディレクトリにファイルを作成してcronに登録しました。

# vi /etc/cron.d/virus-scan
設定内容

下記は毎日AM3:15にウイルススキャンを行う設定となりますが、実行時間はお好きな時間に変更してくだしさい。

MAILTO=root
15 3 * * * root /root/virus_scan.sh

コメント

  1. 永田 より:

    tamohiko様

    いろんなサイト様を参照しつつ最終的にこちらのサイト様で無事に動作させることができました。
    ありがとうございます。
    スクリプトをコピぺして動作させてしまいご迷惑をおかけしました。
    申し訳ありませんでした。

    • tamohiko より:

      永田さん

      コメントありがとうございます。
      お役に立てたようでうれしく思います。

      > スクリプトをコピぺして動作させてしまいご迷惑をおかけしました。
      > 申し訳ありませんでした。

      全然問題ありませんのでお気になさらないでください。

  2. sampei より:

    いろんなサイトさんがあって躓いてばかりいたんですがこちらの内容で無事起動させることができました。
    助かりました。ありがとうございます。

    • tamohiko より:

      sampeiさん

      コメントありがとうございます。
      お役に立てて何よりです!

  3. 関根久嗣 より:

    tamohiko様
    結局、clamd@scanの「systemctl start clamd@scan」がうまく動作しないので、centOS7.5に、クリーンインストールをしましたら、うまく動作しました。参考にしましたは、「centOS7で自宅サーバー構築」のネット記事です、詳細は、時間を作って、貴殿の書かれた記事を参考に、改善していきたいと、思います。いろいろと、お手数をおかけいたしましたが、不具合の原因は、不明ながらも、自己解決しましたので。おしらせいたします
    貴殿のレベルに早く達したいと思います。ご相談、ありがとうございました。

    • tamohiko より:

      関根久嗣さん

      コメントありがとうございます。
      ご返信が遅くなってしまいすいません。

      > 結局、clamd@scanの「systemctl start clamd@scan」がうまく動作しないので、centOS7.5に、クリーンインストールをしましたら、うまく動作しました

      動作しなかった際のシステムログ等があれば何かわかったかもしれませんが、私の方でも手順の見直しをしてみようと思います。

      とりあえず動作されたとのことで何よりです。

      なにかあればご気軽にコメントしてください。

  4. 寺西 より:

    clamdscan /rootを実行すると下記のエラーが発生します。

    /root: lstat() failed: Permission denied. ERROR

    chmod 777 /rootをやっても結果が変わりません。

    アドバイスをいただけると助かります。

    OSはCENTOS7を使用しております。

    • tamohiko より:

      寺西さん

      コメントありがとうございます。

      > /root: lstat() failed: Permission denied. ERROR

      このエラーは「clamdscan」の実行ユーザが「root」以外に設定されているため発生してるのではないかと考えられます。

      初期設定は「clamscan」ユーザになっているので、「/etc/clamd.d/scan.conf」の「User」部分の設定を見直してみていただけますでしょうか。

      変更前 User clamscan
      変更後 User root

      以上、よろしくお願いします。

      • 金野 光洋(きんの みつひろ) より:

        横からすみません。
        /etc/clamd.d/scan.confのUserをrootにしているのですが、上記のERRORとなってしまいます。chmodも実施済です。何か他に原因が考えられますでしょうか?
        よろしくご教示願います。

      • tamohiko より:

        金野さん

        コメントありがとうございます。
        ERRORの件ですが、「scan.conf」で「User root」と設定し、rootユーザで実行してしてしまうという認識でよろしいでしょうか?

        であれば、いちど「User」設定の最初に「#」をつけてコメントとしてから試して頂けますでしょうか。
        設定変更後はサービスの再起動を行って、設定を反映させることも忘れずにおねがいします。

        以上、よろしくお願いいたします。

      • 金野 光洋(きんの みつひろ) より:

        ご回答ありがとうございます。すでに#をつけてトライしており、その時は、同ERRORの他にCould not lookup : Servername not supported for ai_socktypeというERRORも出ていました。本日これが再現するか確かめましたが再現しませんでした。
        しかしながら、もっとも基本的なミスに気付いてしまいました。clamscanをclamdscanとミスタイプしておりました。
        こんなことお手数を煩わせ、貴サイトを不要であったコメントで汚してしまい、大変申し訳ありませんでしたm(__)m!
        #をつけた場合とつけない場合の両方で正常動作することが確認できました。
        現在は#をつけない設定となっています。

      • 金野 光洋(きんの みつひろ) より:

        追加で確認させて下さい。
        /binの下にはclamscanとclamdscanがあり、/bin直下で後者を実行すると例のPermission deniedがでます。一方上で示して頂いたスクリプトの中ではCLAMDSCAN=/bin/clamdscanとなっています。
        (1) clamscanとclamdscanはどう違うのでしょうか?
        (2) 上記スクリプトを実行するとcalmadscanが実行されるので、Permission deniedとなってしまいそうですが、CALMSCAN=/bin/clamscanに変更した方が良いのでしょうか?

      • tamohiko より:

        金野さん

        コメントありがとうございます。
        1点ご質問させてください。

        > clamscanをclamdscanとミスタイプしておりました。
        このサイトのウイルスキャン動作確認時の手順であれば「clamdscan」コマンドで動作確認を行っていますが、どこか別の部分のことでしょうか?

        ご質問いただい件につきまして回答させていただきます。

        (1) clamscanとclamdscanはどう違うのでしょうか?
        ・clamscanは実行毎にウイルス定義情報の読み込みいった初期設定を行うため実行速度が遅くなります。

        そのため単発でウイルススキャンを実行する際に良く使用されます。

        サーバのリソースは実行時のみ消費します。

        ・clamdscanはclamdと連携してウイルススキャンを行うためのソフトになります。

        ウイルス定義ファイルの読み込みなどはclamdが行っているために、スキャン開始までの時間が短いという点になります。

        また、変更のないファイルについてはスキャンを行わないため、2度目以降のスキャン時間が短くなります。

        サーバのリソースはclamdがデーモンとして動作しているので常時使用されます。

        (2) 上記スクリプトを実行するとcalmadscanが実行されるので、Permission deniedとなってしまいそうですが、CALMSCAN=/bin/clamscanに変更した方が良いのでしょうか?

        今回の手順では「clamdscan」を使用してウイルススキャンを行うため、特にに変更の必要はありません。

        ■ ERROR: Could not lookup : Servname not supported for ai_socktype について

        ちなみに、このエラーはclamd@scanが動作していない時に発生しますので、同様のエラーが発生しましたら、clamd@scanの動作状況を確認してみてください。

        以上、よろしくお願いします。

      • tamohiko より:

        金野さん

        追加で質問させてください。

        今回の手順はSELinuxを無効化して作成しているのですが、SELinuxの設定はどのようになっていますでしょうか?

        私の方でSELinuxを有効化した環境で試してみたところ、「lstat() failed: Permission denied. ERROR」が発生することを確認しました。

        この現象の解決として、SELinuxでウイルススキャンを許可する設定を追加することで解決できましたので、取り急ぎお知らせさせていただきます。

        # setsebool -P antivirus_can_scan_system on

        この情報は下記サイトで得ましたので、より詳しい内容についてはそちらでご確認してみてください。
        https://qiita.com/todaemon/items/d83425058c0e52b258c7

        以上、よろしくお願いいたします。

      • 金野 光洋(きんの みつひろ) より:

        すみません。返信の場所を間違えました。
        ↓の方をご覧下さい。

      • 金野 光洋(きんの みつひろ) より:

        tamohikoさん、
        Booleanをon設定したところ、clamdscanの起動に成功しました。
        off設定に戻すとpermission deniedが復活し、再度on設定にすると起動成功しました。
        やはりデフォルトでSELinuxが有効化されていたようです。
        これで全ての疑問が解消しました。
        色々とご親切にご教示頂き、大変ありがとうございました。
        また何かの機会がありましたら、宜しくお願い致します。

      • tamohiko より:

        金野さん

        結果のご連絡ありがとうございます。

        やはりSELinuxが原因だったのですね。
        私の方も勉強になりました。

        > 色々とご親切にご教示頂き、大変ありがとうございました。
        > また何かの機会がありましたら、宜しくお願い致します。

        お役に立ててなによりです。
        何かありましたら、お気軽にコメントしてください!

      • 金野 光洋(きんの みつひろ) より:

        ご参考までに、その後の話です。

        当該シェルについてSCANDIRを1と2で2つ定義し、以降のlog(=スキャン結果の標準出力)の出力先も2つ定義し、2つのディレクトリを指定してスキャンするようにしました。
        Mailは未設定なのでコメントアウトし、最後のlogファイルのrmもコメントアウトしました。
        この状態で手動実行すると正常に動作しました。スキャン結果はlogファイルに
        正しく出力されました。

        次にcronで実行させました。
        シェルは指定時刻に実行され、スキャン自体は正常に動作した模様です。またlogファイルも作成されていました。しかしながら、logファイルの中身が空=サイズゼロでした。当然ながら/var/mail/rootや/var/log/cronにはスキャン結果の標準出力は見当たりませんでした。

        これから色々と調査していきます。調査結果は後程報告させて頂きます。

      • 金野 光洋(きんの みつひろ) より:

        あまり綺麗な形ではありませんが、まがいなりにも期待通りに動作する方法がわかりましたので、報告しておきます。

        SCANDIR1=/root
        SCANDIR2=/home
        SCANDIR3=/usr
        VIRUS_MVDIR=/root/virus
        MAILADDR=root

        CLAMDSCAN=/bin/clamdscan
        HOSTNAME=`hostname`
        RUNDATE=`date +%Y%m%d-%H%M%S`
        SCANTMP=/tmp/clamdscan.result/clamdscan_$RUNDATE

        CLAMUPDATE=”clamav-server \
        clamav-data \
        clamav-update \
        clamav-filesystem \
        clamav \
        clamav-scanner \ ←これが抜けていたので追加してます。
        clamav-scanner-systemd \
        clamav-devel \
        clamav-lib \
        clamav-server-systemd”

        # ClamAV update

        yum -y update $CLAMUPDATE

        #
        # Virus scan
        #
        最初に/rootをスキャンし>ファイル出力
        →この時の結果はファイルはできるものの中身は空で出力されていないと思います。
        次のスキャンの前に/bin/chown $SCANTMP rootを実行
        →元々のオーナはrootなので当然、ユーザ指示エラーになります。
        次に/homeをスキャンし>>ファイル出力
        更に/usrをスキャンし>>ファイル出力
        最後に/rootを再スキャンし>>ファイル出力
        これで、上記3ディレクトリのスキャン結果が/home→/usr→/rootの順にファイルに出力され、メール送信されます。
        出力先ディレクトリは/tmp/…のみOK、/root/…や/etc/…はNG(サイズ0)になります。

        #$CLAMDSCAN $SCANDIR1 > $SCANTMP 2>&1
        #$CLAMDSCAN $SCANDIR1 –move=$VIRUS_MVDIR > $SCANTMP
        $CLAMDSCAN $SCANDIR1 –remove > $SCANTMP 2>&1
        /bin/chown $SCANTMP root ←何故かこれを入れると上手くいきます。
        #$CLAMDSCAN $SCANDIR2 >> $SCANTMP 2>&1
        #$CLAMDSCAN $SCANDIR2 –move=$VIRUS_MVDIR >> $SCANTMP
        $CLAMDSCAN $SCANDIR2 –remove >> $SCANTMP 2>&1
        #$CLAMDSCAN $SCANDIR3 >> $SCANTMP 2>&1
        #$CLAMDSCAN $SCANDIR3 –move=$VIRUS_MVDIR >> $SCANTMP
        $CLAMDSCAN $SCANDIR3 –remove >> $SCANTMP 2>&1
        #$CLAMDSCAN $SCANDIR1 >> $SCANTMP 2>&1
        #$CLAMDSCAN $SCANDIR1 –move=$VIRUS_MVDIR >> $SCANTMP
        $CLAMDSCAN $SCANDIR1 –remove >> $SCANTMP 2>&1

        取り急ぎ報告まで。
        あまり役に立ちそうもない情報で申し訳ありません。

      • tamohiko より:

        金野さん

        検証結果のおしらせありがとうございます。
        「clamav-scanner」が抜けていた点は早速修正させていただきました。

        ついでにスクリプトを見直していたところ、ClamAV update処理の部分で「epel」リポジトリの指定が抜けていたのでこちらも修正させていただきました。

        ご迷惑をおかけして申し訳ありませんが、修正のほうよろしくお願いいたします。

        スキャン結果のログ出力については、私の環境では空で出力とい現象が発生していなので詳しい状況はわからないのですが、SELinuxとかが影響しているのかもしれませんね。

        「/var/log/messages」や「/var/log/audit/audit.log」に何かログは記録されていなかったでしょうか?

      • 金野 光洋(きんの みつひろ) より:

        tamohikoさん、
        修正ありがとうございました。
        「epel」リポジトリの指定はこちらのシェルにも反映させて頂きました。
        やはりSELinuxのわなっぽいです。
        なお、見方がわからないでけかもしれませんが、「/var/log/messages」や「/var/log/audit/audit.log」にはそれっぽいエラーメッセージはありませんでした。messagesではLibClamAV関連のErrorが主体でした。audit.logはエラーメッセージはありませんでした。

      • tamohiko より:

        金野さん

        シェルの修正お手数をおかけしました。
        また、ログの確認もあわせてありがとうございました。

        ログに情報がありませんでしたか。
        SELinuxの件については私もあまり詳しくはないので、ちょっと検証環境が用意出来たら調査してみようと思うので、何かわかりましたらお知らせさせていただきますね。

        あまりお役に立つなくてすいません。

  5. ありがとうございます。とても参考になりました。 より:

    とても些細な事ですが、

    >ウイルススキャン用スクリプト作成
    ファイル作成時
    ># cd /root
    ># vi virus_check.sh

    パーミッション変更時
    ># chmod 744 /root/virus_scan.sh
    でファイル名が違っています。

    • tamohiko より:

      ご指摘ありがとうございます。
      該当箇所を修正させていただきました。

      (誤)# vi virus_check.sh
      (正)# vi virus_scan.sh

      • 金野 光洋(きんの みつひろ) より:

        tamohiko様
        ご回答ありがとうございます。
        なるほど、clamdscanが正しいことを理解しました。
        どこか別の部分ではなく、こちら側で他者が別の計算機でclamavをインストールした時の手順からclamscanを発見しています。binの中をのぞいたらありましたが..

        またLookUpErrorも理解しました。

        現状は/bin/clamscanは実行可で/bin/clamdscanは実行不可のままですので、
        明日、SELinuxを有効化している環境であること(OSなしの計算機にCentOS7とclamAVをインストールした状態ですので、OSのデフォルトがSELinux有効化となっているのかもしれません。)を確認した後、無効化してclamdscanをリトライしてみます。結果報告は少々お待ち願います。

        色々とありがとうございます。

タイトルとURLをコピーしました