- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2021-11-19T02:22:14+00:00","","")
#author("2023-12-17T13:38:12+09:00","","")
#topicpath
//////////////////////////////////////////////////////////////////////////////
* ClamAV [#ybd9545e]
- アンチウイルスソフト
///////////////////////////////////////////////////////////////////////////////
* 目次 [#u3cbd3b6]
#contents();
//////////////////////////////////////////////////////////////////////////////
* 準備 [#if342208]
//============================================================================
** インストール [#of00fd6f]
- 幾つか設定の仕方があるが、定期自動実行をしたい為、 daemon をインストールする:
# apt-get install clamav-daemon
//============================================================================
** 設定 [#dec237f6]
- 素でとりあえず実行してみると、エラーになる:
# clamdscan --multiscan --verbose --move=/var/log/clama
action_setup: Failed to get realpath of /var/log/clama
ERROR: Could not connect to clamd on LocalSocket /var/run/clamav/clamd.sock: No such file or directory
----------- SCAN SUMMARY -----------
Infected files: 0
Total errors: 1
Time: 0.000 sec (0 m 0 s)
Start Date: 2021:12:26 09:04:45
End Date: 2021:12:26 09:04:45
-- これは apparmor というカーネル拡張機能が clamav の動作を制限している為に起きる。
- apparmor の設定を変更する
// ++ /etc/apparmor.d/local/usr.sbin.clamd の編集
// /home/ r,
// -- 書式:
// /<clamavのアクセスを許可するパス>/ <パーミッション>,
// # パスの最後の "/" と、パーミッションの最後の "," は必要なので注意。
++ apparmor-utils をインストールする(デフォルトでは入っていない)
# apt-get install apparmor-utils
++ clamav を root で実行出来るように設定変更する
# aa-complain clamd
--- これによって、以下のファイルが変更される:
/etc/apparmor.d/usr.sbin.clamd
++ apparmor の設定を反映させる為、apparmor と clamd を再起動する
# /etc/init.d/clamav-daemon stop
# /etc/init.d/apparmor restart
# /etc/init.d/clamav-daemon start
- root 権限で実行させる
++ /etc/clamav/clamd.conf
# User clamav
User root
--- この設定ファイルは、行の途中からコメントを書くことは出来ない(書くとエラーになる)ので注意。
++ 変更を反映させる為、daemon を再起動する
# /etc/init.d/clamav-daemon restart
# /etc/init.d/clamav-daemon status
- 自動実行させる
++ 自動実行用のスクリプトを用意する
--- /root/bin/clamav-run.sh
#!/bin/bash
PATH=/usr/bin:/bin
TITLE=""
TO="To: root\n"
SENDMAIL=/usr/sbin/sendmail
CLAMDSCAN=/usr/bin/clamdscan
#SENDMAIL=echo
# EXCLUDES=( /proc /sys /run /dev );
# OPT_EXCLUDES=( $(for e in "${EXCLUDES[@]}"; do echo "--excludes-dir=${e}"; done) );
# OPT_MULTI_THREAD=
OPT_MULTI_THREAD=--multiscan
VIRUS_MOVE_PATH=/var/log/clamav/virus
function err_print {
local msg="${@}";
printf "\x1b[31mclamav-run.sh: ${msg}\x1b[0m\n";
}
if [ ! -d ${OPT_VIRUS_MOVE_PATH} ]; then
mkdir -p ${OPT_VIRUS_MOVE_PATH};
fi
# update definition
# freshclam > /dev/null
# full scan (multi-thread)
# ${CLAMDSCAN} --multiscan --verbose --move=/var/log/clamav/virus /
# full scan (single-thread)
${CLAMDSCAN} --verbose --move=/var/log/clamav/virus /
${CLAMDSCAN} ${OPT_MULTI_THREAD} --verbose --move=${VIRUS_MOVE_PATH} /
STATUS=$?;
# report
case ${STATUS} in
0 )
err_print "virus not found"
TITLE="Subject: ClamAV scan OK"
;;
1 )
err_print "virus found (status = ${STATUS})"
TITLE="Subject: ClamAV scan NG"
;;
* )
err_print "error occured (status = ${STATUS})"
TITLE="Subject: ClamAV scan Error"
;;
esac
echo -e ${TO}${TITLE} | cat - /var/log/clamav/clamav.log | ${SENDMAIL} -t
unset err_print
++ cron に登録する
# crontab -e
-----------------------------------------------------
0 0 * * * /root/bin/clamav-run.sh
-----------------------------------------------------
//============================================================================
** リアルタイムスキャンの設定 [#q287e4a4]
+ 稼働中のカーネルが FANOTIFY をサポートしていることを確認する
-- 以下の2行が確認出来ればOK
CONFIG_FANOTIFY=y
CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
-- 確認手順
+++ /boot/config-<VERSION> の <VERSION> 部分が何かを特定する為、稼働中のカーネルのバージョンを確認する
$ uname -a
Linux martinu 6.1.0-13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.55-1 (2023-09-29) x86_64 GNU/Linux
+++ 稼働中のカーネルの config ファイルのファイル名を確認する
$ ls /boot/config-6.1.0-13-*
/boot/config-6.1.0-13-amd64
+++ config ファイルの設定内容から、関係箇所を grep (または rg)で検索し、値を確認する
$ rg FANOTIFY /boot/config-6.1.0-13-amd64
9380:CONFIG_FANOTIFY=y
9381:CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
//////////////////////////////////////////////////////////////////////////////
* 参考リンク [#z345252b]
* 手動スキャン [#c927f10b]
- 手動スキャンには、 (1) clamscan を使う方法と、(2) clamav-daemon を動かしておいて clamdscan を使う方法の2つがある。
- (1) はオーバーヘッドが大きく非常に時間がかかるので、(2) を使うことにする。
//============================================================================
** clamdscan による手動スキャン [#e2fe3173]
- コマンド書式
$ clamdscan --fdpass --infected <path-to-scan-target>
- コマンドラインオプション
|~option |~description |~remark |
|--fdpass |clamd デーモンの実行ユーザー(clamav)と違うユーザーでスキャンする | |
|--infected |ウイルスであった場合のみ標準出力やログに出力 | |
|--config-file=<path> |<path> を clamd デーモンにアクセスするための設定ファイルに指定する |デフォルトの設定ファイルを使用する場合は指定不要&br;(debian の場合は /etc/clamav/clamd.conf) |
|--move=<path> |<path> を検出したウイルスファイルの移動先ディレクトリに指定する | |
|--log=<path> |<path> をログファイルの場所に指定する | |
|<path-to-scan-target> |スキャン対象のパス | |
//////////////////////////////////////////////////////////////////////////////
* 参考リンク [#links]
- [[ClamAVによる定期ウイルススキャンの設定>https://inaba-serverdesign.jp/blog/20170913/clamav_scan_virus_install.html]]
- [[Debian 9.3でchkrootkitとClamAVでウイルス対策 (Linux自作PC 9)>https://ksk-log.com/post/2017/12/2017-12-13-linux-gpu-pc9/]]
- [[Debian 9.3 ClamAV高負荷問題の対処3 (Linux自作PC)>https://ksk-log.com/post/2018/01/2018-01-09-high-load4/]]
- [[如是我聞 - a blog about life and tech>https://blog.nomott.com/linux-antivirus-clamav-install-config/]]