「ClamAV」の版間の差分
(clamd.service の名称変更に追従) |
(→データベースの更新: 更新) |
||
(4人の利用者による、間の15版が非表示) | |||
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}} を [[起動/有効化]] します。 |
== デーモンの起動 == |
== デーモンの起動 == |
||
+ | {{Note| |
||
− | サービスを起動する前にデータベースを更新しないと問題が発生して ClamAV が正しく起動できなくなります。 |
||
+ | * 初めてサービスを開始する前に freshclam を実行する必要があります。そうしないと、ClamAV が正しく起動できなくなるトラブル/エラーが発生します。 |
||
+ | * スタンドアロンスキャンを行うだけであれば、デーモンは必要ありません。以下の [[#ウイルスのスキャン|ウイルスのスキャン]] を参照してください。 |
||
+ | }} |
||
− | サービス |
+ | サービス名は {{ic|clamav-daemon.service}} です。これを [[起動]] し、[[有効化]] します。 |
== ソフトウェアのテスト == |
== ソフトウェアのテスト == |
||
45行目: | 51行目: | ||
以下が出力されれば検出成功です: |
以下が出力されれば検出成功です: |
||
− | stdin: |
+ | stdin: Win.Test.EICAR_HDB-1 FOUND |
上記の表示が出ない場合、トラブルシューティングを読むか、あるいは [https://bbs.archlinux.jp/ Arch フォーラム] に投稿してください。 |
上記の表示が出ない場合、トラブルシューティングを読むか、あるいは [https://bbs.archlinux.jp/ Arch フォーラム] に投稿してください。 |
||
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}} が [[起動]] している必要があります。}} |
||
− | === clamav-unofficial-sigs の設定 === |
||
+ | |||
+ | === オプション1: Fangfrisch の設定 === |
||
+ | |||
+ | [https://rseichter.github.io/fangfrisch/ Fangfrisch] は clamav-unofficial-sigs のより安全で柔軟かつ便利な代替品として設計され、[https://rseichter.github.io/fangfrisch/#_configuration ほとんど設定が必要ありません] |
||
+ | |||
+ | 最も重要なことは、Fangfrisch は clamav-unofficial-sigs とは異なり、ルート権限で実行する必要がないことです。 |
||
+ | |||
+ | 実行することでデータベース構造を作成します。 |
||
+ | |||
+ | # sudo -u clamav /usr/bin/fangfrisch --conf /etc/fangfrisch/fangfrisch.conf initdb |
||
+ | |||
+ | {{ic|fangfrisch.timer}} を [[有効化]] してください。 |
||
+ | |||
+ | === オプション2:clamav-unofficial-sigs の設定 === |
||
まず {{ic|/etc/clamav-unofficial-sigs/user.conf}} を編集して以下の行を変えてください: |
まず {{ic|/etc/clamav-unofficial-sigs/user.conf}} を編集して以下の行を変えてください: |
||
88行目: | 108行目: | ||
== ウイルスのスキャン == |
== ウイルスのスキャン == |
||
+ | |||
+ | オンデマンドスキャンには2つのオプションがあります。 |
||
+ | |||
+ | === スタンドアロンスキャナーを使用する === |
||
{{ic|clamscan}} を使って特定のファイルやホームディレクトリ、もしくはシステム全体をスキャンすることができます: |
{{ic|clamscan}} を使って特定のファイルやホームディレクトリ、もしくはシステム全体をスキャンすることができます: |
||
100行目: | 124行目: | ||
{{ic|-l ''path/to/file''}} オプションを使うと {{ic|clamscan}} のログがテキストファイルに出力されます。 |
{{ic|-l ''path/to/file''}} オプションを使うと {{ic|clamscan}} のログがテキストファイルに出力されます。 |
||
+ | |||
+ | === デーモンの使用 === |
||
+ | |||
+ | {{ic|clamdscan}} は上記と似ていますが、コマンドが動作するためにはデーモンが起動している必要があります。デーモンは {{ic|/etc/clamav/clamd.conf}} で指定された設定を読み込むので、ほとんどのオプションは無視されます。 |
||
== milter を使う == |
== milter を使う == |
||
137行目: | 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 / |
+ | OnAccessMountPath / |
+ | OnAccessExcludePath /proc |
||
− | OnAccessMountPath /home/ |
||
− | OnAccessExcludePath / |
+ | 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 |
OnAccessExtraScanning true |
OnAccessExtraScanning true |
||
− | # |
+ | # 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/ |
+ | {{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|clamd-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 を参照。 |
||
== トラブルシューティング == |
== トラブルシューティング == |
||
250行目: | 312行目: | ||
* [[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
を 起動/有効化 します。
デーモンの起動
サービス名は 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 リポジトリの説明 を読んでください。
オプション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
を有効化して起動してください。
オンアクセススキャン
オンアクセススキャンはファイルを読み書き実行した際にスキャンを実行する機能です。
オンアクセススキャンを使うには fanotify を有効にしてコンパイルしたカーネルが必要です (カーネル 3.8 以上)。オンアクセススキャンを有効にする前に fanotify が有効になっているか確認してください:
$ zgrep FANOTIFY /proc/config.gz
/etc/clamav/clamd.conf
ファイルの最後に以下を追加して、編集します。(個々のオプションを変更することもできます)
/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
を 再起動 します。
デフォルトでは clamonacc は clamav にアクセスしたばかりのファイル名を渡してスキャンします。これは問題で、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.conf
の clamd.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.conf
の DatabaseDirectory
の設定と /etc/clamd.conf
の DatabaseDirectory
の設定が一致していないことが原因です。/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