Samba上のファイルをウイルススキャンするには。

Samba上のファイルをウイルススキャンするならどんな方法があるだろうか。
一つは、cronで定期的にスキャンする方法である。
もう一つは、Sambaにスキャンを組み込む方法である。

クライアントにアンチウイルスソフトウェアがインストールされており、定義ファイルも更新されているなら、前者のcronがおすすめである。
理由にはあとで触れる。
クライアントを信用できないなら、後者のsamba側スキャンが候補に挙がる。

Sambaのウイルススキャンvfs

Sambaにはvfsスタッカブルモジュールという仕組みがある。
Sambaに追加機能をもたらすものだが、ウイルススキャン機能を追加するvfsもいくつかある。
http://www.samba.gr.jp/project/translation/Samba3-HOWTO/VFS.html

これらのvfsには、大きく分けて以下二つのアプローチがある。

  1. ファイルをオープンするときにスキャン
  2. スキャン済みのファイルのみオープンを許可

1には、vscan-clamavやvirusfilterとがある。
2には、scannedonlyがある。それ以外には知らない。

以下、二つのアプローチの特徴を、たいへん大まかに記す。

アプローチ1: ファイルオープン時スキャン法

Samba上ファイルを開くときに外部のウイルススキャナへファイルを渡し、スキャンするというもの。
まあ普通に考えるとそうなるわな、という方法。
ただ短所はある。
ファイルに変更があろうがなかろうが、開くたびにスキャンする。
ユーザはスキャンが終わるまで待たされる。
仮にファイルがとてつもなく巨大だと、待たされる時間も長くなる(スキャン対象とするファイルサイズ上限は決められる)。
同時接続ユーザが増えても問題になるだろう。

アプローチ2: あらかじめスキャン法

②、すなわちscannedonlyは、ファイルが共有ディレクトリ上に置かれたとき、あるいは更新があったときにスキャンする。
スキャン済みのファイルであれば、ファイルオープン時に再スキャンは行われない。
ファイルオープン時にオーバーヘッドがないこと、ファイルのサイズが大きくてもまったく影響のないこと、ユーザ数の増加による負荷への影響が少ないことは長所である。

もちろん、こちらにも短所がある。
当該ファイルがスキャン済みであることを示す「しるし」が必要である。
scannedonlyは、この「しるし」として、.scannedというサイズ0バイトのファイルを作る。
つまり、共有ディレクトリに置かれるファイルの数が倍になる。
サイズが0バイトであるものの、iノードの残量には懸念の生じることがあるかも。
当然、①にはこの懸念はない。

やっぱりcronで定期スキャンだよね

ご覧のとおり、1,2ともに短所がある。
クライアント側のウイルス対策が保証できるなら、cronで定期的にスキャンしたほうがよいだろう。
しかしクライントが信用ならないのなら、アプローチの1,2いずれかを選んで、Sambaでウイルス対策を講じるべき。
ということで、アプローチ1,2のインストール、設定方法については記事を改めて示す。