2010-01-25 3 views
2

Я пытаюсь заблокировать раздел реестра с важной информацией, которая должна быть доступна на клиентской машине, я не хочу, чтобы не администраторы доступ к этому ключу. Если вы администратор, вы уже сможете нанести больше урона, чем то, что я храню в ключе.Зафиксировать ключ реестра с помощью 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); 

Если я правильно это будет запретить доступ к каждому, разрешить доступ к любому явно в группе администраторов и предотвратить все наследуемые разрешения от применительно к моему ключу? Я бы лучше выяснил, будет ли это работать, прежде чем я испортил ACL на ключе, так что я не могу его удалить и т. Д. Должен ли я установить владельца ключа как группу администраторов?

PS: Очень важно, чтобы ключ не мог быть прочитан как не администратор, а не просто изменен.

ответ

3

Будьте очень осторожны с правилами отказа - они редко нужны.

Если только ACE в ACL предназначен для администраторов, предоставляющих им доступ, который вы им хотите, тогда никто другой не будет иметь доступа к ключу, так как нет доступа ACE к ним.

Непонятно мне из документации для AddAccessRule(), если это гарантирует, что новое правило (или ACE) будет добавлено в конец ACL или нет. Вероятно, это так, но если это не так, и ваш отказ ACE заканчивается до того, как ACE предоставит доступ администраторам, тогда ACE отказов будет «переопределять» тот, который предоставляет доступ (первая система перестает смотреть на ACL, когда он попадает в первый ACE, который предоставляет или запрещает разрешение). Вот почему использование deny ACE может быть сложным. И поскольку ACL, который явно не предоставляет разрешение, приводит к сбою проверки доступа, вам обычно необходимо указать, кому разрешен доступ.

Возможно, вам захочется убедиться, что владелец настроен на группу администратора - владелец не может иметь доступ к ключу (или любому другому объекту), но владелец всегда имеет право изменять ACL (имеет смысл, если вы думаете об этом на мгновение).

+0

Таким образом, правила Deny больше связаны с распространенными разрешениями. Мое намерение состоит в том, чтобы добавить ACL, добавить одно правило, которое я хочу, а затем установить ACL прямо таким образом. (в отличие от получения ACL, изменения, применения). Знаете ли вы, есть ли какие-либо специальные системные учетные записи, которые должны иметь доступ к ключу? – Spence

+0

Независимо от того, нужен ли какой-либо специальный системный счет для доступа к ключу, зависит от того, какой ключ и для чего он используется. Например, если какие-либо службы нуждаются в доступе к ключу, то любой доступ к учетной записи, на которую работает служба (или группа, в которой находится эта учетная запись), нуждается в доступе. –

+0

Я беспокоюсь о том, что это «LocalSystem». Если я удалю это, это будет плохо ... – Spence