« まぜまぜご飯にまぜるもの | Main | OKAMURA シティが手に負えない件 »

2008年04月20日

Mac OS X 10.5 (Intel Mac)ユーザのための ClamAV インストール解説

Intel Mac 版の Mac OS X 10.5 Leopard ユーザが Clam AntiVirus(以後「ClamAV」)を新規インストールするための手順をまとめておく。単純に ClamAV をインストールするのではなく clamav-update プロジェクトのソフトウェアなどを投入して、私が考える ClamAV を最大限に活用する方針でインストールする。


目標と前提

この記事では次のことを目標とする。

  • ClamXavSentry を用いた疑似リアルタイムスキャン。
  • ClamXavSentryKeeper を活用した疑似リアルタイムスキャンの維持。
  • ClamdOmitScan を用いた定期スキャン。
  • clamav-update を用いた各種ソフトウェアの自動アップデート。
  • GMP をインストールしてウィルスデータベースアプデート時の警告をなくす。
  • GnuPG を用いた電子署名の確認。
  • ClamAV のログに syslog を用いる。

この記事で扱うのは次の環境である。

OS
Mac OS X 10.5.2 (Leopard)
プロセッサ
2.16 GHz Intel Core Duo (Intel Mac)
インストール対象
  • ClamXav 1.1.0
  • clamav-update 2.2.4
  • GnuPG 1.4.9
  • gmp 4.2.2
  • ClamAntiVirusDaemon 1.1.2
  • FreshClamDaemon 1.2
  • ClamdOmitScan 1.2
  • ClamXavSentryKeeper

また、この記事の読者には次を想定する。

  • Mac OS X の GUI による通常の操作は問題なく行える。
  • ターミナルを用いた操作は多少の省略があっても指示があれば行える。

    多少の省略とは例えば、コマンドラインの最後で改行するとターミナル(というかシェル)への指示が確定するのだが、その改行をいちいち指示しないなどを意味する。つまりターミナルでの基本的な操作方法を理解していればわかることを指す。

  • ClamAV を徹底して利用したい人。

    もし ClamXav を通して ClamAV をそこそこ使えればそれでいいと考えているのならばこの記事は参考にしない方がよい。

  • この記事に間違いがあっても怒らないで親切に教えてくれる。

目標詳細

上に掲げた目標の詳細について説明する。

ClamXavSentry を用いた疑似リアルタイムスキャン

Mac OS X ユーザのための ClamAV の GUI フロントエンドアプリ ClamXav に内包されているヘルパーアプリ ClamXavSentry というのがある。これが担うフォルダ監視機能を利用して擬似的なリアルタイムスキャンを ClamAV にさせる。

ClamXavSentryKeeper を活用した疑似リアルタイムスキャンの維持

ClamXavSentry が落ちても短時間で ClamXavSentry を起動し直してくれるアプリ ClamXavSentryKeeper を用いて疑似リアルタイムスキャンがされない空白期間を極力抑える。

ClamdOmitScan を用いた定期スキャン

過去に十分スキャンされて、新たなスキャンの必要が(経験的に)ないファイルのスキャンを省略することによってスキャン時間を節約する ClamdOmitScan を定期スキャン用に使用する。このソフトは他ではできないリソースフォークのスキャンやディスクイメージファイル内のスキャンもできる。私が知る限り ClamAV を用いたスキャナーでは最強。

clamav-update を用いた各種ソフトウェアの自動アップデート

ClamAV 本体の自動アップデート用に開発された clamav-update を用いて、ClamAV のバージョンアップにいつでも追随させる。それだけでなくここで用いるソフトウェアを自動でアップデートさせる。

GnuPG を用いた電子署名の確認

ClamAV のウィルスデータベースや ClamAV 本体が真正なものであることを(自動的に)確認するようにする。たとえ偽の DNS 情報が掴まされても偽物のソフトウェアを clamav-update がインストールしないようにできる。

ClamAV のログに syslog を用いる

ClamAV のログはシステムに危険なものがあったかどうかを確認するために重要である。ユーザ領域などに保存せず syslog を用いてコンソールアプリで参照するようにする。ClamXav との互換性も考慮する。

ClamXav のインストール

この作業は Mac OS X 用に clamav-update をインストールするため準備作業でもある。これを省略すると clamav-update のインストールスクリプトは一般の OS 用のものを用いなければならなくなる。

ここでは ClamXav アプリだけをインストールする。ClamXav を使用するには ClamAV もインストールする必要があり、ClamXav 起動時にそれが促されるようになっている。しかし、ClamXav の ClamAV のインストールの仕方とは若干異なるインストールの仕方をするので、アプリだけをインストールする。手順は以下の通り。

  1. ClamXav のダウンロードページから「for 10.4 Tiger and 10.5 Leopard」と書いてあるリンクの dmg ファイルをダウンロードする。
  2. ダウンロードした dmg ファイルをオープンしてマウントさせる。
  3. マウントしたボリュームの中にある ClamXav.app を /Applications (システムのアプリケーションフォルダ)にコピーする。

好みで ScanWithClamXav.plugin をインストールしてもよい。ただし私はインストールしないのでそれに関する情報は提供できない。

clamav-update のインストール

手順は以下の通り。

  1. 前提とされているディレクトリを作成する。
    sudo mkdir -p /usr/local/clamXav/bin /usr/local/clamXav/etc

    パスワードが訪ねられたら Mac OS X にログインしたときのパスワードをタイプして改行する。管理者権限があるユーザで行うことが前提。以下、sudo で始まるコマンドラインがある操作は同様。

    Leopard のデフォルトではパスワードの入力なしに自動的にログインするが、それは危険なのでその設定は必ず外すこと。あなたの Mac が盗まれたらどんな目に遭うか考えてみるとよいだろう。

  2. clamav-update のドキュメント「clamav-update :: ドキュメント :: clamav-update :: インストール」の「ダウンロード」セクションの内容を実施する。
  3. clamav-update のドキュメント「clamav-update :: ドキュメント :: clamav-update :: インストール」の「インストール手順」セクションの「ClamXav ユーザの場合」サブセクションの内容を実施する。
  4. clamav-update 設定ファイル群置き場を作成する。
    sudo mkdir /etc/clamav-update.d

GnuPG のインストール

先にインストールした clamav-update をインストーラとして使用する。手順は以下の通り。

  1. clamav-update :: トピックを表示 - conf ファイルサンプルギャラリー」から「一般」の GnuPG 用 clamav-update 設定ファイルをダウンロードして解凍する。
  2. 解凍してできた GnuPG-update.conf を /etc/clamav-update.d フォルダにコピーする。
  3. GnuPG を自動でダウンロード&ビルド&インストールする。
    sudo -H /usr/local/clamXav/bin/clamav-update.pl --force --config=/etc/clamav-update.d/GnuPG-update.conf

gmp のインストール

まず gmp のソースアーカイブの署名ファイルの公開鍵ファイルを入手してインポートし、次いで clamav-update を用いて自動でインストールする。手順は以下の通り。

  1. Public Key Server -- Get ``0x5d6d47dfdb899f46 ''」の内容を Swox_AB.gpg として保存する。

    保存するのは -----BEGIN PGP PUBLIC KEY BLOCK----- から -----END PGP PUBLIC KEY BLOCK----- まで。

  2. Swox_AB.gpg をインポートする。
    sudo -H gpg --import Swox_AB.gpg
  3. clamav-update :: トピックを表示 - conf ファイルサンプルギャラリー」から「Mac OS X」の gmp 用 clamav-update 設定ファイルをダウンロードして解凍する。
  4. 解凍してできた gmp-update.conf を /etc/clamav-update.d フォルダにコピーする。
  5. コピーした gmp-update.conf を編集する。

    # Verify downloaded archive file」と書いてある行に続く一連のコメントを解除する。2008 年 4 月 20 日時点でのファイルでは 118 行目から 196 行目の push で始まるブロックを活かすことになる。

  6. gmp を自動でダウンロード&ビルド&インストールする。
    sudo -H /usr/local/clamXav/bin/clamav-update.pl --force --config=/etc/clamav-update.d/gmp-update.conf

    最後に「CAUTION」と表示されるが無視してよい。なぜならそこに記載されている make check は既に行われるようになっているからである。

ClamAV のインストール

まず、clamav-update が ClamAV のソースアーカイブを検証できるようにしてから、Leopard のコンパイラのバグを回避する変更を行い、そして clamav-update を使ってインストールする。手順は次の通り。

  1. clamav-update :: ドキュメント :: clamav-update :: GnuPG による ClamAV の検証」に記載されていることを実施する。
  2. /usr/local/clamXav/etc/clamaav-update.conf を編集する。

    「#### Environment Variables ####」と書いてあるセクション(65行目あたり)に次の行を追加する。

    $Setting{environment}->{CFLAGS} = '-arch i686';

    そして、freshclam コマンドのオーナーとパーミッションが ClamXav 用にならないようする。それには /usr/local/clamXav/etc/clamaav-update.conf の 1 で編集した部分を更に次のように編集する。

    編集前
        # use build-in specifier
        PhaseSpecifier4ClamAV4ClamXav();
    編集後
        # use build-in specifier
        PhaseSpecifier4ClamAV4ClamXav();
    
        # modify owner and permition of freshclam
        push @{$Phase{install}->{method}}, (
            [qw(chown root /usr/local/clamXav/bin/freshclam)],
            [qw(chmod u-s /usr/local/clamXav/bin/freshclam)],
        );
  3. ClamAV を自動でダウンロード&ビルド&インストールする。
    sudo -H /usr/local/clamXav/bin/clamav-update.pl --force

ClamAV の設定

ClamAV の freshclam および clamd はそのままでは使用できない。なぜならそれらの設定ファイルが例のままになっているからである。これを解除するとともに Mac OS X で使用するのに適切な変更を行う。

freshclam の設定

以下の設定の特徴は freshclam が ClamAV 自体の更新版があることを検知したときに clamav-update と連携して ClamAV 自体を自動でアップデートすることと、syslog を用いてログを出力することである。

  1. freshclam.conf のオリジナルを退避しておく。
    sudo mv /usr/local/clamXav/etc/freshclam.conf /usr/local/clamXav/etc/freshclam.conf.org
    sudo cp /usr/local/clamXav/etc/freshclam.conf.org /usr/local/clamXav/etc/freshclam.conf
  2. 以下の要領で /usr/local/clamXav/etc/freshclam.conf を編集する。
    • Example 設定を解除する。
      編集前
      Example
      編集後
      #Example
    • ClamXav 互換性のためのログファイルを指定する。
      編集前
      #UpdateLogFile /var/log/freshclam.log
      編集後
      UpdateLogFile /usr/local/clamXav/share/clamav/freshclam.log
    • syslog をログ出力に用いる。
      編集前
      #LogSyslog yes
      編集後
      LogSyslog yes
    • root をウィルスデータベースのオーナーにする。
      編集前
      #DatabaseOwner clamav
      編集後
      DatabaseOwner root
    • ウィルスデータベースのミラーサーバを指定する。
      編集前
      #DatabaseMirror db.XY.clamav.net
      編集後
      DatabaseMirror db.jp.clamav.net
    • ウィルスデータベースが更新されたら clamd に通知する。
      編集前
      #NotifyClamd /path/to/clamd.conf
      編集後
      NotifyClamd /usr/local/clamXav/etc/clamd.conf
    • ClamAV 自体が更新されたら自動でアップデートさせる。
      編集前
      #OnOutdatedExecute command
      編集後
      OnOutdatedExecute /usr/local/clamXav/bin/clamav-update.pl
  3. freshclam.conf を ClamXav が勝手に書き換えられないようにしておく。
    sudo chown root /usr/local/clamXav/etc/freshclam.conf
    sudo chmod 0644 /usr/local/clamXav/etc/freshclam.conf
  4. ウィルスデータベースのオーナーを変更する。
    sudo chown -R root:admin /usr/local/clamXav/share/clamav
clamd の設定

以下の設定の特徴は、ClamdOmitScan の使用を意識していることと、syslog を用いてログを出力すること、そして freshclam による通知に任せて clamd 自身がローカルのウィルスデータベースが更新されたことを検知しないようにすること。

  1. clamd.conf のオリジナルを退避しておく。
    sudo mv /usr/local/clamXav/etc/clamd.conf /usr/local/clamXav/etc/clamd.conf.org
    sudo cp /usr/local/clamXav/etc/clamd.conf.org /usr/local/clamXav/etc/clamd.conf
  2. 以下の要領で /usr/local/clamXav/etc/clamd.conf を編集する。
    • Example 設定を解除する。
      編集前
      Example
      編集後
      #Example
    • syslog をログ出力に用いる。
      編集前
      #LogSyslog yes
      編集後
      LogSyslog yes
    • pid ファイルを指定する。
      編集前
      #PidFile /var/run/clamd.pid
      編集後
      PidFile /var/run/clamd.pid
    • 作業ディレクトリを指定する。
      編集前
      #TemporaryDirectory /var/tmp
      編集後
      TemporaryDirectory /var/ClamdOmitScan/tmp
    • ソケットファイルを指定する。
      編集前
      LocalSocket /tmp/clamd.socket
      編集後
      LocalSocket /var/ClamdOmitScan/clamd.socket
    • ウィルスデータベースの自動チェックを外す。
      編集前
      #SelfCheck 600
      編集後
      SelfCheck 0
    • PDF の解析を有効にする。
      編集前
      #ScanPDF yes
      編集後
      ScanPDF yes
  3. 作業ディレクトリを作成しておく。
    sudo mkdir -p /var/ClamdOmitScan/tmp
syslog の設定

以上の設定をすると freshclam および clamd が syslog を用いてログを出力するようになる。syslog 側にこれを受け取るための設定をしておく必要がある。また、ログが溜まる一方にならないようにもしておく。手順は以下の通り。

  1. /etc/syslog.conf に以下の一行を追加する。
    local6.* /var/log/clamav.log
  2. clamav のログがローテーションされるようにする。

    /etc/newsyslog.conf の以下の行を加える。このファイルはオーナーの root でさえ書き込み禁止に設定されているので GUI エディタを利用して書き換えるのに苦労するかもしれない。

    /var/log/clamav.log			640  5	   100	*     J
  3. ログファイルを作成する。
    sudo touch /var/log/clamav.log

ここでいったんシステムを再起動しておくとこの変更が有効になる。

システム起動項目のインストール

freshclam をシステム起動項目にしたパッケージ FreshClamDaemon と clamd をシステム起動項目にしたパッケージ ClamAntiVirusDaemon をインストールする。そして、clamav-update による ClamAV 自体のアップデートがあったときに freshclam と clamd が再起動されるようにする。

  1. clamav-update :: ドキュメント :: FreshClamDaemon :: ダウンロード」に従って FreshClamDaemon の dmg ファイルをダウンロードする。
  2. ダウンロードした dmg ファイルをオープンしてマウントする。
  3. マウントしたボリュームの FreshClamDaemon-{バージョン番号}.pkg をオープンして、以下その指示に従う。
  4. FreshClamDaemon 更新用の clamav-update 設定ファイルを /etc/clamav-update.d にコピーする。
    sudo cp /Volumes/FreshClamDaemon-1.2/FreshClamDaemon-update.conf /etc/clamav-update.d/
  5. clamav-update :: ドキュメント :: ClamAntiVirusDaemon :: ダウンロード」に従って ClamAntiVirusDaemon の dmg ファイルをダウンロードする。
  6. ダウンロードした dmg ファイルをオープンしてマウントする。
  7. マウントしたボリュームの ClamAntiVirusDaemon-{バージョン番号}.pkg をオープンして、以下その指示に従う。
  8. ClamAntiVirusDaemon 更新用の clamav-update 設定ファイルを /etc/clamav-update.d にコピーする。
    sudo cp /Volumes/ClamAntiVirusDaemon-1.1.2/ClamAntiVirusDaemon-update.conf /etc/clamav-update.d/
  9. /usr/local/clamXav/etc/clamav-update.conf を次の要領で編集する。
    • ClamAV アップデート後 clamd が再起動されるようにする。
      編集前
          # If you use ClamAntiVirusDaemon, uncomment following lines.
          #push @{$Phase{install}->{method}}, (
          #   [qw(/Library/StartupItems/ClamAntiVirusDaemon/ClamAntiVirusDaemon restart)],
          #);
      編集後
          # If you use ClamAntiVirusDaemon, uncomment following lines.
          push @{$Phase{install}->{method}}, (
             [qw(/Library/StartupItems/ClamAntiVirusDaemon/ClamAntiVirusDaemon restart)],
          );
    • ClamAV アップデート後 freshclam が再起動されるようにする。
      編集前
          # If you use FreshClamDaemon, uncomment following lines.
          #push @{$Phase{install}->{method}}, (
          #   [qw(/Library/StartupItems/FreshclamDaemon/FreshclamDaemon restart)]
          #);
      編集後
          # If you use FreshClamDaemon, uncomment following lines.
          push @{$Phase{install}->{method}}, (
             [qw(/Library/StartupItems/FreshClamDaemon/FreshClamDaemon restart)]
          );

定期スキャンの設定

ClamAV の clamd を利用して能率的な定期スキャン用のスキャンを行う ClamdOmitScan をインストールして、定期スキャンが行われるようにする。

  1. clamav-update :: ドキュメント :: ClamdOmitScan :: インストール」に従って ClamdOmitScan をインストールする。

    このページの「インストール手順」セクションは UNIX 系 OS 一般向けに書かれていて Mac OS X ユーザは少し問う惑うかもしれない。具体的には以下をすればよい。

    cd ここに ClamdOmitScan を解凍してできたフォルダをドラッグ&ドロップ
    sudo make install
  2. ClamdOmitScan 用の clamav-update 設定ファイルを保存する。
    sudo cp ClamdOmitScan-update.conf /etc/clamav-update.d/
  3. ClamdOmitScan 用フォルダを整備する。
    sudo mkdir /var/ClamdOmitScan/isolated
    sudo mkdir /var/ClamdOmitScan/scanData
    sudo chown root:admin /var/ClamdOmitScan
    sudo chown root:admin /var/ClamdOmitScan/tmp
    sudo chown root:admin /var/ClamdOmitScan/isolated
    sudo chown root:admin /var/ClamdOmitScan/scanData
    sudo chmod 2770 /var/ClamdOmitScan
    sudo chmod 2770 /var/ClamdOmitScan/tmp
    sudo chmod 0770 /var/ClamdOmitScan/isolated
    sudo chmod 2770 /var/ClamdOmitScan/scanData
  4. 定期スキャンコマンドを作成する。

    以下の内容でファイル /usr/local/bin/periodicscan を作成する。

    この内容をデスクトップの periodicscan.txt として保存したのなら以下のようにする。

    sudo mv $HOME/Desktop/periodicscan.txt /usr/local/bin/periodicscan
    sudo chown root:admin /usr/local/bin/periodicscan
    sudo chmod 0775 /usr/local/bin/periodicscan

    もしあなたの Mac が大文字小文字を区別する HFS+ のファイルシステムを使用しているのなら ClamdOmitScan の --scan-rsrc オプションは使用できない。periodicscan コマンドの '--scan-rsrc', の先頭に # を付けてコメントにしておくこと。

  5. 日次スキャンを設定する。

    以下の内容で /etc/daily.local を作成する。

    これは週次または月次スキャンが行われない日にユーザ領域全体をスキャンする内容になっている。感染ファイルは /var/ClamdOmitScan/isolated フォルダに隔離される。

  6. 週次スキャンを設定する。

    以下の内容で /etc/weekly.local を作成する。

    これは月次スキャンが行われない日に日次スキャンの対象に加えて通常利用で書き換えられることが多い領域をスキャンする内容になっている。ユーザ領域の感染ファイルは /var/ClamdOmitScan/isolated フォルダに隔離される。

  7. 月次スキャンを設定する。

    以下の内容で /etc/monthly.local を作成する。

    これは週次スキャンの対象に加えて、それ以外のローカルディスク全体をスキャンする内容になっている。ユーザ領域の感染ファイルは /var/ClamdOmitScan/isolated フォルダに隔離される。

ClamXavSentry の設定

これは通常の ClamXav の設定の一部である。手順は以下の通り。

  1. ClamXav を起動する。
  2. [一般] タブの [感染ファイルの隔離先] にチェックを入れ /var/ClamdOmitScan/isolated フォルダを選択する。
  3. [環境設定] ボタンを押して環境設定パネルを表示させる。
  4. [フォルダ監視] タブを開く。
  5. [ログイン時に ClamXav Sentry を起動] にチェックを入れる。
  6. ホーム直下のダウンロードフォルダなどを [監視するフォルダ] にドラッグ&ドロップする。
  7. [感染ファイルを隔離] にチェックを入れる。
  8. [設定を保存し ClamXav Sentry を起動] ボタンを押す。
  9. ClamXav を終了させる。

更に、ClamXavSentry が落ちたときのために ClamXavSentryKeeper をダウンロードしてインストールする。ダウンロードした dmg ファイルをマウントすると README.html があるのでそれを開いてそこに記載されている指示に従ってインストールする。

一部、ClamXavSentryKeeper が Leopard では動作しないという情報があるが問題なく動作するので安心を。そう勘違いした人は次をチェックしてみるとよいだろう。

  • ClamXav を /Applications にインストールしたか?
  • ClamXavSentryKeeper を /Applications にインストールしたか?
  • アクティビティモニタで ClamXavSentryKeeper というプロセスがないから ClamXavSentryKeeper が動作していないと判断していないか?

    ClamXavSentryKeeper というアプリは内蔵されている Perl スクリプトを起動するためだけのアプリなので、それが起動されるとアクティビティモニタでは ClamXavSentryKeeper ではなく perl というプロセスになる。

  • ClamXavSentry を故意に終了させて 10 秒待ったか?

    README.html には 5 秒以内と書いてあるが、実際には 10 秒以内。訂正が面倒なので訂正していないだけ。平均 5 秒と書くつもりだった。

上のチェックリストの最後の項目を除いて README.html に書いてあるので事前によく読んでほしい。それでもやはり動作していないのなら、実行環境に何らかの問題がある。筆者は ClamXavSentryKeeper の作者でもあるから相談に乗るので連絡を。

clamav-update の設定

もう既に freshclam と連携して ClamAV 自体を自動でアップデートしたり、ダウンロードしたアーカイブファイルの電子署名を確認したりするようになっている。しかし、ClamAV 以外のソフトウェアの自動アップデートはまだするようになっていない。これが行われるようにする。また、clamav-update のログは ClamAV 用のログに書き込まれるようにする。手順は以下の通り。

  1. 共通の clamav-update 設定ファイルを作成する。

    以下の内容で /etc/clamav-update.d/common.conf を作成する。

    これはログ出力先に syslog を指定する設定。

  2. 共通の clamav-update 設定ファイルが使用されるようにする。

    /etc/clamav-update.d/ の下にある -update.conf でファイル名が終わるファイル全てについて、先頭の方に次の一行を加える。ファイルの先頭に連続する # で始まるコメント行が終わったところがよいだろう。

    require '/etc/clamav-update.d/common.conf';

    clamav-update 更新用の clamav-update 設定ファイルについては別途行う。

  3. 上のファイル用のカスタマイズ設定を作成する。

    /usr/local/clamXav/etc/clamav-update-update.conf は clamav-update が自分で自分をアップデートするときに上書きされる。したがって共通の clamav-update 設定ファイル /etc/clamav-update.d/common.conf を使用するように直接設定しても、アップデート時に消されてしまう。これの対応として /usr/local/clamXav/etc/clamav-update-update.conf にはユーザ独自のカスタマイズ設定のファイルがあったらそれをロードするようになっている。そのファイルは /etc/clamav-update-update.conf である。このファイルを次の内容で作成する。

  4. clamav-update 更新用の clamav-update のシンボリックリンクを /etc/clamav-update.d に張る。
    sudo ln -s /usr/local/clamXav/etc/clamav-update-update.conf /etc/clamav-update.d/
  5. 定期的にソフトウェアの更新チェックを行うようにする。

    /etc/daily.local に以下の内容を加える。

    筆者は /etc/daily.local の先頭に挿入した。

last generated
2008-07-03
page view