Table of Contents
Samba-3から、スタッカブルVFS(バーチャルファイルシステム)モジュールがサポートされる。SambaはUNIXファイルシステムへのアクセスリクエストの一つ一つを、ロードされたVFSモジュールに渡す。この章は、Sambaのソースに附属のモジュールについて説明すると同時に、一部の外部モジュールについても言及する。
異なるシステムでは異なる方法で共用ライブラリーをコンパイルしリンクするので、これらのモジュールが、プラットフォームディストリビューションのバイナリSambaパッケージと共に供給されない場合、モジュールをコンパイルするのが困難になるかもしれない。これらのモジュールは、GNU/Linux及びIRIXに関してテスト済みである。
VFS モジュールを使用するには、以下の例に類似した共有を作成すること。重要なパラメータは、一つ以上のVFSモジュールを名前順に一覧表示できるvfs objectsパラメータである。例えば、ファイルへのアクセスをすべてログに取り、削除されたファイルをゴミ箱に入れるには、VFSモジュールを使うsmb.confの例を参照のこと:
モジュールは指定された順に使用される。例えば、ウィルススキャナモジュールとごみ箱モジュールを両方使用したいとする。この場合、ファイルに関して他のアクションが取られる前に、最初にウィルスを検知するよう、ウィルススキャナモジュールを最初のモジュールとし、このモジュールが最初に動くようにすべきである。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の例のような設定で可能となる。
syslog機能へのファイルアクセスを監査するシンプルなモジュールである。 以下の操作のログが取られる:
share
connect/disconnect
directory opens/create/remove
file open/close/rename/unlink/chmod
このモジュールは、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モジュールに対して指定することが出来るパラメータのエントリは以下の通り:
既定値のユーザquotaを格納するために使われるquotaレコードのためのuidを 指定する整数値。
既定値は0(ルートユーザ)。使用例は以下の通り:
vfs objects = default_quotadefault_quota: uid = 65534
上記の例ではmyprefix
が省略され、そのため、既定値の プレフィックスはモジュールの名前になる。myprefix
パラメータが指定されると、上記は以下のように書き換えられる:
vfs objects = default_quota:myprefixmyprefix: uid = 65534
既定値のquota値がユーザのレコードとしても表示される場合か、 NO_LIMIT
が、prefix:uid
パラメータに よって指定されたユーザとしてWindowsクライアントに表示される場合、この パラメータは論理値となる。
既定値はyes
である(NO_LIMITが表示される)。使用例は以下の通り:
vfs objects = default_quota:myprefixmyprefix: uid nolimit = no
このパラメータはprefix>:uid
と同じように整数値を引数と して取るが、グループquotaであるところが違う。注意:グループquotaはWindows エクスプローラではサポートされていない。
既定値は0である(rootグループ)。使用例は以下の通り:
vfs objects = default_quotadefault_quota: gid = 65534
このパラメータは、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...
このモジュールは上記の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 を設定するのは必須である。
このモジュールは、(UNIX配下のSambaサーバで)移動プロファイルのファイルと ディレクトリを読み込み専用に設定することができるようにするために作成 された。 このモジュールは、プロファイル共有にインストールされている場合、 プロファイルのファイルとディレクトリが書き込み可能であると、クライアントに 通知する。これにより、クライアントがログアウトまたはシャットダウンした 時に、ファイルを上書きしなくなるが、クライアントのニーズは充足する。
ゴミ箱と同様のモジュールである。 使用すると、unlinkシステムコールを 横取り、ファイルを削除する代わりにゴミ箱ディレクトリに移動する。 これはWindowsコンピュータにおけるゴミ箱の機能と 同じである。
ごみ箱は、Windows エクスプローラー のネットワークファイルシステム(共有)のビューにも、マッピングされたドライブの いずれのビューにも表示されない。その代わりに、.recycle
というディレクトリが、初めてファイルを削除したときと recycle:repository
が設定されていないときに自動的に 作成される。もし、recycle:repository
が設定されている 場合、作成されるディレクトリはrecycle:repository
に 依存する。ユーザはごみ箱からファイルを取り戻すことが出来る。もしも、 recycle:keeptree
が指定されていた場合、 削除されたファイルは、ファイルが削除された元の場所と同一のパスから、 見つけることができる。
recycle
がサポートするオプションは以下の通り:
recycleディレクトリに設定したい8進のモードを指定する。 もしも存在しないか、最初にファイルが削除された時、 このモードでrecycleディレクトリが作成される。 もしも、recycle:subdir_mode
が 設定されていない場合、それらのモードはサブディレクトリ にも適用される。もしも、 directory_mode
が設定されて いない場合、既定値として0700が使われる。
recycleディレクトリのサブディレクトリに設定したい 8進のモードを指定する。このモードでサブディレクトリ が作成される。もしも、 recycle:subdir_mode
が 設定されていない場合、サブディレクトリのモードは directory_mode
のモードで 作成される。
このオプションを設定すると、同名の二つのファイルが削除 されたとき、 二つとも別のファイルとしてゴミ箱に保存する。 より新しい方の削除ファイルは、 “Copy #x of filename
” という名称で保存される。
recycle:versionsの反対である(*や?のワイルドカードもサポート) する。recycle:versionsが有効な時に 便利である。
netatalkモジュールは、Sambaとnetatalkのファイル共有サービスの共存を やり易くする。
従前のnetatalkモジュールと比較した長所は以下の通り:
.AppleDouble フォークの作成を気にかけず、ただ同期を取る。
smb.conf
中の共有の「隠し(hide)」または「拒否(veto)」 リスト中に.AppleDoubleのアイテムを含まないとき、自動的に追加される。
これはバックアップでも、アーカイブでも、バージョンコントロールソリューションでもない!
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に対するよく使われる情報源である:
The LVM HOWTO (訳注:日本語訳はこちら)
Daniel Robbinによる、よく書かれた、LVMソースコードとreiserfsを使ったLinux上の2つのパートに分かれたチュートリアル Learning Linux LVM, Part 1 と Learning Linux LWM, Part 2を参照。
これを書いている時点では、十分なテストは終わっていない。シャドーコピーVFS モジュールを、製品環境では展開していないが、概念の照明としてはより多く、 特定のシナリオでテストした。シナリオはXFSファイルシステムとLVM1を使う Debian Sarge上のSamba-3サーバで改良された。ここで提示されたすべてのコンポーネント に関して、十分な評価をしないでソリューションとして使うことは推奨しない。 すなわち、以下は動作させたまでの基本的な概要である。
インストールされたOS. テストを行うにあたっては、 Debian Sarge (すなわちテスト版)をXFSファイルシステム上で使用した。OSの設定は、 この文書の範囲外である。Sambaが動作するOSがあるものと仮定する。
Sambaのインストールと設定. この件についてはこのHOWTOのインストールの章 を参照のこと。ドメインコントローラかメンバファイルサーバであることは重要では ないが、Samba 3.0.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しても良い。
この時点でlvcreate -L400M -nsh_test shadowvol
のようにして、論理ボリュームを作成できる。
これは、shadowvolとして作成したボリュームグループ内に、400MBの、 "sh_test"という論理ボリュームを作成する。すべてがうまくいくと、 /dev/shadowvol
中にそれらを見る事ができる。
この時点でsh_testという論理ボリュームを mkfs.xfs /dev/shadowvol/sh_test
というコマンドでフォーマットできる準備が出来た。
選択した任意のファイルシステムで論理ボリュームをフォーマット できるが、ファイルシステムのフリーズ、リサイズや拡張のような 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ボリュームをマウントする。
シャドーコピーVFSモジュールのインストールと設定. 最後に実際のシャドーコピーVFSモジュールを設定する。シャドーコピーVFS モジュールはSamba 3.0.3以降で有効である。smb.confの設定はとても標準的 である。以下はシャドーコピーVFSモジュールを使う共有定義の例である:
スナップショットの作成とシャドーコピーとしての有効化. シャドーコピーを閲覧できる前に、それを作成してマウントする必要がある。 これは、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
このスクリプトはリブート時にスナップショットの再マウントのような事は扱わないことに注意。
クライアントからのテスト. テストのために、 MicrosoftのWebサイト からシャドーコピークライアントを入手し、インストールする必要がある (訳注:URLは日本語版に差し替え済み)。これはXPクライアントでのみテストして いるので、他のXP以前のクライアントでは結果が異なる可能性がある。一度 XPクライアントにインストール後、指定したファイルかshadow_shareの 空白部分で右クリックすると、"プロパティ"が表示される。何か変更があると、 プロパティウィンドウの中に"以前のバージョン"が表示される。
この節では、投稿されてはいるが、SambaCVSツリー(訳注:現在はgit)には何らかの理由(例えば、管理者が独自のCVSツリーを持つ方が管理しやすいなどの理由)で、現行のものには含まれない、各種のVFSモジュールを紹介する。
ここで言及したからと言って、そのモジュールの安定性や機能性の良し悪しを示唆したとは解釈しないこと。
URL: Taylors University DatabaeFS
私は、かなり完成された読み込み専用のファイルシステムを実現する VFS モジュールを作成した。これは、異なるデータベースを使用するための、モジュール式あるいは一般的な方式のファイルシステムとしてデータベースからの情報を表示する(元々は、“アーティスト”や“歌詞”といったディレクトリでMP3ファイルを整理するために設計されたものである。これを私は、学生名簿データベースに応用した)。ディレクトリ構造はデータベース自身に保存されており、その表を確認するプログラムが走りますが、それ以外に、データベース構造に関して何らかの推定をすることはしない。
フィードバックを歓迎する。コメント、提案、パッチ、その他何でも送ってほしい。他に何の役にも立たなくても、最低、誰かが仮想ファイルシステムを作成したい場合に役に立つことを願っている。
Samba-vscan は、Sambaが使う共有化のファイルのための、オンアクセスアンチウィルス機能を提供する、コンセプト実証(POC)モジュールである。samba-vscan は、各種のウィルス・スキャナーをサポートし、Rainer Linkがメンテナンスを行っている。
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/
ディレクトリ配下に配置されている。いくつかの例は他の使用可能なウィルススキャナをターゲットにもしている。