※この記事はClamXav – Build Your Own Engineの日本語訳です。
エンジンの独自ビルド
ClamXavにはClamAVスキャニングエンジンがバンドルされていますが、必ずしもそれを使わなければならないわけではありません。独自に設定・ビルド・インストールしたバージョンを使うことも可能です。
準備
以下の手順を実行する前に、まずはAppleのDeveloper Toolsをインストールしておく必要があります。Mac OS Xのインストールディスクにも収録されていますが、Appleから最新版をダウンロードした方がよいでしょう。ダウンロードには無料のデベロッパ登録が必要です。サインアップしたら、Mac Dev CenterからXcode Developer Toolsをダウンロードしてください。
次に、ClamAVプロジェクトページからソースコードをダウンロードしましょう。最新の安定版(Stable Release)をおすすめします。開発版(RC:Release Candidates)は、その名が示す通り不完全です。
アーカイブを展開したら、freshclam.confファイルを編集します。ここで、Mac OS X 10.4(Tiger)以前をお使いの場合は、新規にClamAVというユーザおよびグループを作成しておく必要があります。それから、「設定」「ビルド」「インストール」というおなじみの手順をたどります。最後に、ClamAVのインストール先ディレクトリに適切な所有権・アクセス権設定を適用します。
confファイルの編集
ClamXav Sentryでは、バックグラウンドでのスキャニング処理の速度と効率の向上を図るべく、“clamd”デーモンとclamscanを併用しています。この機能を使うには、clamav-X.XX/etc/clamd.confファイル中の“Example”という語を全て削除しておきます。また、LocalSocketを有効にしてソケットファイルへのパスを指定します。デフォルトのパスでもOKですが、有効にするには行頭のハッシュ文字(#)を削除する必要があります。もちろん、必要とあれば変更を加えることは可能です。
さらに、clamav-X.XX/etc/freshclam.confファイル中からも“Example”という語を全て削除し、またDatabaseMirror等の国別の設定を編集しておきます。また、freshclamがウイルス定義の更新をclamdプロセスに通知するよう設定しておきます。NotifyClamdの設定でインストール後のclamd.confのパスを指定すればOKです。
ClamAVユーザ&グループの作成
OS X 10.4(Tiger)以降をお使いの場合は実行しないでください
インストールの前に、‘clamav’ユーザ(セキュリティ上の観点からログインおよびシェル使用不可)を作成する必要があります。こうしておかないと、ウイルス定義データベースの更新確認が不可能になるだけでなく、コードをコンパイルすることすらできません。以下のコマンドをroot権限で実行してください。
niutil -create . /users/clamav niutil -createprop . /users/clamav uid 82 niutil -createprop . /users/clamav gid 82 niutil -createprop . /users/clamav home /var/virusmails niutil -createprop . /users/clamav shell /sbin/nologin niutil -createprop . /users/clamav passwd "*" niutil -createprop . /users/clamav _writers_passwd clamav niutil -createprop . /users/clamav expire 0 niutil -createprop . /users/clamav name clamav niutil -createprop . /users/clamav realname "Clamav User" niutil -createprop . /users/clamav change 0 niutil -create . /groups/clamav niutil -createprop . /groups/clamav realname "SPAM Assassin Group 1" niutil -createprop . /groups/clamav name clamav niutil -createprop . /groups/clamav passwd "*" niutil -createprop . /groups/clamav gid 82 niutil -createprop . /groups/clamav smb_sid "S-1-5-21-183" niutil -createprop . /groups/clamav generateduid "ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000052"
smb_sidおよびgenerateduidに関しては、正直なところ開発者もよく理解しておりません。まずはNetInfo Managerを開き、これらの値が既存でないことを確認するのがよいかと思います。
設定、コンパイル、インストール
clamav-X.XXソースディレクトリに移動し、以下の操作を実行してください。下記コマンドをそのままコピー&ペーストする場合は、bashシェルをお使いください。その他のシェルをお使いの場合は適宜変更してください:
- CC=”/usr/bin/gcc-4.2″ CXX=”/usr/bin/g++-4.2″
CFLAGS=”-O2 -g -D_FILE_OFFSET_BITS=64″
CXXFLAGS=”-O2 -g -D_FILE_OFFSET_BITS=64″
./configure –disable-dependency-tracking –enable-llvm –enable-clamdtop –with-user=_clamav –with-group=_clamav –prefix=/usr/local/clamXav - make
- sudo make install
上記3種類のコマンドは、それぞれ1行で入力してください(改行は不要です)。
なお、Mac OS X 10.5以前のバージョンではgcc4.2はサポートされていませんので、上記コマンド中gcc-4.2をgccに、g++-4.2をg++に、-O2を-Ooに書き換える必要があります。ただしきちんと通るか確証がありませんので、インストール後にclamscanの動作をclamav-X.XX/testディレクトリで確認してください。
適切な所有権・アクセス権の設定
clamscanやfreshclamを実行する前に、ClamAVディレクトリに対し下記の所有権・アクセス権を設定しておく必要があります。
- chown -R root:wheel /usr/local/clamXav/etc
- chmod 0775 /usr/local/clamXav/etc
- chmod 0664 /usr/local/clamXav/etc/*
- chown -R root:wheel /usr/local/clamXav/bin
- chmod -R 0755 /usr/local/clamXav/bin
- chown clamav /usr/local/clamXav/bin/freshclam
- chmod u+s /usr/local/clamXav/bin/freshclam
- chown -R clamav:clamav /usr/local/clamXav/share/clamav
- chmod 0775 /usr/local/clamXav/share/clamav
- chmod 0664 /usr/local/clamXav/share/clamav/*
- chown -R clamav:clamav /usr/local/clamXav/share/clamav/daily*
- chmod -R a+r /usr/local/clamXav/share/clamav/daily*
- chown -R clamav:clamav /usr/local/clamXav/share/clamav/main*
- chmod -R a+r /usr/local/clamXav/share/clamav/main.*
カスタムインストールの場所
設定の段階でインストール先を変更(–prefixフラグ)した場合は、ClamXavにその変更を認識させる必要があります。ターミナルで以下を入力してください:If
defaults write uk.co.markallan.clamXav <ClamAVのパス>
また、freshclamのログファイルのパスを変更することもできます。カスタムインストールの場合デフォルトのパスは/tmp/freshclam.logですが、以下のコマンドで変更可能です:
defaults write uk.co.markallan.clamXav <更新ログのパス>
ClamXavを正常に動作させるためには、ログファイルは全ユーザ(または少なくとも使用者自身)が読み出し可能、かつユーザclamavが書き込み可能とする必要があります。