Windowsクライアントで正しく機能するNFSv4ACLを使用するSolarisカーネルモジュールを使用して、OmniOSサーバーでSMB/CIFSファイル共有を設定しています。
次の目標で共有ディレクトリを作成したいと思います。ユーザー(たとえば、alice
)はファイルを作成および変更できる必要がありますが、ファイルは削除できません。また、サブディレクトリの作成を防止する必要があります。読み取りアクセスを許可する必要があります。
基本的に機能する次のACLを試しました。
/usr/bin/chmod A=\
user:root:rwxpdDaARWcCos:fd-----:allow,\ # root has full access
user:alice:rwx---a-R-c--s:-------:allow,\ # dir: create files, read everything
user:alice:rwxp--aARWc--s:f-i----:allow \ # files: wpAW is needed for full file write access, everything is only inherited to files
/pool/share
ただし、alice
がWindowsエクスプローラーで新しく追加されたファイルのセキュリティタブを表示すると、彼女は自分自身にフルアクセス権を付与し、後でファイルを削除できます。 Co
権限がありません。
この動作を説明する方法は?また、ACLを変更できないように変更するにはどうすればよいですか?
編集:ls
の出力は正常のようです:
# /usr/bin/ls -v
total 1
-rwx------+ 1 alice staff 3 2016-03-21 test.txt
0:user:root:read_data/write_data/append_data/read_xattr/write_xattr
/execute/delete_child/read_attributes/write_attributes/delete
/read_acl/write_acl/write_owner/synchronize:inherited:allow
1:user:alice:read_data/write_data/append_data/read_xattr
/write_xattr/execute/read_attributes/write_attributes/read_acl
/synchronize:inherited:allow
# /usr/bin/ls -V
total 1
-rwx------+ 1 alice staff 3 2016-03-21 test.txt
user:root:rwxpdDaARWcCos:------I:allow
user:alice:rwxp--aARWc--s:------I:allow
ディレクトリ自体のls
の出力:
# /usr/bin/ls -Vd
drwx------+ 3 root root 4 2016-03-21 .
user:root:rwxpdDaARWcCos:fd-----:allow
user:alice:rwx---a-R-c--s:-------:allow
user:alice:rwxp--aARWc--s:f-i----:allow
# /usr/bin/ls -vd
drwx------+ 3 root root 4 2016-03-21 .
0:user:root:list_directory/read_data/add_file/write_data
/add_subdirectory/append_data/read_xattr/write_xattr/execute
/delete_child/read_attributes/write_attributes/delete/read_acl
/write_acl/write_owner/synchronize:file_inherit/dir_inherit:allow
1:user:alice:list_directory/read_data/add_file/write_data
/read_xattr/execute/read_attributes/read_acl/synchronize:allow
2:user:alice:list_directory/read_data/add_file/write_data
/add_subdirectory/append_data/read_xattr/write_xattr/execute
/read_attributes/write_attributes/read_acl/synchronize
:file_inherit/inherit_only:allow
共有のファイルシステムはZFSです。最も興味深いデフォルト以外のプロパティは次のとおりです。
NAME PROPERTY VALUE SOURCE
pool/share type filesystem -
pool/share compression lz4 inherited from pool
pool/share atime off local
pool/share aclmode restricted local
pool/share aclinherit passthrough local
pool/share version 5 -
pool/share utf8only on -
pool/share normalization formD -
pool/share casesensitivity insensitive -
pool/share nbmand on local
pool/share sharesmb name=testshare local
CIFS共有アクセス許可は、すべてのユーザーにフルアクセスを許可するように設定されているため、ファイルアクセス許可のみを適用する必要があります。
更新:
このスレッド 私の問題と非常によく似ていますが、すべての人に対して/pool/share/.zfs/shares/testshare
のACLをmodify_set
に減らす(またはユーザー固有の削除権限を拒否する)解決策は機能していないようです。私の場合、理由はわかりません。
この問題を1週間無視した後、突然機能します...原因はわかりませんが、機能します... このブログ からの提案を試しましたが、変更しました権利としてAW
を含める。次に、もう一度テストしましたが、今回は古い拒否ルール(新しいルールを完全に上書きする)でのみ機能しました。最後に、私自身の質問の最初の設定を使用しましたが、これは機能しませんでしたが、現在は機能しました。
さらにテストを行った結果、SMBサービスが以前に再起動されておらず、共有ACLが正しく認識されなかったことが原因だと思います。古い(間違った)復元方法は、ACLを変更することだけでした。動作。
したがって、将来の参照のために、解決策はファイル自体に通常のアクセス許可を定義し、共有レベルでCo
アクセス許可を許可しないことです。
次のACLルールをディレクトリと(継承された)すべての新しく作成されたファイルに適用します。
/usr/bin/chmod A=\
user:root:rwxpdDaARWcCos:fd-----:allow,\ # root has full access
user:alice:rwx---a-R-c--s:-------:allow,\ # dir: create files, read everything
user:alice:rwxp--aARWc--s:f-i----:allow \ # files: wpAW is needed for full file write access, everything is only inherited to files
/pool/share
次のACLルールをZFSデータセットの非表示の共有ディレクトリに適用します(これは、所有者がACLを変更できないようにするために必要です。詳細については、@ embeddedの回答とリンクされたサーバー障害の投稿を参照してください)。
/usr/bin/chmod A=\
user:root:full_set:-------:allow,\ # root has full access
everyone@:modify_set:-------:allow \ # anyone else cannot modify permissions
/pool/share/.zfs/shares/testshare
SMBサーバーを再起動します(変更された共有ACLを更新する必要があります。 このスレッド を参照):
svcadm restart svc:/network/smb/server:default # restart service
svcs -xv svc:/network/smb/server:default # check if the startup date has changed
これで、新しいファイルを作成および書き込みできますが、削除することはできません。また、Windowsユーザーは自分自身に追加の権限を与えることもできません。このソリューションは私の状況ではうまく機能しますが、2つの小さな欠点があります。
alice
はテキストドキュメントの文字や行を上書きできます。これは、使用するアプリケーションに追加と書き込みの権限が必要であり、「初期書き込みのみ」などをチェックするACLがないためだと思います。ユーザー、グループ、全員の些細なACLを削除すると、私見ではすべてが本当に混乱します。考慮事項:
したがって、私のアプローチは、必要に応じて簡単なACLを変更し(拒否モードを使用)、すべての特別なユースケースに重要なACLを追加することです。これも覚えておいてください:
OmniOSが何であるかわからないが、これらのドキュメントはNFSACLを理解するのに役立ちました。 SolarisとZFSを使用しています https://docs.Oracle.com/cd/E53394_01/html/E54801/ftyxi.html#scrolltoc