通过ACL保护注册表项以删除对非管理员的所有访问权限

我正在尝试使用必须在客户端计算机上访问的一些重要信息来锁定注册表项,我不是非管理员可以访问此密钥。 如果您是管理员,您将能够比我在密钥中存储的更多损害。

我目前要做的是:

//Allow access only to administrators and deny all rights to everyone else. System.Security.AccessControl.RegistrySecurity acl = new System.Security.AccessControl.RegistrySecurity(); acl.AddAccessRule( new System.Security.AccessControl.RegistryAccessRule( "Administrators", System.Security.AccessControl.RegistryRights.FullControl, System.Security.AccessControl.AccessControlType.Allow)); acl.AddAccessRule( new System.Security.AccessControl.RegistryAccessRule( "Everyone", System.Security.AccessControl.RegistryRights.FullControl, System.Security.AccessControl.AccessControlType.Deny)); //Prevent inherited read access from the software or company key allowing access. acl.SetAccessRuleProtection(true, false); MyKey.SetAccessControl(acl); 

如果我说得对,这将拒绝所有人访问,允许显式访问管理员组中的任何人,并阻止所有inheritance的权限应用于我的密钥? 我想知道它是否会在我搞砸密钥上的ACL以便我无法删除之前等等。我是否应该将密钥的所有者设置为管理员组?

PS:非常重要的是,密钥甚至不能作为非管理员读取,而不仅仅是更改。

对拒绝规则要非常小心 – 它们很少是必要的。

如果ACL中唯一的ACE是管理员为他们提供您希望他们拥有的访问权限,那么没有其他人可以访问该密钥,因为没有ACE授予他们访问权限。

如果它保证将新的规则(或ACE)添加到ACL的末尾,那么我从AddAccessRule()的文档中就不清楚了。 这可能是这种情况,但是如果碰巧不能以这种方式工作并且您的拒绝ACE在ACE授予管理员访问权限之前结束,则拒绝ACE将“覆盖”授予访问权限的ACE(第一个系统停止查看ACL一旦命中授予或拒绝许可的第一个ACE, 这就是为什么使用deny ACE可能会很棘手。 由于未明确授予权限的ACL会导致访问检查失败,因此通常只需指定允许访问权限的人员。

您可能希望确保所有者设置为管理员组 – 所有者无权访问密钥(或任何对象),但所有者始终有权更改ACL(如果您考虑它,则有意义)一会儿)。