Chapter 23. スタッカブルVFSモジュール
Prev | Part III. 詳細な設定方法 | Next

## Chapter 23. スタッカブルVFSモジュール

### Jelmer R. Vernooij

The Samba Team

`<jelmer@samba.org>`

### John H. Terpstra

Samba Team

`<jht@samba.org>`

### Tim Potter

Samba Team

`<tpot@samba.org>`

### Simo Sorce

original vfs_skel README

### Alexander Bokovoy

original vfs_netatalk docs

### Stefan Metzmacher

Update for multiple modules

### Ed Riddle

original shadow_copy docs

## 機能と利便性

Samba-3から、スタッカブルVFS(バーチャルファイルシステム)モジュールがサポートされる。SambaはUNIXファイルシステムへのアクセスリクエストの一つ一つを、ロードされたVFSモジュールに渡す。この章は、Sambaのソースに附属のモジュールについて説明すると同時に、一部の外部モジュールについても言及する。

## 議論

異なるシステムでは異なる方法で共用ライブラリーをコンパイルしリンクするので、これらのモジュールが、プラットフォームディストリビューションのバイナリSambaパッケージと共に供給されない場合、モジュールをコンパイルするのが困難になるかもしれない。これらのモジュールは、GNU/Linux及びIRIXに関してテスト済みである。

VFS モジュールを使用するには、以下の例に類似した共有を作成すること。重要なパラメータは、一つ以上のVFSモジュールを名前順に一覧表示できるvfs objectsパラメータである。例えば、ファイルへのアクセスをすべてログに取り、削除されたファイルをゴミ箱に入れるには、VFSモジュールを使うsmb.confの例を参照のこと:

Example 23.1. VFSモジュールを使うsmb.confの例

`[audit]`
`comment = Audited /data directory`
`path = /data`
`vfs objects = audit recycle`
`writeable = yes`
`browseable = yes`

モジュールは指定された順に使用される。例えば、ウィルススキャナモジュールとごみ箱モジュールを両方使用したいとする。この場合、ファイルに関して他のアクションが取られる前に、最初にウィルスを検知するよう、ウィルススキャナモジュールを最初のモジュールとし、このモジュールが最初に動くようにすべきである。The modules are used in the order in which they are specified. Let's say that you want to both have a virusscanner module and a recycle bin module. It is wise to put the virus scanner module as the first one so thatit is the first to get run and may detect a virus immediately, before any action is performed on that file.vfs objects = vscan-clamav recycle

SambaはSambaをインストールしたサーバのrootディレクトリ中の`/lib`からいくつかのモジュールをロードしようとする(通常は`/usr/lib/samba/vfs`か`/usr/local/samba/lib/vfs`)。

いくつかのモジュールは同じ共有に対して二度使用できる。これは複数のVFSモジュールを使用するsmb.confの例のような設定で可能となる。

Example 23.2. 複数のVFSモジュールを使用するsmb.confの例

`[test]`
`comment = VFS TEST`
`path = /data`
`writeable = yes`
`browseable = yes`
`vfs objects = example:example1 example example:test`
`example1: parameter = 1`
`example: parameter = 5`
`test: parameter = 7`

## 含まれるモジュール

### audit

syslog機能へのファイルアクセスを監査するシンプルなモジュールである。 以下の操作のログが取られる:

- share

- connect/disconnect

- directory opens/create/remove

- file open/close/rename/unlink/chmod

### default_quota

このモジュールは、Samba-3サーバ上で格納される既定値のquota値を、Windowsのエクスプローラの GUI画面で設定できるようにする。この試みはLinuxファイルシステムでユーザとグループに対する quotaを格納する場合のみだが、それは既定値を持たない。

Sambaは既定値としてNO_LIMITをquotaの既定値として返し、それは更新できない。このモジュールを 使うと、ユーザに対するquotaレコード中でWindowsクライアントに表示される既定値のquota値を 格納できる。既定値では、通常quota制限がrootには適用されないため、rootユーザが既定値として 利用される。

このモジュールには`smb.conf`ファイル中で2つのパラメータを設定する。おのおのの既定値の プレフィックスは“default_quota”である。これは、以下のようにして、 vfs modulesパラメータ中でモジュールをロードしたときに上書きできる:

    vfs objects = default_quota:myprefix

default_quotasモジュールに対して指定することが出来るパラメータのエントリは以下の通り:

myprefix:uid

  既定値のユーザquotaを格納するために使われるquotaレコードのためのuidを 指定する整数値。

  既定値は0(ルートユーザ)。使用例は以下の通り:

      vfs objects = default_quotadefault_quota:	uid = 65534

  上記の例では`myprefix`が省略され、そのため、既定値の プレフィックスはモジュールの名前になる。`myprefix` パラメータが指定されると、上記は以下のように書き換えられる:

      vfs objects = default_quota:myprefixmyprefix:	uid = 65534

myprefix:uid nolimit

  既定値のquota値がユーザのレコードとしても表示される場合か、 `NO_LIMIT`が、`prefix:uid`パラメータに よって指定されたユーザとしてWindowsクライアントに表示される場合、この パラメータは論理値となる。

  既定値は`yes`である(NO_LIMITが表示される)。使用例は以下の通り:

      vfs objects = default_quota:myprefixmyprefix:	uid nolimit = no

myprefix:gid

  このパラメータは`prefix>:uid`と同じように整数値を引数と して取るが、グループquotaであるところが違う。注意:グループquotaはWindows エクスプローラではサポートされていない。

  既定値は0である(rootグループ)。使用例は以下の通り:

      vfs objects = default_quotadefault_quota:	gid = 65534

myprefix:gid nolimit

  このパラメータは、`prefix>:uid nolimit`と同じように 真理値を取るが、グループquotaであることが違う。注意:グループquotaは Windowsエクスプローラではサポートされていない。

  既定値は`yes`(NO_LIMITが表示される)。使用例は以下の通り:

      vfs objects = default_quotadefault_quota:	uid nolimit = no

複数のパラメータを組み合わせた使用例は以下の通り:

    ...vfs objects = default_quota:quotasettingsquotasettings:	uid nolimit = noquotasettings:	gid = 65534quotasettings:	gid nolimit = no...

### extd_audit

このモジュールは上記の`audit`モジュールとほぼ同じで あるが、監査ログをsyslogと`smbd`のログファイルに送る 事が異なる。このモジュールのlog levelは `smb.conf`ファイル中で設定する。

有効な設定と記録される情報を下記のテーブル中に示す。

Table 23.1. 拡張監査ログの情報内容

ログレベル | ログ内容 - ファイルとディレクトリ操作
--- | ---
0 | ディレクトリの作成、削除、Unlink
1 | ディレクトリのオープン/改名、ファイル名の変更、パーミッション/ACLの変更
2 | ファイルのオープン&クローズ
10 | 最大のデバッグレベル

#### 監査の設定

この監査ツールはたいていの人が容易に認知するよりもより自由度が高い。 有用なログ情報を記録するためのいくつかの方法がある。

- すべてのトランザクションを記録するためにsyslogが使える。 これは、`smb.conf`ファイル中に `syslog = 0`を設定することで無効に出来る。

- xがログレベルである`log level = 0 vfs:x` を`smb.conf`ファイル中に設定することによりすべてのロードされた VFSモジュールに対して既定値のログファイル (`log.smbd`)をログの出力として使える。これは、 ログレベルで指定された、VFSモジュールの動作のすべてのログが 有効になっているが、通常のログは無効にする。

- ユーザ単位、クライアントマシン単位などで詳細なログを取れる。 これは、`log file`の特別な設定方法と 上記を一緒にすることを要求する。

  ユーザ単位とマシン単位の詳細なログの例は、 log file = /var/log/samba/%U.%m.log のようにして行う。

監査情報は、しばしば長い期間保存する必要はある。ログファイルがローテート されないように、`smb.conf`ファイル中でmax log size = 0 を設定するのは必須である。

### fake_perms

このモジュールは、(UNIX配下のSambaサーバで)移動プロファイルのファイルと ディレクトリを読み込み専用に設定することができるようにするために作成 された。 このモジュールは、プロファイル共有にインストールされている場合、 プロファイルのファイルとディレクトリが書き込み可能であると、クライアントに 通知する。これにより、クライアントがログアウトまたはシャットダウンした 時に、ファイルを上書きしなくなるが、クライアントのニーズは充足する。

### recycle

ゴミ箱と同様のモジュールである。 使用すると、unlinkシステムコールを 横取り、ファイルを削除する代わりにゴミ箱ディレクトリに移動する。 これはWindowsコンピュータにおけるゴミ箱の機能と 同じである。

ごみ箱は、Windows エクスプローラー のネットワークファイルシステム(共有)のビューにも、マッピングされたドライブの いずれのビューにも表示されない。その代わりに、`.recycle` というディレクトリが、初めてファイルを削除したときと `recycle:repository`が設定されていないときに自動的に 作成される。もし、`recycle:repository`が設定されている 場合、作成されるディレクトリは`recycle:repository`に 依存する。ユーザはごみ箱からファイルを取り戻すことが出来る。もしも、 `recycle:keeptree`が指定されていた場合、 削除されたファイルは、ファイルが削除された元の場所と同一のパスから、 見つけることができる。

`recycle`がサポートするオプションは以下の通り:

recycle:repository

  削除されたファイルの移動先であるディレクトリのパス。

recycle:directory_mode

  recycleディレクトリに設定したい8進のモードを指定する。 もしも存在しないか、最初にファイルが削除された時、 このモードでrecycleディレクトリが作成される。 もしも、`recycle:subdir_mode`が 設定されていない場合、それらのモードはサブディレクトリ にも適用される。もしも、 `directory_mode`が設定されて いない場合、既定値として0700が使われる。

recycle:subdir_mode

  recycleディレクトリのサブディレクトリに設定したい 8進のモードを指定する。このモードでサブディレクトリ が作成される。もしも、 `recycle:subdir_mode`が 設定されていない場合、サブディレクトリのモードは `directory_mode`のモードで 作成される。

recycle:keeptree

  ディレクトリ構造を維持するか、あるいは削除された ファイルはゴミ箱に別に保存するかを指定する。

recycle:versions

  このオプションを設定すると、同名の二つのファイルが削除 されたとき、 二つとも別のファイルとしてゴミ箱に保存する。 より新しい方の削除ファイルは、 “Copy #x of `filename`” という名称で保存される。

recycle:touch

  ファイルがごみ箱に移されたときに、ファイルのアクセス 日付を変更するかどうかを指定する。

recycle:touch_mtime

  ファイルがごみ箱に移されたときに、ファイルの最終変更 時刻を変更するかどうかを指定する

recycle:maxsize

  このパラメータで指定したバイト数より大きいファイルは、 ごみ箱に入れない。

recycle:exclude

  ごみ箱に入れないで、普通に削除するべきファイルをリストする。

recycle:exclude_dir

  ディレクトリのリストを指定する。これらのディレクトリから ファイルが削除されると、ごみ箱には入れずに、普通に削除する。

recycle:noversions

  recycle:versionsの反対である(*や?のワイルドカードもサポート) する。recycle:versionsが有効な時に 便利である。

### netatalk

netatalkモジュールは、Sambaとnetatalkのファイル共有サービスの共存を やり易くする。

従前のnetatalkモジュールと比較した長所は以下の通り:

- .AppleDouble フォークの作成を気にかけず、ただ同期を取る。

- `smb.conf`中の共有の「隠し(hide)」または「拒否(veto)」 リスト中に.AppleDoubleのアイテムを含まないとき、自動的に追加される。

### shadow_copy

### Warning

これはバックアップでも、アーカイブでも、バージョンコントロールソリューションでもない!

SambaかWindowsサーバでは、shadow_copyはエンドユーザツールとしてのみ設計されて いる。バックアップやアーカイブソリューションの機能強化や置き換えにはならず、 そのように考えてはいけない。更に、バージョンコントロール機能が必要な場合には、 バージョンコントロールシステムを入れること。これは警告である。

shadow_copyモジュールはMicrosoftシャドーコピーサービスに似た機能を提供する。 適切に設定された場合、Sambaの共有上で、Microsoftシャドーコピークライアントが "シャドーコピー"を見えるようにする。シャドーコピークライアントのインストール が必要である。Microsoftシャドーコピークライアントは ここ から入手できる。Windows XPより前のクライアントには追加の要求があることに注意。 この機能はWindows XPより前のバージョンではテストされていない。Microsoftシャドーコピー に関するより詳細な情報は、 Microsoftのサイト を参照のこと。

shadow_copy VFSモジュールはLVM1、LVM2かEVMSのような、ある種の論理ボリューム マネージャ(LVM)でセットアップしたものがベースのファイルシステムを要求する。 LVMの設定はこの文書の範囲外である。しかし、例としてのみ この機能をテストするために行う手順の概要を示す。使いたいとしているLVMの 実装が使用対象に対して準備されているかを確かめる必要がある。十分にテストは されなければならない。

以下は、LVMとEVMSに対するよく使われる情報源である:

- Sistinaの LVM1と LVM2に関する情報

- Enterprise Volume Management System (EVMS)

- The LVM HOWTO (訳注:日本語訳はこちら)

- Daniel Robbinによる、よく書かれた、LVMソースコードとreiserfsを使ったLinux上の2つのパートに分かれたチュートリアル Learning Linux LVM, Part 1 と Learning Linux LWM, Part 2を参照。

#### Shadow Copy のセットアップ

これを書いている時点では、十分なテストは終わっていない。シャドーコピーVFS モジュールを、製品環境では展開していないが、概念の照明としてはより多く、 特定のシナリオでテストした。シナリオはXFSファイルシステムとLVM1を使う Debian Sarge上のSamba-3サーバで改良された。ここで提示されたすべてのコンポーネント に関して、十分な評価をしないでソリューションとして使うことは推奨しない。 すなわち、以下は動作させたまでの基本的な概要である。

1. インストールされたOS. テストを行うにあたっては、 Debian Sarge (すなわちテスト版)をXFSファイルシステム上で使用した。OSの設定は、 この文書の範囲外である。Sambaが動作するOSがあるものと仮定する。

2. Sambaのインストールと設定. この件についてはこのHOWTOのインストールの章 を参照のこと。ドメインコントローラかメンバファイルサーバであることは重要では ないが、Samba 3.0.3かそれ以降のサーバが動作していることを仮定する。

3. LVMのインストールと設定. クライアントに対してシャドーコピーを有効にする前に、シャドーコピーを 作っておく必要がある。これはファイルシステムのスナップショットのような 事を行う事でできる。スナップショットはLVMのような、論理ボリューム マネージャでの一般的な機能であり、まずこれを最初に設定する必要がある。

   以下は、Debianユーザにとっては最も手助けとなる例である。繰り返すが、 これは"testing"または"Sarge"を使ってテストしている。

   - まだ入れていないのであれば、lvm10とdevfsdパッケージをインストールする。 Debianシステム上では、devfsファイル名を要求するdevfsとlvm1が相互に 影響するので警告が出る。 `apt-get update && apt-get install lvm10 devfsd xfsprogs` を実行してこの例のためのトリックを行う。

   - 次にボリュームを作成する。そしてボリュームにパーティションを作成する 必要がある。好みのパーティション作成ツールを使うこと(たとえば、 Linuxのfdisk、cfdiskなど)。パーティションタイプは"Linux LVM"を 表す 0x8eに設定すべきである。この例では/dev/hdb1を使う。

     LVMパーティション(タイプ0x8e)が出来ると、LVMボリュームを作成するための 一連のコマンドを実行出来る。いくつかのディスクとパーティションを 使うことが出来るが、この例では一つのみを使う。 `modprobe lvm-mod`のようにしてカーネルモジュールを ロードしてもよく、また、(`/etc/modules`に追加 することによって)起動時にロードするように、rebootしても良い。

   - `pvcreate /dev/hdb1`で物理ボリュームを作成する。

   - `vgcreate shadowvol /dev/hdb1`でボリュームグループを作成し、/dev/hda1に追加する。

     `vgdisplay`を使ってボリュームグループについての情報を見る事ができる。

   - この時点で`lvcreate -L400M -nsh_test shadowvol`のようにして、論理ボリュームを作成できる。

     これは、shadowvolとして作成したボリュームグループ内に、400MBの、 "sh_test"という論理ボリュームを作成する。すべてがうまくいくと、 `/dev/shadowvol`中にそれらを見る事ができる。

   - この時点でsh_testという論理ボリュームを `mkfs.xfs /dev/shadowvol/sh_test` というコマンドでフォーマットできる準備が出来た。

     選択した任意のファイルシステムで論理ボリュームをフォーマット できるが、ファイルシステムのフリーズ、リサイズや拡張のような LVMの便利な追加機能を使えるようにしておくこと。

     これで、シャドーコピーVFSモジュールを使えるLVMボリュームが 準備できた。

   - 以下のようにしてディレクトリを準備する必要がある。Now we need to prepare the directory with something like

         root#  mkdir -p /data/shadow_share

     あるいは、シャドーコピーが有効になったSamba共有の希望する名前を 指定する。その上で使えるように、パーミッションの設定をきちんと 行う事。もしも、わからなければ、 `chmod 777 /data/shadow_share`を使い、うまく 動いてからパーミッションをきつくする。

   - `mount /dev/shadowvol/sh_test /data/shadow_share` のようにしてLVMボリュームをマウントする。

     システム起動時にこのパーティションをマウントできるよう、 `/etc/fstab`を編集しても良い。

4. シャドーコピーVFSモジュールのインストールと設定. 最後に実際のシャドーコピーVFSモジュールを設定する。シャドーコピーVFS モジュールはSamba 3.0.3以降で有効である。smb.confの設定はとても標準的 である。以下はシャドーコピーVFSモジュールを使う共有定義の例である:

   Example 23.3. シャドーコピーVFSを使う共有

   `[shadow_share]`
   `comment = Shadow Copy Enabled Share`
   `path = /data/shadow_share`
   `vfs objects = shadow_copy`
   `writeable = yes`
   `browseable = yes`

5. スナップショットの作成とシャドーコピーとしての有効化. シャドーコピーを閲覧できる前に、それを作成してマウントする必要がある。 これは、cronジョブとして動作するスクリプトで行うのが最も良い。この特定の 解決方法に、LVMスナップショットを閲覧するのにシャドーコピーVFSモジュールが 使える。これらのスナップショットはモジュールによっては作成されない。また、 モジュールによって有効化もされない。このモジュールは、有効になったスナップ ショットを閲覧する事を、シャドーコピーが有効になったクライアントに対して 行う。

   以下はスナップショットの作成とマウントを行う単純なスクリプトである:

       #!/bin/bash# This is a test, this is only a testSNAPNAME=`date +%Y.%m.%d-%H.%M.%S`xfs_freeze -f /data/shadow_share/lvcreate -L10M -s -n $SNAPNAME /dev/shadowvol/sh_testxfs_freeze -u /data/shadow_share/mkdir /data/shadow_share/@GMT-$SNAPNAMEmount /dev/shadowvol/$SNAPNAME \       /data/shadow_share/@GMT-$SNAPNAME -onouuid,ro

   このスクリプトはリブート時にスナップショットの再マウントのような事は扱わないことに注意。

6. クライアントからのテスト. テストのために、 MicrosoftのWebサイト からシャドーコピークライアントを入手し、インストールする必要がある (訳注:URLは日本語版に差し替え済み)。これはXPクライアントでのみテストして いるので、他のXP以前のクライアントでは結果が異なる可能性がある。一度 XPクライアントにインストール後、指定したファイルかshadow_shareの 空白部分で右クリックすると、"プロパティ"が表示される。何か変更があると、 プロパティウィンドウの中に"以前のバージョン"が表示される。

## 他で入手可能なVFSモジュール

この節では、投稿されてはいるが、SambaCVSツリー(訳注:現在はgit)には何らかの理由(例えば、管理者が独自のCVSツリーを持つ方が管理しやすいなどの理由)で、現行のものには含まれない、各種のVFSモジュールを紹介する。

ここで言及したからと言って、そのモジュールの安定性や機能性の良し悪しを示唆したとは解釈しないこと。

### DatabaseFS

URL: Taylors University DatabaeFS

By Eric Lorimer.

私は、かなり完成された読み込み専用のファイルシステムを実現する VFS モジュールを作成した。これは、異なるデータベースを使用するための、モジュール式あるいは一般的な方式のファイルシステムとしてデータベースからの情報を表示する(元々は、“アーティスト”や“歌詞”といったディレクトリでMP3ファイルを整理するために設計されたものである。これを私は、学生名簿データベースに応用した)。ディレクトリ構造はデータベース自身に保存されており、その表を確認するプログラムが走りますが、それ以外に、データベース構造に関して何らかの推定をすることはしない。

フィードバックを歓迎する。コメント、提案、パッチ、その他何でも送ってほしい。他に何の役にも立たなくても、最低、誰かが仮想ファイルシステムを作成したい場合に役に立つことを願っている。

### vscan

URL: Open Anti-Virus vscan

Samba-vscan は、Sambaが使う共有化のファイルのための、オンアクセスアンチウィルス機能を提供する、コンセプト実証(POC)モジュールである。samba-vscan は、各種のウィルス・スキャナーをサポートし、Rainer Linkがメンテナンスを行っている。

### vscan-clamav

Sambaユーザは何の問題もなくSerNetからのRPMを使っている。OpenLDAP Linuxユーザもとても良い結果が得られるvscanスキャナを使っている。これは全体を通して書き込みのパフォーマンスに影響がある。

以下のような共有セクションはvscan-clamavを設定したい人のための良いガイドである:

    [share]vfs objects = vscan-clamavvscan-clamav: config-file = /etc/samba/vscan-clamav.conf

以下の`vscan-clamav.conf`ファイルの例は、完全に動作可能なものの手助けになるかもしれない:

    VFS: Vscan ClamAV制御ファイル## /etc/samba/vscan-clamav.conf#[samba-vscan]; run-time configuration for vscan-samba using; clamd; all options are set to default values; do not scan files larger than X bytes. If set to 0 (default),; this feature is disable (i.e. all files are scanned)max file size = 10485760; log all file access (yes/no). If set to yes, every access will; be logged. If set to no (default), only access to infected files; will be loggedverbose file logging = no; if set to yes (default), a file will be scanned while openingscan on open = yes; if set to yes, a file will be scanned while closing (default is yes)scan on close = yes; if communication to clamd fails, should access to file denied?; (default: yes)deny access on error = no; if daemon failes with a minor error (corruption, etc.),; should access to file denied?; (default: yes)deny access on minor error = no; send a warning message via Windows Messenger service; when virus is found?; (default: yes)send warning message = yes; what to do with an infected file; quarantine: try to move to quantine directory; delete:     delete infected file; nothing:    do nothing (default)infected file action = quarantine; where to put infected files - you really want to change this!quarantine directory  = /opt/clamav/quarantine; prefix for files in quarantinequarantine prefix = vir-; as Windows tries to open a file multiple time in a (very) short time; of period, samba-vscan use a last recently used file mechanism to avoid; multiple scans of a file. This setting specified the maximum number of; elements of the last recently used file list. (default: 100)max lru files entries = 100; an entry is invalidad after lru file entry lifetime (in seconds).; (Default: 5)lru file entry lifetime = 5; exclude files from being scanned based on the MIME-type! Semi-colon; seperated list (default: empty list). Use this with care!exclude file types =; socket name of clamd (default: /var/run/clamd). Setting will be ignored if; libclamav is usedclamd socket name = /tmp/clamd; limits, if vscan-clamav was build for using the clamav library (libclamav); instead of clamd; maximum number of files in archive (default: 1000)libclamav max files in archive = 1000; maximum archived file size, in bytes (default: 10 MB)libclamav max archived file size = 5242880; maximum recursion level (default: 5)libclamav max recursion level = 5

もちろん、これを動作させるためにclamデーモンを走らせることは必要である。これはClamAVを使うための動作例である。ClamAVの説明には追加の設定例が提供されている。それは、システム内の`/usr/share/doc/`ディレクトリ配下に配置されている。いくつかの例は他の使用可能なウィルススキャナをターゲットにもしている。

Prev | Up | Next
Chapter 22. CUPS印刷環境のサポート | Home | Chapter 24. Winbind: ドメインアカウントの使用