web-dev-qa-db-ja.com

NTFS:それ以外の場合は「個人用」フォルダでのディレクトリ削除の防止/拒否

Windows7の「サーバー」からCIFS経由で共有されているディレクトリがあります。ドメインなし:単純なワークグループ。

私のクライアントは、サーバー上の「標準ユーザー」(「管理者」ではない)アカウントを介してLAN経由でこのディレクトリにアクセスします。彼らはこの共有を「個人用ストレージ」に使用するため、その中のすべてを完全に作成/編集/削除する必要があります。

問題は次のとおりです。サーバー側でディレクトリを作成します。 この単一のアイテムは、いかなる方法でも編集可能であってはならず、読み取り可能/閲覧可能/一覧表示可能である必要があります(内のファイルではなく、ディレクトリ自体に焦点を当てましょう(時々ありません))。

NTFSアクセス許可を使用しています。must-not-delete-directoryからinheritを削除したので、そのアクセス許可を操作できます。

クライアントアカウントを削除しましたが、この段階では、システム、管理者、および私だけがアクセス許可を持っています。この段階では、クライアントはフォルダを削除したり開いたりすることはできません。

拒否「フルコントロール」ルールを追加しても、何も変更されません(予想どおり)。

しかしそのルールを変更し、「フォルダの一覧表示/データの読み取り」のみを許可し、他のすべてを拒否したままにすると...ユーザーはフォルダを削除できます!?!?!?

そんなことがあるものか?私は何を誤解していますか?

注:ディレクトリではなく、単一のファイルでダブルチェックしました:同じ問題です!

これはIcaclsの出力です:

NT AUTHORITY\SYSTEM:(OI)(CI)(F)muletto\Zane:(OI)(CI)(F)BUILTIN\Administrators:(OI)(CI)(F)muletto\myNetworkUser:(OI)を削除しないでください(CI)(RX)

1つのファイルを正常に処理しました。 0ファイルの処理に失敗しました

OK。親ディレクトリへの子の削除アクセス権がある場合、ユーザーがそのファイル/ディレクトリへの書き込みアクセス権を持たなくてもファイルを削除(または空のディレクトリを削除)できることを確認できます。以前にこれを知っていた場合、私はそれを忘れていましたが、それは文書化された動作です。たとえば、 KB101651 を参照してください。

問題を解決するには(少なくとも)3つの方法があります。

  • 親ディレクトリへのフルコントロールアクセスではなく、変更アクセスをユーザーに付与します。フルコントロールと変更の唯一の違いは、子の削除権限(ユーザーが子オブジェクトを削除できるようにする)とDACの書き込み権限(ユーザーが所有者でなくてもオブジェクトのアクセス許可を変更できるようにする)です。

  • 共有の権限を[完全]ではなく[変更]に設定します。これは同じ効果があるはずですが、インタラクティブユーザーではなく、ネットワークユーザーにのみ影響します。副作用の1つは、ユーザーが自分のファイルであってもアクセス許可を変更できないことです。

  • 子ファイル/ディレクトリに読み取り専用フラグを設定します。この点に関するドキュメントは不明確ですが、私のテスト(Windows 7)では、子の削除では、読み取り専用フラグが設定されたファイルの削除やディレクトリの削除が許可されていないことが示されています。また、読み取り専用フラグをリセットすることもできません。 Explorer GUIは、読み取り専用フラグがディレクトリに影響を与えないことを意味していることに注意してください。実際、ディレクトリが削除されるのを防ぎます。 (新しいファイルがディレクトリに書き込まれるのを妨げることはありません。)補遺:読み取り-フラグのみは、ディレクトリの移動を妨げません。

その他の注意事項:

  • 親ディレクトリに対する子の削除権を明示的に拒否することもできますが、ユーザーが親ディレクトリに対するフルコントロールを持っている場合は、拒否エントリを削除できます。

  • 親ディレクトリに[子の削除]権限があると、ユーザーは子ディレクトリからファイルを削除したり、空でない限り子ディレクトリを削除したりできません。 補遺:ユーザーが子ディレクトリを移動できるようにします。

2
Harry Johnston