Код статьи: 953587 - Последнее изменение :: 19 июня 2011 г. - Редакция: 4.0

Порядок настройки безопасности журнала событий программными средствами с помощью.NET Framework

Совет по использованию системыЭта статья относится к операционной системе, отличной от установленной на вашем компьютере. Содержимое, не относящееся к используемой системе, отключено.
Развернуть все | Свернуть все
Источник: Поддержка Майкрософт

БЫСТРАЯ ПУБЛИКАЦИЯ

БЫСТРАЯ ПУБЛИКАЦИЯ ДАННЫХ СОДЕРЖАТСЯ СВЕДЕНИЯ НЕПОСРЕДСТВЕННО В СЛУЖБУ ТЕХНИЧЕСКОЙ ПОДДЕРЖКИ МАЙКРОСОФТ ОРГАНИЗАЦИИ. СВЕДЕНИЯ, СОДЕРЖАЩИЕСЯ В НАСТОЯЩЕМ ДОКУМЕНТЕ СОЗДАЕТСЯ В ОТВЕТ НА НОВЫХ ИЛИ УНИКАЛЬНЫЙ РАЗДЕЛЫ, ИЛИ ПРЕДНАЗНАЧЕНА ДОПОЛНЕНИЯ ДРУГИХ ЗНАНИЙ СВЕДЕНИЯ.

Действие

Windows позволяет настраивать права доступа к журналам событий.  Если среде не потребует этого, можно использовать.NET Framework для настройки настраиваемый дескриптор безопасности для журнала событий.

Разрешение



Безопасность каждого журнала событий настроена локально с помощью следующего параметра реестра:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Eventlog\LogName\CustomSD

Параметр реестра CustomSD имеет тип REG_SZ и содержит дескриптор безопасности в форме языка определения дескрипторов безопасности (SDDL).  Дополнительные сведения о ожидаемый формат SDDL или параметр CustomSD можно найти ссылки в области дополнительных сведений.

Можно использовать.NET Framework для настройки безопасности журнала событий программными средствами.  В следующем примере кода показано, как это сделать с помощью C#.  Обратите внимание, что приложение должно выполняться с правами администратора, чтобы иметь доступ на запись в параметр CustomSD, поскольку он находится в разделе HKEY_LOCAL_MACHINE.

открытый статический класс EventLogSecurity
{
/ / Путь реестра для журнала событий
const строку EventLogRegPath = @ «HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\EventLog\»;

/ / Маски доступа
открытый const int CustomSD_READ_ACCESS = 0x1;
открытый const int CustomSD_WRITE_ACCESS = 0x2;
открытый const int CustomSD_CLEAR_ACCESS = 0x4;
открытый const int CustomSD_ALL_ACCESS = 0x7;

открытые статические bool EventLogHasCustomSD (строка logName)
{
Возврат (ReferenceEquals (Registry.GetValue (EventLogRegPath + logName, «CustomSD», null), значение null) == false);
}

открытые статические void CreateEventLogCustomSD (строка logName)
{
/ / По умолчанию доступ все локальные администраторы все
SecurityIdentifier LocalAdminGroup = новый SecurityIdentifier (WellKnownSidType.BuiltinAdministratorsSid, значение null);
           
/ / Установка DACL
Список dacl DiscretionaryAcl = новый DiscretionaryAcl (false, false, 1);
список DACL.AddAccess (AccessControlType.Allow, LocalAdminGroup, CustomSD_ALL_ACCESS, InheritanceFlags.None, PropagationFlags.None);

/ / Создание дескриптора безопасности
CommonSecurityDescriptor sd = новый CommonSecurityDescriptor (false, false, ControlFlags.DiscretionaryAclPresent, LocalAdminGroup, LocalAdminGroup, значение null, dacl);
           
/ / Save SDDL в CustomSD
WriteEventLogCustomSD (logName, sd);
}

открытые статические CommonSecurityDescriptor GetSecDescForCurrentCustomSD(string logName)
{
Строка sddl = (string)Registry.GetValue (EventLogRegPath + logName, «CustomSD», null);
Если (ReferenceEquals (sddl, null))
Возвращает значение null;
Возвращает новый CommonSecurityDescriptor (false, false, sddl);
}

открытые статические void WriteEventLogCustomSD (строковый параметр logName, CommonSecurityDescriptor sd)
{
WriteEventLogCustomSD (logName sd.GetSddlForm(AccessControlSections.All));
}
открытые статические void WriteEventLogCustomSD (logName строка, строка sddl)
{
Registry.SetValue (EventLogRegPath + logName, «customsd» sddl, RegistryValueKind.String);
}

открытые статические void AddUserToEventLogCustomSD (logName строка, строка домена, строка счета, маска int)
{
/ / Создание идентификатора безопасности пользователя
SecurityIdentifier RemoteUserSid = (SecurityIdentifier) (новый NTAccount(domain, account).Translate(typeof(SecurityIdentifier)));

AddUserToEventLogCustomSD (logName, RemoteUserSid, маска);
}

открытые статические void AddUserToEventLogCustomSD (строка logName, SecurityIdentifier RemoteUserSid маски int)
{
/ / Убедитесь, что у нас есть CustomSD на месте
Если (!.EventLogHasCustomSD(logName))
CreateEventLogCustomSD(logName);

/ / Получить текущий SD
CommonSecurityDescriptor sd = GetSecDescForCurrentCustomSD(logName);

/ / добавить элемент управления ДОСТУПОМ
дескриптор безопасности.DiscretionaryAcl.AddAccess (AccessControlType.Allow, RemoteUserSid, маски, InheritanceFlags.None, PropagationFlags.None);

/ / Save SDDL в CustomSD
WriteEventLogCustomSD (logName, sd);
}

открытые статические void RemoveUserFromEventLogCustomSD (logName строка, строка домена, учетной записи строки)
{
/ / Создание идентификатора безопасности пользователя
SecurityIdentifier RemoteUserSid = (SecurityIdentifier) (новый NTAccount(domain, account).Translate(typeof(SecurityIdentifier)));

RemoveUserFromEventLogCustomSD (logName, RemoteUserSid);
}
открытый статический void RemoveUserFromEventLogCustomSD (SecurityIdentifier RemoteUserSid logName строка)
{
найдено bool = false;
CommonAce foundAce = null;

/ / Убедитесь, что у нас есть CustomSD в месте, в противном случае поручительством
Если (!.EventLogHasCustomSD(logName))
Возврат;

/ / получить текущий sd
CommonSecurityDescriptor sd = GetSecDescForCurrentCustomSD(logName);

/ / найти sid в sd
AceEnumerator его = sd.DiscretionaryAcl.GetEnumerator();
While(IT.MoveNext())
{
foundAce = его.Текущий как CommonAce;
Если (foundAce.SecurityIdentifier.Equals(RemoteUserSid))
{
найдено = true;
Разрыв;
}
}

/ /, если не найден, поручительством
Если (! найдено)
Возврат;

/ / Удаление записи управления доступом для этого идентификатора sid
дескриптор безопасности.DiscretionaryAcl.RemoveAccessSpecific (AccessControlType.Allow, RemoteUserSid, foundAce.AccessMask, InheritanceFlags.None, PropagationFlags.None);

/ / выписать CustomSD
WriteEventLogCustomSD (logName, sd);
}
}

Дополнительные сведения



Формат строки дескриптора безопасности
    http://MSDN.Microsoft.com/en-us/library/aa379570.aspx (http://msdn.microsoft.com/en-us/library/aa379570.aspx)

Значение CustomSD EventLog
    http://MSDN.Microsoft.com/en-us/library/aa363648.aspx (http://msdn.microsoft.com/en-us/library/aa363648.aspx)  

    

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ

MICROSOFT И/ИЛИ ЕЕ ПОСТАВЩИКИ НЕ ДЕЛАТЬ ПРЕДСТАВЛЕНИЯ ИЛИ ГАРАНТИЙ О ПРИГОДНОСТИ, НАДЕЖНОСТЬ И ТОЧНОСТЬ ИНФОРМАЦИИ СОДЕРЖАТСЯ В ДОКУМЕНТЫ И СВЯЗАННЫХ РИСУНКОВ ПУБЛИКАЦИИ НА ЭТОМ ВЕБ-САЙТЕ (ДАЛЕЕ "МАТЕРИАЛЫ") ДЛЯ ЛЮБЫХ ЦЕЛЕЙ. МАТЕРИАЛЫ МОГУТ СОДЕРЖАТЬ ТЕХНИЧЕСКИЕ НЕТОЧНОСТИ ИЛИ ОПЕЧАТОК И МОЖЕТ БЫТЬ ИЗМЕНЕН В ЛЮБОЕ ВРЕМЯ БЕЗ ПРЕДВАРИТЕЛЬНОГО УВЕДОМЛЕНИЯ.

В МАКСИМАЛЬНОЙ СТЕПЕНИ, ДОПУСКАЕМОЙ ПРИМЕНИМО ЗАКОНОДАТЕЛЬСТВОМ, КОРПОРАЦИЯ МАЙКРОСОФТ ИЛИ ЕЕ ПОСТАВЩИКИ DISCLAIM И ИСКЛЮЧИТЬ ВСЕ ПРЕДСТАВЛЕНИЯ ГАРАНТИЙ И УСЛОВИЙ ЛИ EXPRESS, КОСВЕННЫХ ИЛИ УСТАНОВЛЕННЫХ ЗАКОНОМ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЕТСЯ, ГАРАНТИЙ, УСЛОВИЙ ИЛИ ЗАГОЛОВКА, ОТЛИЧНЫХ ОТ КОНТРАФАКЦИИ, ИСПРАВИВ ОШИБКУ ИЛИ КАЧЕСТВА, ЛЮБЫЕ ГАРАНТИИ ТОВАРНОСТИ ИЛИ ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ, ОТНОСЯЩИЕСЯ К МАТЕРИАЛАМ.
Примечание. Это ЭКСПРЕСС-ПУБЛИКАЦИЯ, подготовленная непосредственно службой технической поддержки Майкрософт . Сведения, содержащиеся в данном документе, предоставлены в качестве отклика на возникшие проблемы. Из-за срочности в материалах могут быть опечатки, и в любое время и без уведомления в них могут быть внесены изменения. Чтобы получить дополнительные сведения, см. Условия использования (http://go.microsoft.com/fwlink/?LinkId=151500) .

Информация в данной статье относится к следующим продуктам.
  • Microsoft .NET Framework 2.0
  • Microsoft .NET Framework 3.0
  • Microsoft .NET Framework 3.5
Ключевые слова: 
kbnomt kbrapidpub kbmt KB953587 KbMtru
Переведено с помощью машинного переводаПереведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:953587  (http://support.microsoft.com/kb/953587/en-us/ )