« まぜまぜご飯にまぜるもの | Main | OKAMURA シティが手に負えない件 »
Intel Mac 版の Mac OS X 10.5 Leopard ユーザが Clam AntiVirus(以後「ClamAV」)を新規インストールするための手順をまとめておく。単純に ClamAV をインストールするのではなく clamav-update プロジェクトのソフトウェアなどを投入して、私が考える ClamAV を最大限に活用する方針でインストールする。
この記事では次のことを目標とする。
この記事で扱うのは次の環境である。
また、この記事の読者には次を想定する。
多少の省略とは例えば、コマンドラインの最後で改行するとターミナル(というかシェル)への指示が確定するのだが、その改行をいちいち指示しないなどを意味する。つまりターミナルでの基本的な操作方法を理解していればわかることを指す。
もし ClamXav を通して ClamAV をそこそこ使えればそれでいいと考えているのならばこの記事は参考にしない方がよい。
上に掲げた目標の詳細について説明する。
Mac OS X ユーザのための ClamAV の GUI フロントエンドアプリ ClamXav に内包されているヘルパーアプリ ClamXavSentry というのがある。これが担うフォルダ監視機能を利用して擬似的なリアルタイムスキャンを ClamAV にさせる。
ClamXavSentry が落ちても短時間で ClamXavSentry を起動し直してくれるアプリ ClamXavSentryKeeper を用いて疑似リアルタイムスキャンがされない空白期間を極力抑える。
過去に十分スキャンされて、新たなスキャンの必要が(経験的に)ないファイルのスキャンを省略することによってスキャン時間を節約する ClamdOmitScan を定期スキャン用に使用する。このソフトは他ではできないリソースフォークのスキャンやディスクイメージファイル内のスキャンもできる。私が知る限り ClamAV を用いたスキャナーでは最強。
ClamAV 本体の自動アップデート用に開発された clamav-update を用いて、ClamAV のバージョンアップにいつでも追随させる。それだけでなくここで用いるソフトウェアを自動でアップデートさせる。
ClamAV のウィルスデータベースや ClamAV 本体が真正なものであることを(自動的に)確認するようにする。たとえ偽の DNS 情報が掴まされても偽物のソフトウェアを clamav-update がインストールしないようにできる。
ClamAV のログはシステムに危険なものがあったかどうかを確認するために重要である。ユーザ領域などに保存せず syslog を用いてコンソールアプリで参照するようにする。ClamXav との互換性も考慮する。
全体の流れは以下の通り。
この作業は Mac OS X 用に clamav-update をインストールするため準備作業でもある。これを省略すると clamav-update のインストールスクリプトは一般の OS 用のものを用いなければならなくなる。
ここでは ClamXav アプリだけをインストールする。ClamXav を使用するには ClamAV もインストールする必要があり、ClamXav 起動時にそれが促されるようになっている。しかし、ClamXav の ClamAV のインストールの仕方とは若干異なるインストールの仕方をするので、アプリだけをインストールする。手順は以下の通り。
好みで ScanWithClamXav.plugin をインストールしてもよい。ただし私はインストールしないのでそれに関する情報は提供できない。
手順は以下の通り。
sudo mkdir -p /usr/local/clamXav/bin /usr/local/clamXav/etc
パスワードが訪ねられたら Mac OS X にログインしたときのパスワードをタイプして改行する。管理者権限があるユーザで行うことが前提。以下、sudo で始まるコマンドラインがある操作は同様。
Leopard のデフォルトではパスワードの入力なしに自動的にログインするが、それは危険なのでその設定は必ず外すこと。あなたの Mac が盗まれたらどんな目に遭うか考えてみるとよいだろう。
sudo mkdir /etc/clamav-update.d
先にインストールした clamav-update をインストーラとして使用する。手順は以下の通り。
sudo -H /usr/local/clamXav/bin/clamav-update.pl --force --config=/etc/clamav-update.d/GnuPG-update.conf
まず gmp のソースアーカイブの署名ファイルの公開鍵ファイルを入手してインポートし、次いで clamav-update を用いて自動でインストールする。手順は以下の通り。
保存するのは -----BEGIN PGP PUBLIC KEY BLOCK----- から -----END PGP PUBLIC KEY BLOCK----- まで。
sudo -H gpg --import Swox_AB.gpg
「# Verify downloaded archive file」と書いてある行に続く一連のコメントを解除する。2008 年 4 月 20 日時点でのファイルでは 118 行目から 196 行目の push で始まるブロックを活かすことになる。
sudo -H /usr/local/clamXav/bin/clamav-update.pl --force --config=/etc/clamav-update.d/gmp-update.conf
最後に「CAUTION」と表示されるが無視してよい。なぜならそこに記載されている make check は既に行われるようになっているからである。
まず、clamav-update が ClamAV のソースアーカイブを検証できるようにしてから、Leopard のコンパイラのバグを回避する変更を行い、そして clamav-update を使ってインストールする。手順は次の通り。
/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)],
);
sudo -H /usr/local/clamXav/bin/clamav-update.pl --force
ClamAV の freshclam および clamd はそのままでは使用できない。なぜならそれらの設定ファイルが例のままになっているからである。これを解除するとともに Mac OS X で使用するのに適切な変更を行う。
以下の設定の特徴は freshclam が ClamAV 自体の更新版があることを検知したときに clamav-update と連携して ClamAV 自体を自動でアップデートすることと、syslog を用いてログを出力することである。
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
/usr/local/clamXav/etc/freshclam.conf を編集する。
Example
#Example
#UpdateLogFile /var/log/freshclam.log
UpdateLogFile /usr/local/clamXav/share/clamav/freshclam.log
#LogSyslog yes
LogSyslog yes
#DatabaseOwner clamav
DatabaseOwner root
#DatabaseMirror db.XY.clamav.net
DatabaseMirror db.jp.clamav.net
#NotifyClamd /path/to/clamd.conf
NotifyClamd /usr/local/clamXav/etc/clamd.conf
#OnOutdatedExecute command
OnOutdatedExecute /usr/local/clamXav/bin/clamav-update.pl
sudo chown root /usr/local/clamXav/etc/freshclam.conf
sudo chmod 0644 /usr/local/clamXav/etc/freshclam.conf
sudo chown -R root:admin /usr/local/clamXav/share/clamav
以下の設定の特徴は、ClamdOmitScan の使用を意識していることと、syslog を用いてログを出力すること、そして freshclam による通知に任せて clamd 自身がローカルのウィルスデータベースが更新されたことを検知しないようにすること。
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
/usr/local/clamXav/etc/clamd.conf を編集する。
Example
#Example
#LogSyslog yes
LogSyslog yes
#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
#ScanPDF yes
ScanPDF yes
sudo mkdir -p /var/ClamdOmitScan/tmp
以上の設定をすると freshclam および clamd が syslog を用いてログを出力するようになる。syslog 側にこれを受け取るための設定をしておく必要がある。また、ログが溜まる一方にならないようにもしておく。手順は以下の通り。
/etc/syslog.conf に以下の一行を追加する。
local6.* /var/log/clamav.log
/etc/newsyslog.conf の以下の行を加える。このファイルはオーナーの root でさえ書き込み禁止に設定されているので GUI エディタを利用して書き換えるのに苦労するかもしれない。
/var/log/clamav.log 640 5 100 * J
sudo touch /var/log/clamav.log
ここでいったんシステムを再起動しておくとこの変更が有効になる。
freshclam をシステム起動項目にしたパッケージ FreshClamDaemon と clamd をシステム起動項目にしたパッケージ ClamAntiVirusDaemon をインストールする。そして、clamav-update による ClamAV 自体のアップデートがあったときに freshclam と clamd が再起動されるようにする。
/etc/clamav-update.d にコピーする。
sudo cp /Volumes/FreshClamDaemon-1.2/FreshClamDaemon-update.conf /etc/clamav-update.d/
/etc/clamav-update.d にコピーする。
sudo cp /Volumes/ClamAntiVirusDaemon-1.1.2/ClamAntiVirusDaemon-update.conf /etc/clamav-update.d/
/usr/local/clamXav/etc/clamav-update.conf を次の要領で編集する。
# 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)],
);
# 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 をインストールして、定期スキャンが行われるようにする。
このページの「インストール手順」セクションは UNIX 系 OS 一般向けに書かれていて Mac OS X ユーザは少し問う惑うかもしれない。具体的には以下をすればよい。
cd ここに ClamdOmitScan を解凍してできたフォルダをドラッグ&ドロップ
sudo make install
sudo cp ClamdOmitScan-update.conf /etc/clamav-update.d/
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
以下の内容でファイル /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', の先頭に # を付けてコメントにしておくこと。
以下の内容で /etc/daily.local を作成する。
これは週次または月次スキャンが行われない日にユーザ領域全体をスキャンする内容になっている。感染ファイルは /var/ClamdOmitScan/isolated フォルダに隔離される。
以下の内容で /etc/weekly.local を作成する。
これは月次スキャンが行われない日に日次スキャンの対象に加えて通常利用で書き換えられることが多い領域をスキャンする内容になっている。ユーザ領域の感染ファイルは /var/ClamdOmitScan/isolated フォルダに隔離される。
以下の内容で /etc/monthly.local を作成する。
これは週次スキャンの対象に加えて、それ以外のローカルディスク全体をスキャンする内容になっている。ユーザ領域の感染ファイルは /var/ClamdOmitScan/isolated フォルダに隔離される。
これは通常の ClamXav の設定の一部である。手順は以下の通り。
/var/ClamdOmitScan/isolated フォルダを選択する。
更に、ClamXavSentry が落ちたときのために ClamXavSentryKeeper をダウンロードしてインストールする。ダウンロードした dmg ファイルをマウントすると README.html があるのでそれを開いてそこに記載されている指示に従ってインストールする。
一部、ClamXavSentryKeeper が Leopard では動作しないという情報があるが問題なく動作するので安心を。そう勘違いした人は次をチェックしてみるとよいだろう。
ClamXavSentryKeeper というアプリは内蔵されている Perl スクリプトを起動するためだけのアプリなので、それが起動されるとアクティビティモニタでは ClamXavSentryKeeper ではなく perl というプロセスになる。
README.html には 5 秒以内と書いてあるが、実際には 10 秒以内。訂正が面倒なので訂正していないだけ。平均 5 秒と書くつもりだった。
上のチェックリストの最後の項目を除いて README.html に書いてあるので事前によく読んでほしい。それでもやはり動作していないのなら、実行環境に何らかの問題がある。筆者は ClamXavSentryKeeper の作者でもあるから相談に乗るので連絡を。
もう既に freshclam と連携して ClamAV 自体を自動でアップデートしたり、ダウンロードしたアーカイブファイルの電子署名を確認したりするようになっている。しかし、ClamAV 以外のソフトウェアの自動アップデートはまだするようになっていない。これが行われるようにする。また、clamav-update のログは ClamAV 用のログに書き込まれるようにする。手順は以下の通り。
以下の内容で /etc/clamav-update.d/common.conf を作成する。
これはログ出力先に syslog を指定する設定。
/etc/clamav-update.d/ の下にある -update.conf でファイル名が終わるファイル全てについて、先頭の方に次の一行を加える。ファイルの先頭に連続する # で始まるコメント行が終わったところがよいだろう。
require '/etc/clamav-update.d/common.conf';
clamav-update 更新用の clamav-update 設定ファイルについては別途行う。
/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 である。このファイルを次の内容で作成する。
/etc/clamav-update.d に張る。
sudo ln -s /usr/local/clamXav/etc/clamav-update-update.conf /etc/clamav-update.d/
/etc/daily.local に以下の内容を加える。
筆者は /etc/daily.local の先頭に挿入した。