Я пытаюсь заблокировать раздел реестра с важной информацией, которая должна быть доступна на клиентском компьютере, я не хочу, чтобы не администраторы имели доступ к этому ключу. Если вы администратор, вы уже сможете нанести больше урона, чем то, что я храню в ключе.
В настоящее время я хочу сделать следующее:
//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);
Если я прав, это будет лишать доступа к каждому, разрешить доступ явно кому-либо в группе администраторов и не позволит всем унаследованным разрешениям применяться к моему ключу? Я бы лучше выяснил, будет ли это работать, прежде чем я закрою ACL на ключе, чтобы я не смог его удалить и т.д. Должен ли я установить владельца ключа как группу администраторов?
PS: Очень важно, чтобы ключ не мог быть прочитан как не администратор, а не просто изменен.
Будьте очень осторожны с правилами отказа - они редко нужны.
Если в ACL используется только ACE, для администраторов, предоставляющих им доступ, который вы им хотите, тогда никто другой не будет иметь доступ к ключу, так как нет доступа ACE к ним.
Непонятно мне из документации для AddAccessRule()
, если это гарантирует, что новое правило (или ACE) будет добавлено в конец ACL или нет. Вероятно, это будет так, но если это не так, и ваш отказ ACE заканчивается до того, как ACE предоставит доступ к администраторам, тогда отказ ACE будет "отменять" тот, который предоставляет доступ (первая система перестает смотреть на ACL, когда он попадает в первый ACE, который предоставляет или запрещает разрешение). Вот почему использование deny ACE может быть сложным. И поскольку ACL, который явно не предоставляет разрешение, приводит к сбою проверки доступа, вам обычно нужно указать, кому разрешен доступ.
Вероятно, вы захотите убедиться, что владелец настроен на группу администратора - у владельца нет доступа к ключу (или к любому другому объекту), но владелец всегда имеет право изменять ACL (имеет смысл, если вы подумайте об этом на мгновение).