[英]How to assign directory permissions to administrator for a particular directory?
我正在尝试仅向管理员分配权限,并拒绝其他非管理员用户的访问。 以下是代码-
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”,则它可以按预期工作。有人可以向我明确说明为什么会发生这种情况吗?
请参阅下图以更好地了解DACL的工作原理
当明确授予或拒绝所请求的访问权限时,Windows将停止检查访问控制条目。 ACE的顺序非常重要。 请注意,如果示例中的ACE顺序不同,则系统可能已授予对线程A的访问权限。
关于拒绝ACE的一些注意事项
在大多数情况下,可以使用允许访问的ACE控制对对象的访问。 您不需要明确拒绝访问对象。 例外是当ACE允许访问组并且您要拒绝对组成员的访问时。 为此,请在组中允许访问的ACE之前,将用户拒绝访问的ACE放置在DACL中。 请注意,ACE的顺序很重要,因为系统会按顺序读取ACE,直到允许或拒绝访问为止。 用户的拒绝访问的ACE必须首先出现; 否则,当系统读取该组的允许访问的ACE时,它将向受限用户授予访问权限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.