Clam AntiVirus(ClamAV)でclamdscanを別アカウントで使用する方法

Clam AntiVirus(ClamAV)とは オープンソース (GPL) で提供されているクロスプラットフォームのアンチウイルスソフトウェアです。

Linux環境では多くのディストリビューションで提供されています。

Clam AntiVirus(ClamAV)には、ウィルススキャン用のコマンドとしてclamscanとclamdscanがあります。
clamscanは実行の度に起動する単独のウィルススキャンプロセスとなっています。 一方、clamdscanは常駐しているclamdにウィルススキャンを要求する形となっています。

clamscanのメリットは

  • clamd等常駐させる必要がなく構成がシンプルになることです。
  • 常駐させない為、資源を節約できる。
clamdscanのデメリット
  • 実行の度にウィルス定義ファイルを読み込む必要があり初期ロードに時間がかかってしまいます。
clamdscanのメリットは
  • clamdを常駐させている為、初期ロードが不要で処理が速い
clamdscanのデメリットは
  • clamdが常駐する為、常時メモリー等の資源を必要とする。
となります。

なので、clamscanも初期ロードが遅いだけでその後はそこまで違わないと思いますので、cron等で1日数回ウィルススキャンを実行するレベルであればclamscanで、頻繁にウィルススキャンをする場合はclamdscanを使用する形になるかと思います。(正確に計測した訳ではありません)

プログラムでclamdscanを使用し表記のclamdscanを別アカウントで使用する必要がでてきたので調べました。
clamdscanを使用する場合、多少のパラメータを付加する事はできますが、 実際にはclamdへ要求するだけの為、clamd.confに設定に依存します。

clamdの実行ユーザーはclamd.confのUserで設定されており、clamdscanを実行する場合通常は同じアカウントでする必要があるようです。

異なるユーザーで実行する場合は、clamdscan実行時に–fdpassを付加する必要があります。

また、
–fdpassを付加する場合

Pass the file descriptor permissions to clamd. This is useful if clamd is running as a different user as it is faster than streaming the file to clamd. Only available if connected to clamd via local(unix) socket.

引用: clamdscan(1) – Linux man page

とありますように、ローカル(UNIX)ソケットを介してclamdに接続されている場合にのみ使用可能との事なので

clamd.confの設定

LocalSocket /run/clamd.scan/clamd.sock
LocalSocketGroup virusgroup
LocalSocketMode 660

でLocalSocketを使用するよう修正し、必要に応じLocalSocketGroupのグループやパーミッションを設定します。
また、必要に応じてclamdscanを実行するユーザーアカウントをLocalSocketGroupに設定したグループに追加すれば


clamdscan --fdpass
/var/: OK

----------- SCAN SUMMARY -----------
Infected files: 0

のようにclamdscan –fdpassで使用可能となります。
またClam AntiVirus(ClamAV)に関する詳細な説明は Clam Antivirusに関するメモ 参考ください。