Windows 7「サーバー」から CIFS 経由で共有されているディレクトリがあります。ドメインはありません。単純なワークグループのみです。
私のクライアントは、サーバー上の「標準ユーザー」(「管理者」ではない) アカウントを使用して、LAN 経由でこのディレクトリにアクセスします。クライアントはこの共有を「個人用ストレージ」として使用するため、共有内のすべてのものに対して完全な作成/編集/削除権限が必要です。
問題は、サーバー側でそこにディレクトリを作成することです。この単一のアイテムは、いかなる方法でも編集可能ではなく、読み取り/閲覧/リスト表示のみ可能である必要があります。(ディレクトリ自体に注目し、その中のファイルには注目しません (ファイルが存在しない場合もあります))。
私は NTFS アクセス許可を操作しています。削除してはいけないディレクトリから継承を削除したので、そのアクセス許可を操作できます。
クライアント アカウントを削除しましたが、この段階では、SYSTEM、Administrators、および私だけが権限を持って存在しています。この段階では、クライアントはフォルダーを削除したり開いたりすることはできません。
「フル コントロール」を拒否するルールを追加しても、何も変わりません (予想どおり)。
しかしそのルールを変更して「フォルダーの一覧表示/データの読み取り」のみを許可し、他のすべてを拒否のままにしておくと、ユーザーはフォルダーを削除できます。!?!?!?
どうしてそんなことが可能なのでしょうか?何を誤解しているのでしょうか?
注: ディレクトリではなく単一のファイルで再確認しましたが、同じ問題が発生しました。
これは Icacls の出力です:
NT AUTHORITY\SYSTEM:(OI)(CI)(F) muletto\Zane:(OI)(CI)(F) BUILTIN\Administrators:(OI)(CI)(F) muletto\myNetworkUser:(OI)(CI)(RX) を削除しないでください
1 個のファイルを正常に処理しました。0 個のファイルを処理できませんでした。
答え1
わかりました。親ディレクトリへの子の削除権限があれば、ユーザーはそのファイル/ディレクトリへの書き込み権限がなくてもファイルを削除(または空のディレクトリを削除)できることを確認できます。以前これを知っていたとしても忘れていましたが、これは文書化された動作です。たとえば、KB101651。
問題を解決するには、(少なくとも) 3 つの方法があります。
ユーザーに、親ディレクトリへのフル コントロール アクセスではなく変更アクセスを付与します。フル コントロールと変更の唯一の違いは、子の削除権限 (ユーザーが子オブジェクトを削除できるようにする) と DAC の書き込み権限 (ユーザーが所有者でなくてもオブジェクトのアクセス許可を変更できるようにする) です。
共有のアクセス許可を「完全」ではなく「変更」に設定します。これにより、同じ効果が得られますが、ネットワーク ユーザーにのみ影響し、対話型ユーザーには影響しません。副作用の 1 つは、ユーザーが自分のファイルであってもアクセス許可を変更できないことです。
子ファイル/ディレクトリに読み取り専用フラグを設定します。この点についてはドキュメントでは明確に説明されていませんが、私のテスト (Windows 7) では、Delete Child では読み取り専用フラグが設定されているファイルやディレクトリを削除できないことがわかりました。読み取り専用フラグをリセットすることもできません。エクスプローラー GUI では、読み取り専用フラグはディレクトリには影響を及ぼさないと示されており、実際にはディレクトリが削除されないようにしています (新しいファイルがディレクトリに書き込まれるのを防ぐことはできません)。 補遺:読み取り専用フラグはディレクトリの移動を妨げるものではありません。
その他の注意事項:
親ディレクトリに対する子の削除権限を明示的に拒否することもできますが、ユーザーが親ディレクトリに対してフル コントロールを持っている場合は、拒否エントリを削除できます。
親ディレクトリに子ディレクトリの削除権限がある場合、ユーザーは子ディレクトリからファイルを削除したり、子ディレクトリが空でない限り子ディレクトリを削除したりすることはできません。 補遺:ユーザーは子ディレクトリを移動できます。