Защитите раздел реестра через ACL, чтобы удалить все права доступа не администраторов

2

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

В настоящее время я хочу сделать следующее:

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

Теги:
security
acl
registry

1 ответ

3
Лучший ответ

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

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

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

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

  • 0
    Таким образом, правила «Запретить» больше предназначены для распространения разрешений. Мое намерение состоит в том, чтобы создать новый ACL, добавить одно правило, которое я хочу, и затем установить ACL непосредственно таким образом. (в отличие от получения ACL, изменить, применить). Знаете ли вы, есть ли какие-либо специальные системные учетные записи, которые должны иметь доступ к ключу?
  • 0
    Необходим ли доступ к ключу каким-либо специальным системным учетным записям, зависит от того, что это за ключ и для чего он используется. Например, если каким-либо службам необходим доступ к ключу, то к любой учетной записи, под которой работает служба (или группе, в которой находится эта учетная запись), потребуется доступ.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню