「ClamAV」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(ヒントとテクニックを翻訳して追加)
 
(同じ利用者による、間の10版が非表示)
24行目: 24行目:
 
# freshclam
 
# freshclam
   
  +
プロキシを使っている場合は、{{ic|/etc/clamav/freshclam.conf}} を編集して、HTTPProxyServer、HTTPProxyPort、HTTPProxyUsername、および HTTPProxyPassword を更新します。
データベースのファイルは以下に保存されます:
 
  +
  +
データベース ファイルは次の場所に保存されます:
  +
 
/var/lib/clamav/daily.cvd
 
/var/lib/clamav/daily.cvd
 
/var/lib/clamav/main.cvd
 
/var/lib/clamav/main.cvd
 
/var/lib/clamav/bytecode.cvd
 
/var/lib/clamav/bytecode.cvd
   
ウイルス定義をアップデートすサービスは {{ic|clamav-freshclam.service}} です。このサービスを起動有効化することでウイルス定義が最新になります。
+
ウイルス定義が最新に保たれように {{ic|clamav-freshclam.service}} を [[起動/有効化]] します。
   
 
== デーモンの起動 ==
 
== デーモンの起動 ==
   
  +
{{Note|
サービスを起動する前にデータベースを更新しないと問題が発生して ClamAV が正しく起動できなくなります。
 
  +
* 初めてサービスを開始する前に freshclam を実行する必要があります。そうしないと、ClamAV が正しく起動できなくなるトラブル/エラーが発生します。
  +
* スタンドアロンスキャンを行うだけであれば、デーモンは必要ありません。以下の [[#ウイルスのスキャン|ウイルスのスキャン]] を参照してください。
  +
}}
   
サービスは {{ic|clamav-daemon.service}} です。サービスを起動する方法などは[[デーモン]]を読んでください。サービスを起動する前に {{ic|freshclam}} を実行てください
+
サービス名は {{ic|clamav-daemon.service}} です。これ [[起動]] し、[[有効化]] します
   
 
== ソフトウェアのテスト ==
 
== ソフトウェアのテスト ==
55行目: 61行目:
 
{{AUR|clamav-unofficial-sigs}} をインストールして {{ic|/etc/clamav-unofficial-sigs/user.conf}} で設定するだけで MalwarePatrol, SecuriteInfo, Yara, Linux Malware Detect などの署名・データベースを追加できます。データベースについては [https://github.com/extremeshok/clamav-unofficial-sigs#description GitHub リポジトリの説明] を読んでください。
 
{{AUR|clamav-unofficial-sigs}} をインストールして {{ic|/etc/clamav-unofficial-sigs/user.conf}} で設定するだけで MalwarePatrol, SecuriteInfo, Yara, Linux Malware Detect などの署名・データベースを追加できます。データベースについては [https://github.com/extremeshok/clamav-unofficial-sigs#description GitHub リポジトリの説明] を読んでください。
   
  +
{{Note|ClamAV ミラーからの正式な署名の更新を行うには、{{ic|clamav-freshclam.service}} が [[起動]] している必要があります。}}
=== Option #1: Set up Fangfrisch ===
 
   
  +
=== オプション1: Fangfrisch の設定 ===
[https://rseichter.github.io/fangfrisch/ Fangfrisch] was designed as a more secure, flexible and convenient replacement for clamav-unofficial-sigs, and requires [https://rseichter.github.io/fangfrisch/#_configuration very little configuration].
 
   
  +
[https://rseichter.github.io/fangfrisch/ Fangfrisch] は clamav-unofficial-sigs のより安全で柔軟かつ便利な代替品として設計され、[https://rseichter.github.io/fangfrisch/#_configuration ほとんど設定が必要ありません]
Most importantly, Fangfrisch never needs to be run with root permissions, unlike clamav-unofficial-sigs.
 
   
  +
最も重要なことは、Fangfrisch は clamav-unofficial-sigs とは異なり、ルート権限で実行する必要がないことです。
Create database structure by running:
 
  +
  +
実行することでデータベース構造を作成します。
   
 
# sudo -u clamav /usr/bin/fangfrisch --conf /etc/fangfrisch/fangfrisch.conf initdb
 
# sudo -u clamav /usr/bin/fangfrisch --conf /etc/fangfrisch/fangfrisch.conf initdb
   
[[Enable]] the {{ic|fangfrisch.timer}}.
+
{{ic|fangfrisch.timer}} を [[有効化]] してください。
   
=== Option #2: clamav-unofficial-sigs の設定 ===
+
=== オプション2:clamav-unofficial-sigs の設定 ===
   
 
まず {{ic|/etc/clamav-unofficial-sigs/user.conf}} を編集して以下の行を変えてください:
 
まず {{ic|/etc/clamav-unofficial-sigs/user.conf}} を編集して以下の行を変えてください:
100行目: 108行目:
   
 
== ウイルスのスキャン ==
 
== ウイルスのスキャン ==
  +
  +
オンデマンドスキャンには2つのオプションがあります。
  +
  +
=== スタンドアロンスキャナーを使用する ===
   
 
{{ic|clamscan}} を使って特定のファイルやホームディレクトリ、もしくはシステム全体をスキャンすることができます:
 
{{ic|clamscan}} を使って特定のファイルやホームディレクトリ、もしくはシステム全体をスキャンすることができます:
112行目: 124行目:
   
 
{{ic|-l ''path/to/file''}} オプションを使うと {{ic|clamscan}} のログがテキストファイルに出力されます。
 
{{ic|-l ''path/to/file''}} オプションを使うと {{ic|clamscan}} のログがテキストファイルに出力されます。
  +
  +
=== デーモンの使用 ===
  +
  +
{{ic|clamdscan}} は上記と似ていますが、コマンドが動作するためにはデーモンが起動している必要があります。デーモンは {{ic|/etc/clamav/clamd.conf}} で指定された設定を読み込むので、ほとんどのオプションは無視されます。
   
 
== milter を使う ==
 
== milter を使う ==
149行目: 165行目:
   
 
== オンアクセススキャン ==
 
== オンアクセススキャン ==
  +
  +
: ''(オリジナルソース: https://blog.clamav.net/2016/03/configuring-on-access-scanning-in-clamav.html)''
  +
 
オンアクセススキャンはファイルを読み書き実行した際にスキャンを実行する機能です。
 
オンアクセススキャンはファイルを読み書き実行した際にスキャンを実行する機能です。
  +
  +
{{Warning | この時点(2021年11月)では、ClamAV でのオンアクセススキャンはまだ未成熟であり、原因不明の clamd クラッシュが発生する可能性があり、コンテナ化されたプロセスは保護されません。したがって、それがセキュリティの向上であるかどうかは議論の余地があります。規制や契約、あるいは自分自身の好奇心でそうせざるを得ない場合を除き、有効にしないでください。}}
   
 
オンアクセススキャンを使うには ''fanotify'' を有効にしてコンパイルしたカーネルが必要です (カーネル 3.8 以上)。オンアクセススキャンを有効にする前に ''fanotify'' が有効になっているか確認してください:
 
オンアクセススキャンを使うには ''fanotify'' を有効にしてコンパイルしたカーネルが必要です (カーネル 3.8 以上)。オンアクセススキャンを有効にする前に ''fanotify'' が有効になっているか確認してください:
 
$ zgrep FANOTIFY /proc/config.gz
 
$ zgrep FANOTIFY /proc/config.gz
   
{{ic|/etc/clamav/clamd.conf}} を編集することでンアクセススキャンを有効にできます:
+
{{ic|/etc/clamav/clamd.conf}} ファイルの最後に以下追加して、編集しま。(個々のプションを変更することもできます)
   
  +
{{Warning | ファイルの他の部分を変更する場合は、clamd ポートのセキュリティに関する次の警告に注意してください。通常、ローカル UNIX ソケットを使用しますが、このポートは認証または保護されていないことに注意してください。デーモンと ClamD のセクションの詳細については、https://docs.clamav.net/manual/Usage/Scanning.html#clamd-v0101 を参照してください。}}
{{hc|/etc/clamav/clamd.conf|
 
# Enable son-access scan, required clamd service running
 
ScanOnAccess true
 
   
  +
{{hc|/etc/clamav/clamd.conf|
 
# Set the mount point where to recursively perform the scan,
 
# Set the mount point where to recursively perform the scan,
 
# this could be every path or multiple path (one line for path)
 
# this could be every path or multiple path (one line for path)
OnAccessMountPath /usr
+
OnAccessMountPath /
  +
OnAccessExcludePath /proc
OnAccessMountPath /home/
 
OnAccessExcludePath /var/log/
+
OnAccessExcludePath /run
  +
OnAccessExcludePath /sys
  +
  +
# Alternatively, add some directories instead of mount points
  +
# OnAccessIncludePath /home
   
  +
# Prevention doesn't work with OnAccessMountPath.
# flag fanotify to block any events on monitored files to perform the scan
 
  +
# It works with OnAccessIncludePath, as long as /usr and /etc are not included.
  +
# Including /var while activating prevention is also not recommended, because
  +
# this would slow down package installation by a factor of 1000.
 
OnAccessPrevention false
 
OnAccessPrevention false
   
# perform scans on newly created, moved, or renamed files
+
# Perform scans on newly created, moved, or renamed files
 
OnAccessExtraScanning true
 
OnAccessExtraScanning true
   
# check the UID from the event of fanotify
+
# Exclude the UID of the scanner itself from checking, to prevent loops
  +
OnAccessExcludeUname clamav
OnAccessExcludeUID 0
 
   
  +
# Optionally, also exclude root-owned processes
# action to perform when clamav detects a malicious file
 
  +
# OnAccessExcludeRootUID true
# it is possibile to specify ad inline command too
 
VirusEvent /etc/clamav/detected.zsh
 
   
  +
# Specify an action to perform when clamav detects a malicious file
# WARNING: clamd should run as root
 
  +
# it is possible to specify an inline command too
User root
 
  +
VirusEvent /etc/clamav/virus-event.bash
  +
  +
# WARNING: for security reasons, clamd should NEVER run as root.
  +
# Previous instructions in this wiki included this line, remove it:
  +
# User root # REMOVE THIS
  +
# Add this instead:
  +
User clamav
 
}}
 
}}
   
  +
次に、''clamav'' ユーザが [[sudo]] を介してカスタム環境変数を持つ任意のユーザとして ''notify-send'' を実行することを許可します。
以下のファイルを作成してください:
 
  +
{{hc|/etc/sudoers.d/clamav|2=
  +
clamav ALL = (ALL) NOPASSWD: SETENV: /usr/bin/notify-send
  +
}}
   
{{hc|/etc/clamav/detected.sh|2=<nowiki>
+
{{hc|/etc/clamav/virus-event.bash|2=<nowiki>
 
#!/bin/bash
 
#!/bin/bash
 
PATH=/usr/bin
 
PATH=/usr/bin
  +
ALERT="Signature detected by clamav: $CLAM_VIRUSEVENT_VIRUSNAME in $CLAM_VIRUSEVENT_FILENAME"
   
  +
# Send an alert to all graphical users.
alert="Signature detected: $CLAM_VIRUSEVENT_VIRUSNAME in $CLAM_VIRUSEVENT_FILENAME"
 
  +
for ADDRESS in /run/user/* ; do
  +
USERID=${ADDRESS#/run/user/}
  +
/usr/bin/sudo -u "#$USERID" DBUS_SESSION_BUS_ADDRESS="unix:path=$ADDRESS/bus" PATH=${PATH} \
  +
/usr/bin/notify-send -i dialog-warning "Virus found!" "$ALERT"
  +
done
  +
</nowiki>}}
   
  +
{{ic|clamav-daemon.service}} を [[再起動]] します。
# Send the alert to systemd logger if exist, othewise to /var/log
 
if [[ -z $(command -v systemd-cat) ]]; then
 
echo "$(date) - $alert" >> /var/log/clamav/infected.log
 
else
 
# as "emerg", this could cause your DE to show a visual alert. Happen in Plasma. but the next visual alert is much nicer
 
echo "$alert" | /usr/bin/systemd-cat -t clamav -p emerg
 
fi
 
   
  +
デフォルトでは ''clamonacc'' は ''clamav'' にアクセスしたばかりのファイル名を渡してスキャンします。これは問題で、''clamav'' ユーザがアクセスできないファイルはこの方法ではスキャンできないからです。その代わりに、''clamonacc'' (常に ''root'' として実行される) にファイル記述子渡しを使用するように指示することが可能であり。[[編集]] してください。{{ic|clamav-clamonacc.service}} に以下のように記述します。
#send an alrt to all graphical user
 
XUSERS=($(who|awk '{print $1$NF}'|sort -u))
 
   
  +
[Service]
for XUSER in $XUSERS; do
 
  +
ExecStart=
NAME=(${XUSER/(/ })
 
  +
ExecStart=/usr/sbin/clamonacc -F '''--fdpass''' --log=/var/log/clamav/clamonacc.log
DISPLAY=${NAME[1]/)/}
 
DBUS_ADDRESS=unix:path=/run/user/$(id -u ${NAME[0]})/bus
 
echo "run $NAME - $DISPLAY - $DBUS_ADDRESS -" >> /tmp/testlog
 
/usr/bin/sudo -u ${NAME[0]} DISPLAY=${DISPLAY} \
 
DBUS_SESSION_BUS_ADDRESS=${DBUS_ADDRESS} \
 
PATH=${PATH} \
 
/usr/bin/notify-send -i dialog-warning "clamAV" "$alert"
 
done
 
</nowiki>}}
 
   
  +
最後に、{{ic|clamav-clamonacc.service}} を [[起動/有効化]] する必要があります。
[[AppArmor]] を使用している場合、clamd を root で実行できるように設定してください:
 
  +
  +
もし''clamd''に関して [[AppArmor]] から拒否された場合は、プロファイルを complain-only モードに設定してください。
   
 
# aa-complain clamd
 
# aa-complain clamd
   
  +
== ヒントとテクニック ==
設定後 {{ic|clamav-daemon.service}} を[[再起動]]してください。
 
  +
  +
=== 複数のスレッドで実行 ===
  +
  +
==== clamscan の使用方法 ====
  +
  +
コマンドラインから {{ic|clamscan}} を使ってファイルやディレクトリをスキャンする場合、1つの CPU スレッドのみが使用されます。タイミングが重要でない場合や、コンピュータが重くなることを望まない場合は、これでよいかもしれません。大きなフォルダや USB ドライブを高速にスキャンする必要がある場合は、利用可能なすべての CPU を使用してプロセスを高速化することができます。
  +
  +
{{ic|clamscan}} はシングルスレッドで設計されているので、{{ic|xargs}} を使って並列にスキャンを実行することができます。
  +
  +
$ find /home/archie -type f -print0 | xargs -0 -P $(nproc) clamscan
  +
  +
この例では、{{ic|xargs}} の {{ic|-P}} パラメータは、({ic|nproc}} によって報告される)と同じだけプロセスで {{ic|clamscan}} を実行します。{{ic|--max-lines}} と {{ic|--max-args}} オプションにより、スレッド間のワークロードのバッチ処理をさらに細かく制御することができます。
  +
  +
==== clamdscan の使用方法 ====
  +
  +
すでに {{ic|clamd}} デーモンが動作している場合は、代わりに {{ic|clamdscan}} を使うことができます (参照 [[ClamAV#デーモンの起動]])
  +
  +
$ clamdscan --multiscan --fdpass /home/archie
  +
  +
ここでは、{{ic|--multiscan}} パラメータによって {{ic|clamd}} が利用可能なスレッドを使用してディレクトリの内容を並行してスキャンすることを可能にしています。{{ic|--fdpass}} パラメータは、{{ic|clamav}} ユーザとグループの下でデーモンが動作しているので、ファイル記述子のパーミッションを {{ic|clamd}} に渡すために必要です。
   
  +
{{ic|clamdscan}} で利用可能なスレッド数は {{ic|/etc/clamav/clamd.conf}} の {{man|5|clamd.conf}} パラメータで決定されます.コマンドラインから {{ic|MaxThreads}} を指定してスキャンを開始しても、{{ic|--multiscan}} オプションを指定しない場合は、有効な CPU スレッドが 1 つしかスキャンに使用されません(現在のデフォルトは 10 です)
詳しくは http://blog.clamav.net/2016/03/configuring-on-access-scanning-in-clamav.html を参照。
 
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==
258行目: 308行目:
 
パーミッションを直して下さい:
 
パーミッションを直して下さい:
 
# chown UID:GID /var/lib/clamav & chmod 755 /var/lib/clamav
 
# chown UID:GID /var/lib/clamav & chmod 755 /var/lib/clamav
 
== ヒントとテクニック ==
 
 
=== 複数のスレッドで実行 ===
 
 
==== clamscan の使用方法 ====
 
 
コマンドラインから {{ic|clamscan}} を使ってファイルやディレクトリをスキャンする場合、1つの CPU スレッドのみが使用されます。タイミングが重要でない場合や、コンピュータが重くなることを望まない場合は、これでよいかもしれません。大きなフォルダや USB ドライブを高速にスキャンする必要がある場合は、利用可能なすべての CPU を使用してプロセスを高速化することができます。
 
 
{{ic|clamscan}} はシングルスレッドで設計されているので、{{ic|xargs}} を使って並列にスキャンを実行することができます。
 
 
$ find /home/archie -type f -print0 | xargs -0 -P $(nproc) clamscan
 
 
この例では、{{ic|xargs}} の {{ic|-P}} パラメータは、({ic|nproc}} によって報告される)と同じだけプロセスで {{ic|clamscan}} を実行します。{{ic|--max-lines}} と {{ic|--max-args}} オプションにより、スレッド間のワークロードのバッチ処理をさらに細かく制御することができます。
 
 
==== clamdscan の使用方法 ====
 
 
すでに {{ic|clamd}} デーモンが動作している場合は、代わりに {{ic|clamdscan}} を使うことができます (参照 [[ClamAV#デーモンの起動]])
 
 
$ clamdscan --multiscan --fdpass /home/archie
 
 
ここでは、{{ic|--multiscan}} パラメータによって {{ic|clamd}} が利用可能なスレッドを使用してディレクトリの内容を並行してスキャンすることを可能にしています。{{ic|--fdpass}} パラメータは、{{ic|clamav}} ユーザとグループの下でデーモンが動作しているので、ファイル記述子のパーミッションを {{ic|clamd}} に渡すために必要です。
 
 
{{ic|clamdscan}} で利用可能なスレッド数は {{ic|/etc/clamav/clamd.conf}} の {{man|5|clamd.conf}} パラメータで決定されます.コマンドラインから {{ic|MaxThreads}} を指定してスキャンを開始しても、{{ic|--multiscan}} オプションを指定しない場合は、有効な CPU スレッドが 1 つしかスキャンに使用されません(現在のデフォルトは 10 です)
 
   
 
== 参照 ==
 
== 参照 ==
   
 
* [[Wikipedia:ja:Clam AntiVirus]]
 
* [[Wikipedia:ja:Clam AntiVirus]]
* [[ClamSMTP]]
 

2023年1月12日 (木) 00:39時点における最新版

Clam AntiVirus は UNIX 用のオープンソースの (GPL) アンチウイルスツールキットです。柔軟性がありマルチスレッドで動作するデーモンやコマンドラインスキャナー、データベースを自動的に更新するツールなど、さまざまなユーティリティが含まれています。ClamAV は主として Windows デスクトップのためのファイル・メールサーバーで使われることを想定しているので、基本的には Windows のウイルスやマルウェアを検知します。

インストール

ClamAV は clamav パッケージでインストールできます。さらに以下のパッケージをインストールすることもできます:

  • clamtk - ClamAV の GUI フロントエンド
  • アドオン
    • clamtk-gnomeAUR - Nautilus ファイルマネージャでファイルやフォルダを右クリックしてコンテキストメニューからスキャンできるようにする ClamTk のプラグイン。
    • thunar-sendto-clamtkAUR - Thunar でファイルやフォルダを右クリックしてスキャンできるようにするシンプルなプラグイン。

データベースの更新

次のコマンドでウイルス定義を更新します:

# freshclam

プロキシを使っている場合は、/etc/clamav/freshclam.conf を編集して、HTTPProxyServer、HTTPProxyPort、HTTPProxyUsername、および HTTPProxyPassword を更新します。

データベース ファイルは次の場所に保存されます:

/var/lib/clamav/daily.cvd
/var/lib/clamav/main.cvd
/var/lib/clamav/bytecode.cvd

ウイルス定義が最新に保たれるように clamav-freshclam.service起動/有効化 します。

デーモンの起動

ノート:
  • 初めてサービスを開始する前に freshclam を実行する必要があります。そうしないと、ClamAV が正しく起動できなくなるトラブル/エラーが発生します。
  • スタンドアロンスキャンを行うだけであれば、デーモンは必要ありません。以下の ウイルスのスキャン を参照してください。

サービス名は clamav-daemon.service です。これを 起動 し、有効化 します。

ソフトウェアのテスト

ClamAV とウイルス定義が正しくインストールされているかどうか確かめるには、clamscan で EICAR テストファイル (ウイルスコードは含まれていない無害な署名です) をスキャンします。

$ curl https://www.eicar.org/download/eicar.com.txt | clamscan -

以下が出力されれば検出成功です:

stdin: Win.Test.EICAR_HDB-1 FOUND

上記の表示が出ない場合、トラブルシューティングを読むか、あるいは Arch フォーラム に投稿してください。

データベースや署名リポジトリの追加

ClamAV は他のリポジトリやセキュリティベンダーから提供されたデータベースや署名を使うことができます。

clamav-unofficial-sigsAUR をインストールして /etc/clamav-unofficial-sigs/user.conf で設定するだけで MalwarePatrol, SecuriteInfo, Yara, Linux Malware Detect などの署名・データベースを追加できます。データベースについては GitHub リポジトリの説明 を読んでください。

ノート: ClamAV ミラーからの正式な署名の更新を行うには、clamav-freshclam.service起動 している必要があります。

オプション1: Fangfrisch の設定

Fangfrisch は clamav-unofficial-sigs のより安全で柔軟かつ便利な代替品として設計され、ほとんど設定が必要ありません

最も重要なことは、Fangfrisch は clamav-unofficial-sigs とは異なり、ルート権限で実行する必要がないことです。

実行することでデータベース構造を作成します。

# sudo -u clamav /usr/bin/fangfrisch --conf /etc/fangfrisch/fangfrisch.conf initdb

fangfrisch.timer有効化 してください。

オプション2:clamav-unofficial-sigs の設定

まず /etc/clamav-unofficial-sigs/user.conf を編集して以下の行を変えてください:

# Uncomment the following line to enable the script
user_configuration_complete="yes"

そして以下のコマンドを実行して非公式の署名サービスを有効化 (マニュアルページやログローテーション、cron ジョブなどが含まれています):

# clamav-unofficial-sigs.sh --install-all

ClamAV で署名アップデートを行うために clamav-daemon サービスは動作させ続ける必要があります。

clamav-unofficial-sigs スクリプトで使われているデータベースと /etc/clamav-unofficial-sigs の設定ファイルで設定されているデータベースから署名が更新されます。手動でデータベースから署名を更新するには、以下のコマンドを実行:

# clamav-unofficial-sigs.sh

cron ジョブの実行を止めるには /etc/cron.d/clamav-unofficial-sigs ファイルを削除してください。

MalwarePatrol データベース

MalwarePatrol データベースを使用したい場合 https://www.malwarepatrol.net/ でアカウントを登録してください。

/etc/clamav-unofficial-sigs/user.conf の以下の行を変えることで有効にできます:

malwarepatrol_receipt_code="YOUR-RECEIPT-NUMBER" # enter your receipt number here
malwarepatrol_product_code="8" # Use 8 if you have a Free account or 15 if you are a Premium customer.
malwarepatrol_list="clamav_basic" # clamav_basic or clamav_ext
malwarepatrol_free="yes" # Set to yes if you have a Free account or no if you are a Premium customer.

詳しくは https://www.malwarepatrol.net/clamav-configuration-guide/ を参照。

ウイルスのスキャン

オンデマンドスキャンには2つのオプションがあります。

スタンドアロンスキャナーを使用する

clamscan を使って特定のファイルやホームディレクトリ、もしくはシステム全体をスキャンすることができます:

$ clamscan myfile
$ clamscan --recursive --infected /home # or -r -i
$ clamscan --recursive --infected --exclude-dir='^/sys|^/dev' /

感染しているファイルを clamscan に削除して欲しい場合はコマンドに --remove オプションを使って下さい。隔離したい場合は --move=/dir を使います。

clamscan で巨大なファイルをスキャンするときは、コマンドに --max-filesize=4000M--max-scansize=4000M オプションを追加してください。4000M というサイズは最大値です。必要に応じて低い値に置き換えてください。

-l path/to/file オプションを使うと clamscan のログがテキストファイルに出力されます。

デーモンの使用

clamdscan は上記と似ていますが、コマンドが動作するためにはデーモンが起動している必要があります。デーモンは /etc/clamav/clamd.conf で指定された設定を読み込むので、ほとんどのオプションは無視されます。

milter を使う

Milter を使ってメールにウイルスが含まれていないか sendmail サーバーでスキャンすることができます。

/etc/clamav/clamav-milter.conf.sample/etc/clamav/clamav-milter.conf にコピーして必要に応じて編集してください。例:

/etc/clamav/clamav-milter.conf
MilterSocket /run/clamav/clamav-milter.sock
MilterSocketMode 660
FixStaleSocket yes
User clamav
PidFile /run/clamav/clamav-milter.pid
TemporaryDirectory /tmp
ClamdSocket unix:/var/lib/clamav/clamd.sock
LogSyslog yes
LogInfected Basic

/etc/systemd/system/clamav-milter.service を作成:

/etc/systemd/system/clamav-milter.service
[Unit]
Description='ClamAV Milter'
After=clamd-daemon.service

[Service]
Type=forking
ExecStart=/usr/bin/clamav-milter --config-file /etc/clamav/clamav-milter.conf

[Install]
WantedBy=multi-user.target

サービス clamav-milter.service有効化して起動してください。

オンアクセススキャン

(オリジナルソース: https://blog.clamav.net/2016/03/configuring-on-access-scanning-in-clamav.html)

オンアクセススキャンはファイルを読み書き実行した際にスキャンを実行する機能です。

警告: この時点(2021年11月)では、ClamAV でのオンアクセススキャンはまだ未成熟であり、原因不明の clamd クラッシュが発生する可能性があり、コンテナ化されたプロセスは保護されません。したがって、それがセキュリティの向上であるかどうかは議論の余地があります。規制や契約、あるいは自分自身の好奇心でそうせざるを得ない場合を除き、有効にしないでください。

オンアクセススキャンを使うには fanotify を有効にしてコンパイルしたカーネルが必要です (カーネル 3.8 以上)。オンアクセススキャンを有効にする前に fanotify が有効になっているか確認してください:

$ zgrep FANOTIFY /proc/config.gz

/etc/clamav/clamd.conf ファイルの最後に以下を追加して、編集します。(個々のオプションを変更することもできます)

警告: ファイルの他の部分を変更する場合は、clamd ポートのセキュリティに関する次の警告に注意してください。通常、ローカル UNIX ソケットを使用しますが、このポートは認証または保護されていないことに注意してください。デーモンと ClamD のセクションの詳細については、https://docs.clamav.net/manual/Usage/Scanning.html#clamd-v0101 を参照してください。
/etc/clamav/clamd.conf
# Set the mount point where to recursively perform the scan,
# this could be every path or multiple path (one line for path)
OnAccessMountPath /
OnAccessExcludePath /proc
OnAccessExcludePath /run
OnAccessExcludePath /sys

# Alternatively, add some directories instead of mount points
# OnAccessIncludePath /home

# Prevention doesn't work with OnAccessMountPath.
# It works with OnAccessIncludePath, as long as /usr and /etc are not included.
# Including /var while activating prevention is also not recommended, because
# this would slow down package installation by a factor of 1000.
OnAccessPrevention false

# Perform scans on newly created, moved, or renamed files
OnAccessExtraScanning true

# Exclude the UID of the scanner itself from checking, to prevent loops
OnAccessExcludeUname clamav

# Optionally, also exclude root-owned processes
# OnAccessExcludeRootUID true

# Specify an action to perform when clamav detects a malicious file
# it is possible to specify an inline command too
VirusEvent /etc/clamav/virus-event.bash

# WARNING: for security reasons, clamd should NEVER run as root.
# Previous instructions in this wiki included this line, remove it:
# User root    # REMOVE THIS
# Add this instead:
User clamav

次に、clamav ユーザが sudo を介してカスタム環境変数を持つ任意のユーザとして notify-send を実行することを許可します。

/etc/sudoers.d/clamav
clamav ALL = (ALL) NOPASSWD: SETENV: /usr/bin/notify-send
/etc/clamav/virus-event.bash
#!/bin/bash
PATH=/usr/bin
ALERT="Signature detected by clamav: $CLAM_VIRUSEVENT_VIRUSNAME in $CLAM_VIRUSEVENT_FILENAME"

# Send an alert to all graphical users.
for ADDRESS in /run/user/* ; do
    USERID=${ADDRESS#/run/user/}
    /usr/bin/sudo -u "#$USERID" DBUS_SESSION_BUS_ADDRESS="unix:path=$ADDRESS/bus" PATH=${PATH} \
        /usr/bin/notify-send -i dialog-warning "Virus found!" "$ALERT"
done

clamav-daemon.service再起動 します。

デフォルトでは clamonaccclamav にアクセスしたばかりのファイル名を渡してスキャンします。これは問題で、clamav ユーザがアクセスできないファイルはこの方法ではスキャンできないからです。その代わりに、clamonacc (常に root として実行される) にファイル記述子渡しを使用するように指示することが可能であり。編集 してください。clamav-clamonacc.service に以下のように記述します。

[Service]
ExecStart=
ExecStart=/usr/sbin/clamonacc -F --fdpass --log=/var/log/clamav/clamonacc.log

最後に、clamav-clamonacc.service起動/有効化 する必要があります。

もしclamdに関して AppArmor から拒否された場合は、プロファイルを complain-only モードに設定してください。

# aa-complain clamd

ヒントとテクニック

複数のスレッドで実行

clamscan の使用方法

コマンドラインから clamscan を使ってファイルやディレクトリをスキャンする場合、1つの CPU スレッドのみが使用されます。タイミングが重要でない場合や、コンピュータが重くなることを望まない場合は、これでよいかもしれません。大きなフォルダや USB ドライブを高速にスキャンする必要がある場合は、利用可能なすべての CPU を使用してプロセスを高速化することができます。

clamscan はシングルスレッドで設計されているので、xargs を使って並列にスキャンを実行することができます。

$ find /home/archie -type f -print0 | xargs -0 -P $(nproc) clamscan

この例では、xargs-P パラメータは、({ic|nproc}} によって報告される)と同じだけプロセスで clamscan を実行します。--max-lines--max-args オプションにより、スレッド間のワークロードのバッチ処理をさらに細かく制御することができます。

clamdscan の使用方法

すでに clamd デーモンが動作している場合は、代わりに clamdscan を使うことができます (参照 ClamAV#デーモンの起動)

$ clamdscan --multiscan --fdpass /home/archie

ここでは、--multiscan パラメータによって clamd が利用可能なスレッドを使用してディレクトリの内容を並行してスキャンすることを可能にしています。--fdpass パラメータは、clamav ユーザとグループの下でデーモンが動作しているので、ファイル記述子のパーミッションを clamd に渡すために必要です。

clamdscan で利用可能なスレッド数は /etc/clamav/clamd.confclamd.conf(5) パラメータで決定されます.コマンドラインから MaxThreads を指定してスキャンを開始しても、--multiscan オプションを指定しない場合は、有効な CPU スレッドが 1 つしかスキャンに使用されません(現在のデフォルトは 10 です)

トラブルシューティング

Error: Clamd was NOT notified

freshclam を実行した後に以下のメッセージが表示される場合:

WARNING: Clamd was NOT notified: Cannot connect to clamd through 
/var/lib/clamav/clamd.sock connect(): No such file or directory

ClamAV の sock ファイルを追加してください:

# touch /var/lib/clamav/clamd.sock
# chown clamav:clamav /var/lib/clamav/clamd.sock

それから、/etc/clamav/clamd.conf を編集して次の行をアンコメントしてください:

LocalSocket /var/lib/clamav/clamd.sock

ファイルを保存してデーモンを再起動してください。

Error: No supported database files found

デーモンを起動した時に次のエラーが表示される場合:

LibClamAV Error: cli_loaddb(): No supported database files found
in /var/lib/clamav ERROR: Not supported data format

この問題は /etc/freshclam.confDatabaseDirectory の設定と /etc/clamd.confDatabaseDirectory の設定が一致していないことが原因です。/etc/freshclam.conf/var/lib/clamav を指定しているのに、/etc/clamd.conf (デフォルトディレクトリ) は /usr/share/clamav など別のディレクトリを指定してしまっています。/etc/clamd.conf を編集して DatabaseDirectory が /etc/freshclam.conf と同じになるようにしてください。設定後 clamav は問題なく起動するはずです。

Error: Can't create temporary directory

次のエラーが UID と GID の番号を含む 'HINT' と一緒に表示される場合:

# can't create temporary directory

パーミッションを直して下さい:

# chown UID:GID /var/lib/clamav & chmod 755 /var/lib/clamav

参照