設定

ナビゲーションをスキップして本文へ

階層ナビゲーション

前後のナビゲーション

概要

この章では clamav-update の設定について説明します。Mac OS X で ClamXav を通してのみ ClamAV を使用していて、その GUI による設定以外特に行っていない人は最初のセクションを読んでからそれ以降を飛ばしてに進んでください。ClamXav を使用しながら freshclam をデーモンとして用いたり、clamd を使用している場合、あるいは ClamXav を使用していない Mac OS X ユーザ、Mac OS X 以外の UNIX 系 OS のユーザの場合はこの章は必要です。

ここで解説していること多くは clamav-update のパッケージに含まれる INSTALL ファイルに記載してあります。そちらも併せて見てください。

ClamXav を使用している場合

セキュリティ上の重要事項

過去の ClamXav には 1.0.4 より前のバージョンのオリジナルな ClamAV のセットアップでは誰もが root という特権レベルで ClamAV のウィルス定義ファイルアップデータ freshclam を使用できるようになっていました。これが原因で freshclam をあるやり方で使用することによって本来参照権限がないファイルの一部を参照できてしまうという脆弱性が ClamXav にありました。clamav-update に付属している設定ファイルではこれを解消するために、管理者権限を持たない一般ユーザと同レベルの権限しか持たないシステム用のユーザ clamav として freshclam が実行されるような設定の仕方をしています。脆弱性が解消された ClamXav 1.0.4 でもこの方法が採用されています。

しかし freshclam をデーモンとして用いる場合、ClamXav から各ユーザがウィルス定義ファイルをアップデートする必要がありません。むしろデーモンとして頻繁にウィルス定義ファイルの更新を監視している状態で各ユーザが ClamXav を通して freshclam を起動するのは無駄です。さらにウィルス定義ファイルは ClamAV の能力の柱の一つです。無闇にユーザが更新したりしない方が安全です。

実は ClamXav オリジナルの ClamAV のセットアップはもちろんですが clamav-update がそのデフォルトの設定ファイルに仕込んでいる改良セットアップも別な懸念を含んでいます。これは ClamAV や ClamXav の脆弱性というよりはシステム全体としての別な脆弱性の悪用例と言うべきものですが、要するに誰もが全ユーザに共通する ClamAV のウィルス定義ファイルを更新できるようにしようという ClamXav の方針に問題があります。セキュリティは一方が破られても他方で安全が保たれるように何重にも対策しておくべきものです。ClamAV や ClamXav はセキュリティ対策ソフトウェアなので特にそうなっていなければなりません。

これらの脆弱性を根本的に解決するためには freshclam を不特定のユーザに実行させないか、実行しても ClamAV の柱の一つであるウィルス定義ファイルに影響を及ぼさないようにする必要があります。その方法の一部が freshclam をデーモンとして使用することなのです。それによって ClamXav を通してウィルス定義ファイルの更新をしようとするとエラーになりますが、私はこれを全ての ClamXav ユーザに推奨します。

freshclam をデーモンとして使用している場合

clamav-update プロジェクトが提供している FreshClamDaemon をインストールすると freshclam をデーモンとして使用することができるようになります。ここではこの FreshClamDaemon をインストールしたものとして説明します。もちろん FreshClamDaemon のインストール以外にも方法はありますが、自力で freshclam をデーモンにすることができる人は以下の説明も適切に読み替えることができるでしょう。

clamav-update が最新版の ClamAV をダウンロードしてビルドそしてインストールした後、既に起動している freshclam を再起動する必要があります。これを行う手順を clamav-update の設定ファイル /usr/local/ClamXav/etc/clamav-update.conf に入れます。実はこのための設定は既に仕込まれていますが、コメントにして無効にしてあるのです。次の箇所です。

# using freshclam as a daemon (sample)
#push @{$Setting->{daemon}},
#   [qw(chown root /usr/local/clamXav/bin/freshclam)],
#   [qw(chmod u-s /usr/local/clamXav/bin/freshclam)],
#   [qw(/Library/StartupItems/FreshClamDaemon/FreshClamDaemon restart)];

ここを次のように書き換えます。

# using freshclam as a daemon (sample)
push @{$Setting->{daemon}},
    [qw(chown root /usr/local/clamXav/bin/freshclam)],
    [qw(chmod u-s /usr/local/clamXav/bin/freshclam)],
    [qw(/Library/StartupItems/FreshClamDaemon/FreshClamDaemon restart)];

つまり“#push”で始まる行からその行も含めて四行ほど行頭の“#”を削除します。

clamd を使用している場合

clamav-update プロジェクトが提供している ClamAntiVirusDaemon をインストールすると ClamAV のスキャンデーモン clamd を使用することができるようになります。ここではこの ClamAntiVirusDaemon をインストールしたものとして説明します。もちろん ClamAntiVirusDaemon のインストール以外にも方法はありますが、自力で clamd を起動することができる人は以下の説明も適切に読み替えることができるでしょう。

clamav-update が最新版の ClamAV をダウンロードしてビルドそしてインストールした後、既に起動している clamd を再起動する必要があります。これを行う手順を clamav-update の設定ファイル /usr/local/ClamXav/etc/clamav-update.conf に入れます。実はこのための設定は既に仕込まれていますが、コメントにして無効にしてあるのです。次の箇所です。

# using clamd (sample)
#push @{$Setting->{daemon}},
#   [qw(/Library/StartupItems/ClamAntiVirusDaemon/ClamAntiVirusDaemon restart)];

ここを次のように書き換えます。

# using clamd (sample)
push @{$Setting->{daemon}},
    [qw(/Library/StartupItems/ClamAntiVirusDaemon/ClamAntiVirusDaemon restart)];

つまり“#push”で始まる行からその行も含めて二行ほど行頭の“#”を削除します。

ソースからデフォルトでインストールした場合

ClamAV のデフォルトは ./configure --prefix=/usr/local としてビルド環境を初期化したのと同じです。configure の prefix オプションを使用した人は以下の説明で /usr/local/ と書いてあるところは prefix オプションで与えたディレクトリに読み替えてください。

パッケージからコピーした /usr/local/etc/clamav-update.conf に以下の編集を加えます。

PATH 環境変数の値変更

67 行目の次の箇所

#$Setting->{environment}->{PATH} = '/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/clamXav/bin';

これを次のように書き換える。

$Setting->{environment}->{PATH} = '/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin';
configure と make の方法を変更

116 行目 から 119 行目の次の箇所

#$Setting->{build} = [
#   [qw(./configure --prefix=/usr/local/clamXav)],
#   [qw(make)],
#];

これを次のように書き換える。

$Setting->{build} = [
    [qw(./configure)],
    [qw(make)],
];

configure の prefix オプションを使って ClamAV をインストールしたい人は 119 行目の“configure”の後ろに --prefix=ベースディレクトリ を加えてください。

ビルド後のインストール手順を変更

124 行目 から 134 行目の次の箇所

#$Setting->{install} = [
#   [qw(make install)],
#   [qw(chown -R root:admin /usr/local/clamXav)],
#   [qw(chmod 664 /usr/local/clamXav/etc/freshclam.conf)],
#   [qw(chown clamav /usr/local/clamXav/bin/freshclam)],
#   [qw(chmod u+s /usr/local/clamXav/bin/freshclam)],
#   [qw(touch /usr/local/clamXav/share/clamav/freshclam.log)],
#   [qw(chmod 664 /usr/local/clamXav/share/clamav/freshclam.log)],
#   [qw(chown -R clamav:clamav /usr/local/clamXav/share/clamav)],
#   [qw(chmod -R ug+w /usr/local/clamXav/share/clamav)],
#];

これを次のように書き換える。

$Setting->{install} = [
    [qw(make install)],
];

make install の前にいつもやっていることがある場合は、そのコマンドラインを [qw()], で囲って 127 行目の直後に加えてください。

clamd 再起動の追加

clamd を使用している場合にのみ実施してください。clamd は /etc/rc.d/init.d/clamd で起動や停止を管理しているものとして説明します。

オリジナルでの行番号で 143 行目 から 144 行目の次の箇所

#push @{$Setting->{daemon}},
#   [qw(/Library/StartupItems/FreshClamDaemon/ClamAntiVirusDaemon restart)];

これを次のように書き換える。

push @{$Setting->{daemon}},
    [qw(/etc/rc.d/init.d/clamd restart)];
freshclam 再起動の追加

freshclam をデーモンとして使用している場合にのみ実施してください。freshclam は /etc/rc.d/init.d/freshclam で起動や停止を管理しているものとして説明します。

オリジナルでの行番号で 147 行目 から 150 行目の次の箇所

#push @{$Setting->{daemon}},
#   [qw(chown root /usr/local/clamXav/bin/freshclam)],
#   [qw(chmod u-s /usr/local/clamXav/bin/freshclam)],
#   [qw(/Library/StartupItems/FreshClamDaemon/FreshClamDaemon restart)];

これを次のように書き換える。

push @{$Setting->{daemon}},
    [qw(/etc/rc.d/init.d/freshclam restart)];

更に /etc/clamav-update-update.conf を次の内容で作成してください。このファイルは root 以外のユーザからは変更できないようにしなければなりません。

$Setting->{install}->{'clamav-update.pl'}->{destination} = '/usr/local/bin/clamav-update.pl';
$Setting->{install}->{'clamav-update.pl'}->{group} = 'root';
$Setting->{install}->{'clamav-update-update.conf'}->{destination} = '/usr/local/etc/clamav-update-update.conf';
$Setting->{install}->{'clamav-update-update.conf'}->{group} = 'root';
$Setting->{install}->{'clamav-update-update.conf'}->{mode} = '0644';

このファイルは clamav-update 自身のアップデートの仕方をカスタマイズするもので /usr/local/etc/clamav-update-update.conf によってロードされます。

このファイルをロードした後、実行時のユーザのホームディレクトリの .clamav-update-update.conf がもしあればロードされます。そのファイルも同じ設定をすることができ、/usr/local/etc/clamav-update-update.conf によるシステムワイドの設定を上書きします。しかし clamav-update の本体である clamav-update.pl は root でしか使用できないようになっているので運用上の意味はありません。/usr/local/etc/clamav-update-update.conf を書き換える前の仮の設定用と考えてください。

設定リファレンス

$Setting->{logging}->{setlogsock}

説明
ログの出力先。
可能な値
\*STDOUT
標準出力。
\*STDERR
標準エラー出力。
'unix'
UNIX ドメインソケットによる syslog 出力。
['stream', 'FILE_PATH']
パス名が FILE_PATH で示されるストリームへの syslog 出力。
'inet'
getservbyname() で返される INET ソケットによる syslog 出力。ソケットの種類は tcp, udp の順で試行される。
'tcp'
getservbyname() で返される tcp ソケットによる syslog 出力。
'udp'
getservbyname() で返される udp ソケットによる syslog 出力。
'console'
コンソールへの syslog 出力。
デフォルト
\*STDERR

$Setting->{logging}->{setlogmask}

説明
ログレベル。指定されたレベルも含めてそれ以上のレベルのログのみが出力される。syslog 出力の場合 syslogd の設定によって実際に出力されるかどうかが決まる。
可能な値
'emerg'
パニックな状況
'alert'
速やかに修正すべき状況
'crit'
クリティカルな状況
'err'
エラー
'warning'
警告メッセージ
'notice'
エラーではないが必要なら対応するすべき状況
'info'
情報メッセージ
'debug'
プログラムのデバッグで使用する情報を含んだメッセージ
デフォルト
'warning'

$Setting->{logging}->{openlog}->{ident}

説明
syslog への全てのメッセージに付加される文字列。
可能な値
文字列
デフォルト
'clamav-update'

$Setting->{logging}->{openlog}->{logopt}

説明
syslog 出力時のオプションを示す文字列の配列。['OPTION1', 'OPTION2', …][qw(OPTION1 OPTION2)] という形式で指定する。
可能な値
ndelay
最初にログを出力するときに syslog と接続するのではなく最初に接続する。
perror
標準エラー出力にも出力する。
pid
プロセス ID をメッセージに付加する。
デフォルト
[qw()]

$Setting->{logging}->{openlog}->{facility}

説明
syslog ファシリティ。メッセージの種類を表す。
可能な値
'auth'
認証システム。
'authpriv'
'auth' と同じだが個別に選択された書き込み禁止ファイルに出力される。
'console'
カーネルのコンソール出力ドライバによる /dev/console へ書かれるメッセージ。
'cron'
cron デーモン。
'daemon'
他のファシリティが明示的に用意されていないシステムデーモン。
'ftp'
ファイル転送プロトコル(FTP)デーモン
'lpr'
ラインプリンタースプールシステム。
'mail'
メールシステム。
'news'
ネットワークニュースシステム。
'security'
セキュリティサブシステム。
'user'
様々なユーザプロセスからのメッセージ。
'uucp'
uucp システム。
'local0'
'local1'
'local2'
'local3'
'local4'
'local5'
'local6'
'local7'
ローカルなアプリケーションによるメッセージ。
デフォルト
'local6'

$Setting->{environment}->{var}

説明
PATH などの環境変数 var の値。
可能な値
文字列。環境変数名 var によって異なる。
デフォルト
PATH の値として /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/clamXav/bin

$Setting->{version}->{latest}->{command}

説明
最新版のバージョンを取得するためのコマンドライン。
可能な値
文字列
デフォルト
'host -t txt current.cvd.clamav.net'

$Setting->{version}->{latest}->{regexp}

説明
$Setting->{version}->{latest}->{command} で設定されたコマンドラインの出力(標準出力)からバージョン番号を取り出すための正規表現。この正規表現で $1 に保管される文字列がバージョン番号と認識される。
可能な値
正規表現のリファレンス
デフォルト
qr/"(\d+(?:\.\d+)*):\d+:\d+:\d+:[^"]*"\s*$/

$Setting->{version}->{current}->{command}

説明
現在のバージョンを取得するためのコマンドライン。
可能な値
文字列
デフォルト
clamav-config --version

$Setting->{version}->{current}->{regexp}

説明
$Setting->{version}->{current}->{command} で設定されたコマンドラインの出力(標準出力)からバージョン番号を取り出すための正規表現。この正規表現で $1 に保管される文字列がバージョン番号と認識される。
可能な値
正規表現のリファレンス
デフォルト
qr/^(\d+(?:\.\d+)*)\s*$/

$Setting->{download}->{src}

説明
ダウンロード元のベース URL。curl コマンドでアクセス可能な URL でなければならない。
可能な値
文字列または文字列を返す関数のリファレンス。
デフォルト
'http://jaist.dl.sourceforge.net/sourceforge/clamav'

$Setting->{download}->{dst}

説明
ダウンロード先のディレクトリのパス名。
可能な値
文字列
デフォルト
'/tmp'

$Setting->{download}->{name}

説明
ダウンロードされるもののパッケージ名。“%s”は $Setting->{version}->{latest}->{regexp}$1 に保存されたバージョン番号に置き換えられる。“%”自信は“%%”と表記すること。このパッケージ名に $Setting->{download}->{ext} を後ろから付加したものがダウンロードされるファイルになり、それを tar で z オプション付きで解凍するとこのパッケージ名のディレクトリができると仮定される。
可能な値
文字列
デフォルト
'clamav-%s'

$Setting->{download}->{ext}

説明
ダウンロードされるファイルの拡張子。$Setting->{download}->{name} に後ろからこの値を付加したものがダウンロードされるファイルのファイル名と仮定される。
可能な値
文字列
デフォルト
'.tar.gz'

$Setting->{build}

説明
ビルド手順。ビルドするためのコマンドラインの配列。各コマンドラインはコマンドと引数の配列。
可能な値
配列の配列
デフォルト
[ [qw(./configure --prefix=/usr/local/clamXav)], [qw(make)] ]

$Setting->{install}

説明
インストール手順。インストールするためのコマンドラインの配列。各コマンドラインはコマンドと引数の配列。
可能な値
配列の配列
デフォルト
[ [qw(make install)], [qw(chown -R root:admin /usr/local/clamXav)], [qw(chmod 664 /usr/local/clamXav/etc/freshclam.conf)], [qw(chown clamav /usr/local/clamXav/bin/freshclam)], [qw(chmod u+s /usr/local/clamXav/bin/freshclam)], [qw(touch /usr/local/clamXav/share/clamav/freshclam.log)], [qw(chmod 664 /usr/local/clamXav/share/clamav/freshclam.log)], [qw(chown -R clamav:clamav /usr/local/clamXav/share/clamav)], [qw(chmod -R ug+w /usr/local/clamXav/share/clamav)], ]

$Setting->{doClean}->{archive}

説明
インストール後アーカイブファイルを削除するかどうか。
可能な値
真偽を表す値。例えば 1, 0
デフォルト
1

$Setting->{doClean}->{objects}

説明
インストール後 make clean をするかどうか。
可能な値
真偽を表す値。例えば 1, 0
デフォルト
0

$Setting->{doClean}->{dir}

説明
インストールした後アーカイブを展開したディレクトリを削除するかどうか。
可能な値
真偽を表す値。例えば 1, 0
デフォルト
1