1

安全なディレクトリにアクセスする必要があるwinformsアプリがあります。偽装を使用しており、フォルダーにアクセスするために WindowsIdentity を作成しています。

私の問題は、ディレクトリのセキュリティをテストするための単体テストを作成することです。UT を実行している現在のユーザーではない 1 人のユーザーのみに保護されたディレクトリを作成するコードを書きたいと思います (そうしないと、テストの価値がなくなります)。

特定のユーザーにアクセス許可を追加する方法は知っていますが、管理者を含む残りのユーザーを拒否するにはどうすればよいですか? (UT を実行しているユーザーが管理者の場合) (これは賢明なことでしょうか?)

DirectoryInfo directoryInfo = new DirectoryInfo(path);
DirectorySecurity directorySecurity = directoryInfo.GetAccessControl();

directorySecurity.AddAccessRule(new FileSystemAccessRule("Domain\SecuredUser",
                    FileSystemRights.FullControl, 
                    InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                    PropagationFlags.InheritOnly,                         
                    AccessControlType.Allow));

directorySecurity.RemoveAccessRule(new FileSystemAccessRule("??",   
                    FileSystemRights.FullControl, 
                    InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                    PropagationFlags.InheritOnly,  
                    AccessControlType.Deny));

directoryInfo.SetAccessControl(directorySecurity);

これは機能していません。誰を否定したらいいのかわからない。Domain\Admins、Domain\Administrators、私... 誰も拒否されておらず、フォルダーのセキュリティを確認すると、SecuredUser はフォルダーにアクセスできますが、FullControl を指定したにもかかわらず、アクセス許可が確認されません。

基本的に私はこれをコーディングしたい:

<authorization>
 <allow users ="Domain\User" />
 <deny users="*" /> 
</authorization>

権限のない弱いユーザーで UT run を偽装しようと考えていたのですが、Impersonate -> Run UT -> Impersonate -> Access folder という結果になり、これが正しい設計かどうかわかりません。

助けていただければ幸いです、ありがとうございます。

4

3 に答える 3

2

これについてはよくわかりませんが、許可よりも拒否が優先されると思います。そのため、(グループ "Everyone" を使用して) 全員のアクセス許可を拒否しようとすると、アクセスを許可しようとした特別なユーザーのアクセス許可が上書きされる可能性があります。
既存のすべてのアクセス権を削除してから、特別なユーザー アクセスを許可する単一のルールを追加する必要があります。

于 2010-06-08T04:55:17.047 に答える
1

http://msdn.microsoft.com/en-us/library/system.io.directoryinfo.setaccesscontrol%28v=VS.100%29.aspxからmsdnサンプルコードをテストしたところ、同じ問題が発生しています。サンプルプログラムを段階的にデバッグすると、追加されるアクセス許可は、プログラムで指定されている「readdata」ではなく、「特別な許可」のみになります。
更新:Windows 7では、[ファイル]->[プロパティ]->[セキュリティ]->[詳細設定]->[有効なアクセス許可]で、アクセス許可がアドバタイズされたとおりに表示されます。「特別な権限」のチェックマークは実際には誤解を招くものです。
Update2:5つの引数のコンストラクターを使用し、フラグを「InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit」および「PropagationFlags.InheritOnly」に設定すると、アクセスは追加されたとおりにセキュリティタブに表示されます。権限が各サブディレクトリの下で継承および伝播される場合にのみ、[セキュリティ]タブのアクセスの長いリストがチェックされているようです。

于 2010-06-07T18:05:59.593 に答える
0

アカウント グループ「{domainName}\Domain Users」を検討しましたか? このグループへのアクセスを拒否すると、指定されたドメイン内のすべてのユーザーへのアクセスが拒否されます。

于 2011-07-17T04:07:47.787 に答える