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」部分の前に「#」をつけて、コメントにします。
- ログファイル設定
- ログを記録するファイルを設定しログを収集します。
- ログファイルサイズ設定
- ログファイルの最大サイズを設定します。
- ログファイルに時間を設定
- ログに時刻も含め記録する。
- ログローテーション設定
- ログをローテーションさせる設定。
- ローカルソケット使用設定
- ローカルソケットを使用し、ローカルからのみ接続できるようにします。
- 異常終了時にソケットを削除
- 異常終了した際にソケットを削除する設定。
- スキャン除外ディレクトリ設定
- ウイルススキャンを行わないディレクトリを指定します。
- 今回は「/dev」ディレクトリもウイルスチェックから外していますが、環境に合わせて設定を行ってください。
- 実行ユーザ設定
- rootユーザで実行するように変更します。
(画面のサイズ上2行に見えますが、1行での設定となります)
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 --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
コメント
tamohiko様
いろんなサイト様を参照しつつ最終的にこちらのサイト様で無事に動作させることができました。
ありがとうございます。
スクリプトをコピぺして動作させてしまいご迷惑をおかけしました。
申し訳ありませんでした。
永田さん
コメントありがとうございます。
お役に立てたようでうれしく思います。
> スクリプトをコピぺして動作させてしまいご迷惑をおかけしました。
> 申し訳ありませんでした。
全然問題ありませんのでお気になさらないでください。
いろんなサイトさんがあって躓いてばかりいたんですがこちらの内容で無事起動させることができました。
助かりました。ありがとうございます。
sampeiさん
コメントありがとうございます。
お役に立てて何よりです!
tamohiko様
結局、clamd@scanの「systemctl start clamd@scan」がうまく動作しないので、centOS7.5に、クリーンインストールをしましたら、うまく動作しました。参考にしましたは、「centOS7で自宅サーバー構築」のネット記事です、詳細は、時間を作って、貴殿の書かれた記事を参考に、改善していきたいと、思います。いろいろと、お手数をおかけいたしましたが、不具合の原因は、不明ながらも、自己解決しましたので。おしらせいたします
貴殿のレベルに早く達したいと思います。ご相談、ありがとうございました。
関根久嗣さん
コメントありがとうございます。
ご返信が遅くなってしまいすいません。
> 結局、clamd@scanの「systemctl start clamd@scan」がうまく動作しないので、centOS7.5に、クリーンインストールをしましたら、うまく動作しました
動作しなかった際のシステムログ等があれば何かわかったかもしれませんが、私の方でも手順の見直しをしてみようと思います。
とりあえず動作されたとのことで何よりです。
なにかあればご気軽にコメントしてください。
clamdscan /rootを実行すると下記のエラーが発生します。
/root: lstat() failed: Permission denied. ERROR
chmod 777 /rootをやっても結果が変わりません。
アドバイスをいただけると助かります。
OSはCENTOS7を使用しております。
寺西さん
コメントありがとうございます。
> /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も実施済です。何か他に原因が考えられますでしょうか?
よろしくご教示願います。
金野さん
コメントありがとうございます。
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に変更した方が良いのでしょうか?
金野さん
コメントありがとうございます。
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の動作状況を確認してみてください。
以上、よろしくお願いします。
金野さん
追加で質問させてください。
今回の手順は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が有効化されていたようです。
これで全ての疑問が解消しました。
色々とご親切にご教示頂き、大変ありがとうございました。
また何かの機会がありましたら、宜しくお願い致します。
金野さん
結果のご連絡ありがとうございます。
やはり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
取り急ぎ報告まで。
あまり役に立ちそうもない情報で申し訳ありません。
金野さん
検証結果のおしらせありがとうございます。
「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はエラーメッセージはありませんでした。
金野さん
シェルの修正お手数をおかけしました。
また、ログの確認もあわせてありがとうございました。
ログに情報がありませんでしたか。
SELinuxの件については私もあまり詳しくはないので、ちょっと検証環境が用意出来たら調査してみようと思うので、何かわかりましたらお知らせさせていただきますね。
あまりお役に立つなくてすいません。
とても些細な事ですが、
>ウイルススキャン用スクリプト作成
ファイル作成時
># cd /root
># vi virus_check.sh
と
パーミッション変更時
># chmod 744 /root/virus_scan.sh
でファイル名が違っています。
ご指摘ありがとうございます。
該当箇所を修正させていただきました。
(誤)# 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をリトライしてみます。結果報告は少々お待ち願います。
色々とありがとうございます。