« 実は独りぼっち | Main | 911 回も怒られるの巻き »
先日、自分の Mac の Parallels にある CentOS 5.0 に ClamAV をインストールした。その手順をメモしておく。他の CentOS マシンにもインストールしようと思っているので。
サンプルの clamd 起動用のスクリプトが reload で間違いがあったので訂正しました。ダウンロードした人は再度ダウンロードしてください。
CentOS 5.0 には Fedora Core のように ClamAV の rpm パッケージが無ありません。RedHat 系の Linux は rpm パッケージで管理するのが楽なのですが、公式パッケージに登録されていないとアップデートがいちいち面倒なことになります。ついでに ClamAv の Linux 用パッケージのページを見ても CentOS 用は記載されていません。
アップデートが面倒と言えば clamav-update があります。非公式 rpm でもソースからのビルドでも clamav-update があれば自動でできて手間いらずです。それに clamav-update はアップデータではありますがインストーラーとしても使えます。どうせ clamav-update でアップデート管理をするのであれば、clamav-update でインストールしてしまいましょう。
ここでは次のようにして ClamAV を運用することにします。
CentOS 限定ではなくほとんどの Linux でほぼ同じ手順でできるでしょう。
clamav-update-バージョン.tar.gz というアーカイブファイルがダウンロードされます。
解凍した場所に clamav-update-バージョン というディレクトリができます。
root で clamav-update-バージョン ディレクトリに移動した後に次のようにします。
./install.sh --verbose
--verbose オプションを付けているのでどこに何がインストールされたかわかります。ClamAV のダウンロード元を変えるためのオプションもあります。--help オプションを用いると説明が出力されます。
root で次のようにします。
groupadd -r clamav
root で次のようにします。
useradd -r -d /var/clamav -g clamav -s /sbin/nologin clamav
このままですと clamav ユーザのホームディレクトリが作成されませんが、clamav ユーザでログインしないので要りません。
root で次のようにします。
clamav-update.pl --force --config=/usr/local/etc/clamav-update.conf
ダウンロードからやるので反応が出るのに少し時間がかかります。いらちの人は /usr/local/etc/clamav-update.conf を編集してログレベルを info か debug にしておきましょう。
ClamAV のウィルスデータベースを常に最新にするために freshclam を設定します。ここではデーモンとして freshclam を使用することにし、clamav-update と連携させて ClamAV 自体も常に最新に保つようにします。
/usr/local/etc/freshclam.conf を編集する。
freshclam.conf を次の要領で編集します。
Example#Example#LogSyslog yesLogSyslog yes#PidFile /var/run/freshclam.pidPidFile /var/run/freshclam.pid#DatabaseOwner clamavDatabaseOwner rootこれは freshclam を clamav-update.pl に連動させるためです。freshclam が ClamAV 自体のアップデートを検知したら clamav-update.pl を実行するようにするのですが、clamav-update.pl は root でないと動作しないからです。一般には root 権限で freshclam が稼働するのは推奨されません。
#DatabaseMirror db.XY.clamav.netDatabaseMirror db.jp.clamav.netもちろんこの例は日本の場合です。
#NotifyClamd /path/to/clamd.confNotifyClamd /usr/local/etc/clamd.conf#OnOutdatedExecute commandOnOutdatedExecute /usr/local/bin/clamav-update.pl --config=/usr/local/etc/clamav-update.conf起動スクリプト freshclam を作っておきました。このファイルを /etc/rc.d/init.d/ に置いて実行パーミッションを付けておきます。
このスクリプトでは reload はウィルスデータベースの即時アップデートを意味しています。
root で次のようにします。
chkconfig --add freshclam
root で次のようにします。
/etc/rc.d/init.d/freshclam start
Linux ではメールサブシステムのためによく clamd を利用しますが、それはまた別の機会にして、ここでは clamav-update プロジェクトの ClamdOmitScan を利用して定期スキャンをする目的で root または clamav グループに所属するユーザだけが利用できるように設定します。
/usr/local/etc/clamd.conf を編集する。
clamd.conf を次の要領で編集します。
Example#Example#LogSyslog yesLogSyslog yes#PidFile /var/run/clamd.pidPidFile /var/run/clamd.pid#TemporaryDirectory /var/tmpTemporaryDirectory /var/clamav/tmpたまに一時ファイルやディレクトリを残してしまうことがあるので一気に消せるように独自のディレクトリを指定します。
LocalSocket /tmp/clamd.socketLocalSocket /var/clamav/clamd.socket#ArchiveMaxCompressionRatio 300ArchiveMaxCompressionRatio 1000あとはお好みに合わせて適当にやってください。
起動スクリプト clamd を作っておきました。このファイルを /etc/rc.d/init.d/ に置いて実行パーミッションを付けておきます。
この起動スクリプトでは reload の実行に clamdsh を利用しています。後述のように clamdsh をインストールしてください。その reload はウィルスデータベースのリロードを意味しています。
root で次のようにします。
chkconfig --add clamd
この段階ではまだ clamd は起動しないでください。準備の続きがあります。
clamdsh とは clamd を操作するための簡易シェルです。ここでは clamd 起動スクリプトの中で reload の実行のために使用しています。もちろん単体でもバージョン確認や動作確認に使えて便利です。
clamdsh-バージョン.tar.gz というアーカイブファイルがダウンロードされます。
解凍した場所に clamdsh-バージョン というディレクトリができます。
root で clamdsh-バージョン ディレクトリに移動した後に次のようにします。
make install
解凍したディレクトリはまだ消さないでください。まだそこにあるファイルを使います。
clamdsh は Perl モジュール Getopt::Long 2.36 以上を必要としています。cpan コマンドを使ってバージョンアップしておきましょう。CentOS 5.0 では Getopt::Long 2.35 がインストールされていますし、他のシステム大抵は 2.35 です。
cpan コマンドを root ユーザで起動して cpan コマンドのプロンプトで次のようにします。
install Getopt::Long
定期スキャンには ClamAV 付属の clamdscan や clamscan ではなく、効率的な ClamdOmitScan を使用します。
ClamdOmitScan-バージョン.tar.gz というアーカイブファイルがダウンロードされます。
解凍した場所に ClamdOmitScan-バージョン というディレクトリができます。
root で ClamdOmitScan-バージョン ディレクトリに移動した後に次のようにします。
make install
解凍したディレクトリはまだ消さないでください。まだそこにあるファイルを使います。
ClamAV は freshclam と clamav-update の連携で自動アップデートされますが、clamdsh と ClamdOmitScan そして clamav-update 自身も clamav-update で自動アップデートされるようにしておきましょう。
/etc/clamav-update.d/ ディレクトリを作成します。
次のファイルを上で作成したディレクトリにコピーします。
clamdsh をアップデートするための設定ファイルです。インストール時にできた clamdsh-バージョン ディレクトリの中にあります。
ClamdOmitScan をアップデートするための設定ファイルです。インストール時にできた ClamdOmitScan-バージョン ディレクトリの中にあります。
更に clamav-update のアップデートのために root で次のようにします。
ln -s /usr/local/etc/clamav-update-update.conf /etc/clamav-update.d/
毎日アップデート確認をするのでしたら /etc/cron.daily/ に毎週なら /etc/cron.weekly/ に次の内容のファイルを作成して実行パーミッションを付けます。
#!/bin/sh
ClamavUpdateConfDir=/etc/clamav-update.d
for ConfFile in "$ClamavUpdateConfDir"/*-update.conf;
do
/usr/local/bin/clamav-update.pl --config "${ConfFile}"
done
さていよいよ定期スキャンの設定をします。ここでは /home/ 以下を毎日、/usr/local/ 以下を一週間に一度、それ以外を毎月スキャンすることにします。
root で次のようにします。
mkdir /var/clamav /var/clamav/tmp /var/clamav/ClamdOmitScan /var/clamav/isolatedchown -R clamav:clamav /var/clamavchmod -R 2770 /var/clamav
root で次のようにします。
/etc/rc.d/init.d/clamd start
動作しているかどうかの確認は clamdsh を使用します。次はその様子です。
# clamdsh.pl
/var/clamav/clamd.socket# PING
PONG
/var/clamav/clamd.socket# exit
#
root で clamav-update をインストールしたときのディレクトリ clamav-update-バージョン ディレクトリに移動した後に次のようにします。
./install.sh --verbose --freshclam --clamd
最初にインストールしたときからオプションが増えています。このオプションを追加すると、/usr/local/etc/clamav-update.conf に ClamAV 更新時に freshclam と clamd が再起動される設定が追加されます。最初のインストール時に付けなかったのは、まだ再起動できない状態だったからです。
ClamdOmitScan を使用するのですが、オプションを纏めたコマンドを準備しておきます。定期スキャンで使用されるスキャンデータというのを共有するときにも便利です。
というわけでそのコマンドのサンプル cronscan を用意しておきました。これに実行パーミッションを付けて /usr/local/bin/ に置いてください。中に記載してあるオプションは運用ポリシーにしたがって適当に変えてください。
感染ファイルを隔離するオプションはコメントにしてあります。これは、スキャン対象によっては誤認識でファイルが隔離ディレクトリ(/var/clamav/isolated/)に移動されるとシステムの稼働に重大な障害が発生する可能性があるからです。スキャン対象に応じてこのスクリプトの引き数として隔離オプションを与えるのがよいでしょう。
次のような内容のスクリプトを /etc/cron.daily/ に作成して実行パーミッションを付けます。
#!/bin/bash
/usr/local/bin/cronscan --move=/var/clamav/isolated /home
次のような内容のスクリプトを /etc/cron.weekly/ に作成して実行パーミッションを付けます。
#!/bin/bash
/usr/local/bin/cronscan /usr/local
次のような内容のスクリプトを /etc/cron.monthly/ に作成して実行パーミッションを付けます。
#!/bin/bash
/usr/local/bin/cronscan --exclude-dir=/home --exclude-dir=/usr/local /
clamav-update と ClamdOmitScan そして clamdsh をインストールするときアーカイブファイルを解凍してできたディレクトリはもう要らないので消してください。
以上で完了です。最初にほとんどの Linux でほぼ同じ手順が通用すると書きましたが、UNIX 系 OS であれば起動スクリプトや定期実行用スクリプトの作法が異なるのみで、実質的に同じ手順を踏めばセットアップできるはずです。ただし、この記事の執筆時点での clamav-update の最新版 2.2.3 は FreeBSD でうまくインストールできない、あるいはインストールしても少し不都合があることがわかっています。(参照「SourceForge.jp: Detail: 11094 FreeBSD 6.2 で clamav-update 2.2.3 をインストールできない」) この不具合は最新の CVS リポジトリ上では解消されています。解消してから三週間くらい経っていますが、なんとなくリリースしていません。FreeBSD で使ってみたい人はコメントなどでせっついてください。