#author("2025-02-24T00:28:08+09:00","","") #author("2025-03-08T11:11:18+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 ${VIRUS_MOVE_PATH} ]; then mkdir -p ${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} ${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 //============================================================================ ** スキャン中の CPU使用率の調整 [#p72903c1] - Debian12 では clamav のスキャン中に他の作業が出来ないレベルで CPU を占有する。そこで CPU の使用率を調整する。 + /lib/systemd/system/clamav-daemon.service の変更 -- [Service] で CPU の使用率を CPUQuota=50% にする。 [Unit] Description=Clam AntiVirus userspace daemon Documentation=man:clamd(8) man:clamd.conf(5) https://docs.clamav.net/ Requires=clamav-daemon.socket # Check for database existence ConditionPathExistsGlob=/var/lib/clamav/main.{c[vl]d,inc} ConditionPathExistsGlob=/var/lib/clamav/daily.{c[vl]d,inc} [Service] ExecStart=/usr/sbin/clamd --foreground=true # Reload the database ExecReload=/bin/kill -USR2 $MAINPID TimeoutStartSec=420 CPUQuota=50% [Install] WantedBy=multi-user.target Also=clamav-daemon.socket + 設定の再読込をさせる $ sudo systemctl daemon-reload $ sudo systemctl reload-or-restart clamav-daemon + 動作確認 -- フルスキャンを実行し、 top などで CPU 使用率が指定した程度になっていることを確認する。 ////////////////////////////////////////////////////////////////////////////// * 手動スキャン [#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/]]