Защитите ключ реестра через 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: Очень важно, что ключ не может быть прочитан даже не администратором, а не просто изменен.


person Spence    schedule 25.01.2010    source источник


Ответы (1)


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

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

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

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

person Michael Burr    schedule 25.01.2010
comment
Таким образом, правила запрета больше связаны с распространяемыми разрешениями. Я намерен создать новый ACL, добавить одно правило, которое я хочу, а затем прямо таким образом установить ACL. (в отличие от получения ACL, изменения, применения). Вы знаете, есть ли какие-то специальные системные учетные записи, которые должны иметь доступ к ключу? - person Spence; 25.01.2010
comment
Требуется ли доступ к ключу каким-либо специальным системным учетным записям, зависит от того, что это за ключ и для чего он используется. Например, если каким-либо службам требуется доступ к ключу, то доступ потребуется для любой учетной записи, под которой работает служба (или группы, в которой находится эта учетная запись). - person Michael Burr; 25.01.2010
comment
Вы должны протестировать его - я думаю, с удалением LocalSystem проблем не возникнет, если только к ключу не потребуется доступ для службы, работающей под учетной записью SYSTEM. Если это ключ, который вы создали для своих целей (а не то, что Microsoft использует для какого-то элемента конфигурации или чего-то еще), проблем быть не должно. Если никакой системный процесс Windows не ищет ключ, им все равно, что они не могут получить к нему доступ. Но проверьте это - не верьте мне на слово. - person Michael Burr; 25.01.2010