Sambaの汚物(ウイルス)は消毒だ。scannedonly編。

Pocket

sambaのvfs, scannedonly

scannedonlyとは、sambaのvfs。
その名前の通り、スキャン済みのもののみ開いたりダウンロードできるようになる。

scannedonlyのインストール

scannedonlyのvfsは、実はSambaに含まれる。
あれ?じゃあすぐ使えるの?と思ったのだが、それは間違いで、実際にスキャンを行うdaemonを別にインストールする必要がある。
その代わりと言っては何だが、clamdを立ち上げる必要はない。
security/scannedonlyからインストールできる。
以下はインストール例。sysctl.confに一行追加しとけよ、と言われるのでその通りにしておく。

 

scannedonlyの設定の流れ

scannedonlyの設定には、前章のとおりにsysctl.confを修正することに加え、①vfsとしてのscannedonlyの設定、②daemonとしてのscannedonlyの設定が必要

まず③のdaemonとしての設定から。

scannedonly daemonの設定

/etc/rc.confで行う。
設定例は以下のとおり。

おなじみの一行目はシステム起動時にdaemonも起動させる指定。
二行目でdaemonに与えるオプションを指定する。
上記の–scanrootは、スキャン対象のファイルが置かれるトップディレクトリを指定する。
daemonは、ここで指定されたディレクトリ外のファイルのウイルススキャンを要求されても無視する。

その他のオプションには;

scannedonlyのスレッドと「大きいファイル」について

scannedonlyはデフォルトでスキャン用に4スレッドを用意する。
複数のスキャン要求が来たとき、scannedonlyは「大きいファイル」を特定の1スレッドのみに割り当てる。残りのスレッドは「小さいファイル」をざくざくスキャンする。
こうすることでスキャンの待ち行列をスムーズに解消しようと試みる。
「大きいファイル」は前述の–bigで指定するサイズで決まる。
この値は、共有ファイルにどんなファイルがあるかを前提に変えたらよい。
デフォルトの10MBはちょっと小さいので、20MBにした。

scannedonly vfsの設定

smb.confに書く。
shareごとに設定できる。
以下が設定例。
最後の行だけ特殊。後述。

 

起動

scannedonly daemonを起動し、そのあとsambaを(再)起動。

このとき、/var/log/messagesには以下の表示があるはず。


実験:未スキャンのファイルはどう表示されるか。

さっそく共有フォルダにファイルを放り込んでみよう。
小さいファイルだと変わらないようにみえるが、ちょっと大きいファイルになると、コピーが終わってからスキャンが終わるまで、以下のような表示になるはず。
beingscanned

なお、hide_nonscanned_filesをFalseにした場合、コピーが終わった瞬間にファイルは表示される。
スキャンが終わってなくても表示される。
されるのだが、開こうとしたりコピーしようとすると、「アクセス権がない」旨のメッセージが表示されて蹴られる。
ユーザからしてみれば、ファイルが見えるのに開けないのはストレスでしかない。
hide_nonscanned_filesはTrueをお勧めする。
しかし。

Officeドキュメントを共有する場合

scannedonlyの仕組みで困るのは、Officeドキュメント。
というのも、Officeはファイルを頻繁に開け閉めするから。
その都度、スキャンが走り、終わるまでファイルを開けなくなる。
要するに、使い物にならん。
そこで下記の行を追加して、未スキャンファイルも開けるようにするほかない。
うーん…。

まあ、仕方ないよね。

バックヤードでは

さて。scannedonlyのバックヤードはどうなっているのだろうか。
実ディレクトリを見てみると、このようになっている。

ディレクトリに置かれたファイルと同じファイル名、ただしファイル名の先頭に「.scanned:」と付いたサイズ0バイトのファイルができる。
このファイルでスキャン済みかどうかを、scannedonlyは判断している。
ちなみに、オリジナルのファイルを消すと.scannedの方も消える。
.scannedだけが残るということはないからご安心めされよ。
もちろん、ファイルを更新した際には再スキャンが行われる。

大きなファイルを共有フォルダにコピーしはじめ、そのあとに小さなファイルを共有フォルダに置くと、小さいファイルはすぐに表示される。
複数スレッドで処理していることと、大きいファイルは1スレッドでしか処理しないことからこのような動作になる。

また、しばらくすると、/var/log/messagesにはログが増えているはず。


実験: virusが見つかったらどうなる?

試してみた。
testvirus.txtというファイルを突っ込んでみると、コピーが終わっても共有フォルダには表示がされない。
代わりに、同じファイル名、ただしファイル名先頭に「VIRUS_found_in_」、末尾に「.txt」と付いたサイズ0のファイルが作られ表示される。
virusfoundscann

このとき、実ディレクトリはこのようになっている。
つまりオリジナルのファイルは「.virus:」と頭に付けられて、ユーザからは見えなくなっている。

さらにこのとき、/var/log/messagesには以下のように。
1,2行目がウイルス発見時のもの、3行目はstatus report時のものである。

 

以上

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください