【问题标题】:How to assign directory permissions to administrator for a particular directory?如何将目录权限分配给特定目录的管理员?
【发布时间】:2018-10-24 21:25:04
【问题描述】:

我正在尝试仅将权限分配给管理员并拒绝其他非管理员用户访问。下面是代码-

DirectoryInfo di = new DirectoryInfo(@"C:\C00");

DirectorySecurity dirSec = di.GetAccessControl();
dirSec.SetAccessRuleProtection(true, false);

SecurityIdentifier systemSid = new SecurityIdentifier(WellKnownSidType.LocalSystemSid, null);
NTAccount systemAccount = (NTAccount)systemSid.Translate(typeof(NTAccount));

SecurityIdentifier adminSid = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
NTAccount adminAccount = (NTAccount)adminSid.Translate(typeof(NTAccount));

SecurityIdentifier userSid = new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null);
NTAccount userAccount = (NTAccount)userSid.Translate(typeof(NTAccount));

//access rule 1
dirSec.AddAccessRule(new FileSystemAccessRule(systemAccount, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
//access rule 2
dirSec.AddAccessRule(new FileSystemAccessRule(adminAccount, FileSystemRights.Read, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
//access rule 3
dirSec.AddAccessRule(new FileSystemAccessRule(userAccount, FileSystemRights.Read, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Deny));
            di.SetAccessControl(dirSec);
return;

使用上面的代码,即使管理员也无法访问该文件夹,但如果没有注释中表示为“访问规则 3”的访问规则,它会按预期工作。任何人都可以向我解释为什么会这样正在发生吗?

【问题讨论】:

  • “拒绝”类型的优先级高于“允许”。因此,如果'George'是'user'和'administrator'并且用户有'deny',那么即使'George'也不能访问该文件夹。
  • 是啊..有道理。那我怎样才能实现我想要的行为呢?

标签: c# .net windows permissions .net-4.5


【解决方案1】:

请参阅下图以更好地了解 DACL 的工作原理

当请求的访问被明确授予或拒绝时,Windows 会停止检查访问控制条目。 ACE 的顺序非常重要。请注意,如果示例中的 ACE 顺序不同,则系统可能已授予对线程 A 的访问权限。

关于拒绝ACE的一些注意事项

在大多数情况下,您可以通过使用来控制对对象的访问 允许访问的 ACE;您不需要明确拒绝访问 目的。例外情况是当 ACE 允许访问某个组并且您 想要拒绝访问该组的成员。为此,放置一个 DACL 中用户的 access-denied ACE 在 access-allowed 之前 该组的 ACE。请注意,ACE 的顺序很重要 因为系统会按顺序读取 ACE,直到授予访问权限 或拒绝。用户的拒绝访问 ACE 必须首先出现;否则, 当系统读取该组的访问允许ACE时,它会授予 访问受限用户。

How AccessCheck Works

How the System Uses ACLs

【讨论】:

  • 一个疑问。如果一个目录包含3个不同的子文件夹,我可以给他们不同的权限吗?
  • 当然。每个对象(文件夹或文件)都可以有自己的访问控制列表。
猜你喜欢
  • 2010-09-25
  • 2014-04-23
  • 2013-01-24
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
相关资源
最近更新 更多