Linux管理・運用の基本
システム管理者のための実践ガイド
システム管理者のための実践ガイド
前回はLinuxにおけるアンチウイルスの思想とインストールまでを解説しました。
※事前に第1回で紹介した freshclam による定義更新が完了している前提で進めます。
準備が整ったら、次はいよいよ実際のファイルスキャンです。
「とりあえずコマンドを打ってみたけれど、終わらない……」
「検知されたファイルはどうすればいいの?」
今回は、そんな現場の疑問を解消するために、基本コマンド clamscan の使い方と、事故を防ぐための実践的なオプションを整理します。
clamscan コマンドの基本的な使い方全ディレクトリ(/)を対象にすると、ネットワークドライブや仮想ファイルシステムまで読み込んでしまい、膨大な時間がかかります。
解決:対象ディレクトリを直接指定し、不要なパスを除外する
# /home 以下を再帰的にスキャン(仮想システムなどは除外を推奨)
sudo clamscan -r /home --exclude-dir="^/sys" --exclude-dir="^/dev" --exclude-dir="^/proc"
コマンドの意味:
-r (recursive): 指定したディレクトリ内を再帰的にスキャンします。--exclude-dir: スキャン対象外とするディレクトリを指定します。/proc や /sys などの仮想ファイルシステムは、スキャンしても意味がなくエラーの原因になるため除外するのが一般的です。通常、スキャンを実行すると正常なファイルもすべて表示され、ログが埋まってしまいます。
解決:-i オプションで「感染ファイルのみ」を表示
clamscan -r -i /var/www/html
コマンドの意味:
-i (infected): 感染が疑われるファイルのみを出力します。異常があった時だけ一目でわかります。| オプション | 短縮形 | 内容 |
|---|---|---|
--recursive |
-r |
指定したディレクトリ下を再帰的にスキャンする。 |
--infected |
-i |
ウイルス検知したファイルのみ表示する。 |
--move=[DIR] |
(なし) | 検知したファイルを指定ディレクトリへ隔離する。 |
--remove |
(なし) | 【注意】 検知したファイルを即座に削除する。 |
--log=[FILE] |
-l |
スキャン結果をファイルに保存する。 |
注意:スキャン中の負荷について
clamscanは実行時にCPUとI/Oを大きく消費します。サービス稼働中の本番環境では、負荷を考慮して業務時間外に実行するなどの工夫が必要です。
いきなり --remove(削除)を使うのは危険です。誤検知(正常なファイルをウイルスと判定すること)があった場合にシステムを壊す恐れがあるため、まずは「隔離」から始めるのが鉄則です。
Linuxの作法に従い、アプリケーションデータとして /var/lib/ 配下に作成します。
sudo mkdir -p /var/lib/clamav/quarantine
sudo chmod 700 /var/lib/clamav/quarantine
Web公開ディレクトリをスキャンし、問題があれば隔離・ログ記録する例です。
sudo clamscan -r -i /var/www/html \
--move=/var/lib/clamav/quarantine \
-l /var/log/clamav/scan.log
clamscan は実行結果を数値(終了コード)で返します。シェルスクリプトや監視ツールと連携する際に非常に役立ちます。
例えば、echo $? コマンドで直前のスキャン結果が成功だったか(0だったか)を確認できます。
第2回では、ClamAVの基本となる手動スキャンの実践方法を学びました。
-r(再帰)と -i(検知のみ)を組み合わせ、対象を絞って実行する。/proc などの仮想ディレクトリは除外して効率化する。/var/lib/clamav/quarantine への隔離を優先する。この記事で clamscan を安全に使いこなす第一歩が踏み出せましたでしょうか。
実は、この clamscan には「起動のたびに巨大な定義ファイルをメモリに読み込むため動作が重い」という弱点があります。これを劇的に解消するのが「デーモン化」です。
次回は「導入編・設定」として、スキャンを劇的に高速化させる clamd(デーモン) の仕組みと設定方法について解説します。
ご覧いただきありがとうございました。