设置目录安全性以允许用户并拒绝所有

时间:2010-06-07 14:57:08

标签: c# .net impersonation folder-security

我有winforms app,我需要访问安全目录。 我正在使用模拟并创建WindowsIdentity来访问该文件夹。

我的问题是编写单元测试来测试目录安全性;我想写一个代码,创建一个只保护一个用户的目录,这不是当前运行UT的用户(否则测试将毫无价值)。

我知道如何为某个用户添加权限,但我怎么能否认其余的,包括管理员? (如果运行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,me ...没有人被拒绝,当我检查文件夹的安全性时 - SecuredUser可以访问该文件夹,但是即使我指定了FullControl,也不会检查权限。

基本上我想编写代码:

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

我在考虑使用没有权限的弱用户模拟UT运行,但这会导致:Impersonate - &gt;运行UT - &gt;模仿 - &gt;访问文件夹,我不确定这是否是正确的设计。

非常感谢帮助,谢谢。

3 个答案:

答案 0 :(得分:2)

我不确定这一点,但我认为deny优先于allow。因此,如果您尝试拒绝所有人的权限(使用“Everyone”组),它可能会覆盖您尝试授予访问权限的特殊用户的权限。
应该做的是删除所有现有的访问权限,然后添加允许特殊用户访问的单个规则。

答案 1 :(得分:1)

我刚刚测试了来自http://msdn.microsoft.com/en-us/library/system.io.directoryinfo.setaccesscontrol%28v=VS.100%29.aspx的msdn示例代码,我遇到了同样的问题。当我逐步调试示例程序时,添加的访问权限只是“特殊权限”而不是程序中指定的“readdata”。
更新:在Windows 7中,在文件 - &gt;下;属性 - &gt;安全 - &gt;高级 - &gt;有效权限,权限显示为广告。 “特殊权限”的勾选实际上是误导性的 Update2:如果使用五参数构造函数并将标志设置为“InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit”和“PropagationFlags.InheritOnly”,则访问权限将在安全选项卡中显示,与添加的完全相同。只有在每个子目录下继承和传播权限时,才会勾选安全选项卡中的长访问列表。

答案 2 :(得分:0)

您是否考虑过帐户组“{domainName} \ Domain Users”?拒绝访问此组应拒绝访问指定域中的所有用户。