目次
Samba-3から、スタッカブルVFS(バーチャルファイルシステム)モジュールがサポートされる。 SambaはUNIXファイルシステムへのアクセスリクエストの一つ一つを、ロードされた VFSモジュールに渡す。この章は、Sambaのソースに附属のモジュールについて説明すると同時に、 一部の外部モジュールについても言及する。
異なるシステムでは異なる方法で共用ライブラリーをコンパイルしリンクするので、これらの モジュールが、プラットフォームディストリビューションのバイナリSambaパッケージと共に 供給されない場合、モジュールをコンパイルするのが困難になるかもしれない。
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 virus scanner module and a recycle bin module. It is wise to put the virus scanner module as the first one so that it 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 サーバー上で格納される既定値の 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_quota default_quota: uid = 65534
上記の例ではmyprefix
が省略され、そのため、既定値の
プレフィックスはモジュールの名前になる。myprefix
パラメーターが指定されると、上記は以下のように書き換えられる:
vfs objects = default_quota:myprefix myprefix: uid = 65534
既定値のquota値がユーザーのレコードとしても表示される場合か、
NO_LIMIT
が、prefix:uid
パラメーターに
よって指定されたユーザーとしてWindowsクライアントに表示される場合、この
パラメーターは論理値となる。
既定値はyes
である(NO_LIMITが表示される)。使用例は以下の通り:
vfs objects = default_quota:myprefix myprefix: uid nolimit = no
このパラメーターはprefix>:uid
と同じように整数値を引数と
して取るが、グループquotaであるところが違う。注意:グループquotaはWindows
エクスプローラーではサポートされていない。
既定値は0である(rootグループ)。使用例は以下の通り:
vfs objects = default_quota default_quota: gid = 65534
このパラメーターは、prefix>:uid nolimit
と同じように
真理値を取るが、グループquotaであることが違う。注意:グループquotaは
Windowsエクスプローラーではサポートされていない。
既定値はyes
(NO_LIMITが表示される)。使用例は以下の通り:
vfs objects = default_quota default_quota: uid nolimit = no
複数のパラメーターを組み合わせた使用例は以下の通り:
... vfs objects = default_quota:quotasettings quotasettings: uid nolimit = no quotasettings: gid = 65534 quotasettings: gid nolimit = no ...
このモジュールは上記のaudit
モジュールとほぼ同じで
あるが、監査ログをsyslogとsmbd
のログファイルに送る
事が異なる。このモジュールのlog levelは
smb.conf
ファイル中で設定する。
有効な設定と記録される情報を下記のテーブル中に示す。
表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 サーバーで改良された。ここで提示されたすべてのコンポーネント に関して、十分な評価をしないでソリューションとして使うことは推奨しない。 すなわち、以下は動作させたまでの基本的な概要である。
インストールされた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 test SNAPNAME=`date +%Y.%m.%d-%H.%M.%S` xfs_freeze -f /data/shadow_share/ lvcreate -L10M -s -n $SNAPNAME /dev/shadowvol/sh_test xfs_freeze -u /data/shadow_share/ mkdir /data/shadow_share/@GMT-$SNAPNAME mount /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-clamav vscan-clamav: config-file = /etc/samba/vscan-clamav.conf
以下のvscan-clamav.conf
ファイルの例は、完全に動作可能なものの
手助けになるかもしれない:
<title>VFS: Vscan ClamAV制御ファイル</title>
#
# /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 logged
verbose file logging = no
; if set to yes (default), a file will be scanned while opening
scan 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 quarantine
quarantine 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 used
clamd 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/
ディレクトリ配下に配置されている。いくつかの例は
他の使用可能なウィルススキャナーをターゲットにもしている。