vfs_zfsacl — ZFS ACL samba モジュール
vfs objects = zfsacl
この VFS モジュールは samba(7) システムの一部である。
zfsacl
VFS モジュールは、Samba と ZFS
を適切に統合させるために、Samba にとって必要となる ACL 拡張属性
のすべてを取り扱うモジュールである。
現在 zfsacl vfs モジュールは以下の処理状況において拡張属性を提供する。
ZFS に対しての設定変更が可能なオプションを用いた NFSv4 ACL インターフェース
注意:
このモジュールは posix acl の動作に
従うので、chown を通じてのパーミッション取得を可能にする。
Samba は後の処理タイミングにおいて、このモジュールの chown 処理を
許可しない場合がある。こういった制約を扱う責任は、Samba 側にある
のではなく、Samba が扱っているファイルシステム側にあるからである。
このモジュールは、 acl map full control = acl map full control smb.conf パラメーターを使用する。yes(既定値)に設定すると、 ファイルに対する ACE エントリとして戻ってくる値に FILE_DELETE_CHILD ビットを加える。これはファイルに対するものであってディレクトリではない。 なおその戻り値は、FILE_DELETE、 FILE_DELETE_CHILD を除き、すでにファイル に関するパーミッションはすべて含まれている。これは、Windows アプリケーション が NFSv4 互換 ACL に対応するファイルシステムを使っていて、GENERIC_ALL アクセスを要求するものである場合に、ACCESS_DENIED エラーが返ってしまうこと を防ぐ。
このモジュールはスタック可能である。
Samba 4.0 からすべてのオプションは共有単位のオプションとなった。
ZFS 上の特別な ID(OWNER@ と GROUP@)の置き換えを制御する。 mode を simple とすることを推奨する。このモードでは、 ファイル所有者とグループに対する非継承 ACL エントリのみ 特別な ID にマップされる。
以下のモードはモジュールによって解釈される:
simple(既定値)
- OWNER@ と GROUP@ という特別な ID を、非継承 ACE のみに使う。
special(非推奨)
- OWNER@ と GROUP@ という特別な ID を、すべてのファイル所有者とグループ ACE に対して使う。
このパラメーターは、ZFS の ACL 中にある重複した ACE を、どのように Samba が扱うかを設定する。 ZFS は同じ ID に対して異なったビットに対し、重複した ACE を許可/作成できる。
以下はそれぞれの値における Samba の動作である。
dontcare(既定値)
- 指定された ACE をそのまま設定する
reject (deprecated)
- ACL 設定処理を中断しエラーを返す
ignore (deprecated)
- 重複するする ACE の二番目以降を無視する
merge
- 重複する ACE のフラグとマスクをそれぞれ OR ビット演算して 1 つの ACE にする
このパラメーターはファイルシステムに依存してサポートされる所有者変更(chown)機能を 有効にするか否かを指定する。このパラメーターは、システムに脆弱性が 出来てしまうかもしれないので、注意深く有効にすべきである。
いくつかのファイルシステムでは、所有者の変更権限として、 a) 所有権の付与権限 b) 所有権の取得権限の 2 種類を実装しており、 このうち後者はリスクであると考えられる。
以下は、それぞれの値における Samba の動作である。
yes
- ファイルシステム下でサポートされているなら chown を有効にする
no(既定値)
- chown を無効にする
Prevent users from setting an ACL that lacks NFSv4 special entries NFSv4 の特別なエントリ(owner@, group@, everyone@)がない ACL をユーザが設定できない ようにする。 ZFS は、上位のディレクトリの ACL が 特別なディレクトリを継承していない場合、 新しいファイルに継承された ACL を設定するとき、自動的に前述の3つのエントリを生成する。 このオプションを使うと、ユーザが混乱し、ファイルとディレクトリのパーミッションに 継承された ACL が生成されることにより、予期しない変更が発生することがある。
yes
no (既定値)
ZFS が、NFSv4 の特別なエントリ (owner@, group@, everyone@) を 自動的に追加しないようにする。ZFS は、新しいファイルの継承された ACLを計算するとき、親ディレクトリの ACL に継承された特別なエントリが 欠けている場合、自動的にこの3つのエントリを生成する。これにより、 継承された ACL が生成されるとき、ユーザは混乱した結果を得たり、 ファイルとディレクトリのパーミッションで予期しない変更を受け取る 可能性がある。この動作を抑制するために、何のパーミッションも許可しない everyone@ の継承を設定し、ファイルのセキュリティディスクリプタに エントリを追加しないようにする。
yes (既定値)
no
ベースとなるファイルシステムの ZFS ACLが、継承されたアクセスコントロールエントリを 含んでいない時に有効にした場合、SMB クライアントに返される セキュリティディスクリプタに SEC_DESC_DACL_PROTECTED フラグを設定する。 これは、ディレクトリの継承を無効にした Windows クライアントの動作を修正する。
以下は、異なった値に対する Samba の動作である :
yes
- SEC_DESC_DACL_PROTECTED のマッピングを有効にする。
no (既定値)
ZFS マウントは以下のようにして Samba 経由でエクスポートされる。
[samba_zfs_share]
vfs objects = zfsacl
path = /test/zfs_mount
nfs4: mode = simple
nfs4: acedup = merge