Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эта статья поможет устранить проблему, которая может возникать при записи в журнал событий Windows из приложения ASP.NET или поставщика служб приложений (ASP).
Исходная версия продукта: службы IIS версии 8.0 и более поздних версий
Исходный номер базы знаний: 2028427
Симптомы
У вас есть ASP.NET или устаревшее приложение ASP, работающее на службы IIS (IIS) 8.0 или более поздней версии. Приложение записывает события в журналы событий Windows. Запись в журналы событий завершается сбоем с сообщением об ошибке, аналогичным следующему примеру:
Приложение ASP.NET
System.Security.SecurityException: запрошенный доступ к реестру запрещен.
System.ComponentModel.Win32Exception: доступ запрещен
InvalidOperationException: не удается открыть журнал для исходного приложения. Возможно, у вас нет доступа на запись.
Устаревшее приложение ASP
Разрешение запрещено.
Причина
Эта проблема возникает, так как по умолчанию маркер пользователя приложения не имеет необходимых прав пользователя для записи в журналы событий Windows из-за ограниченного доступа к безопасности.
Решение
Важно!
В этот раздел, описание метода или задачи включены действия, содержащие указания по изменению параметров реестра. Однако неправильное изменение параметров реестра может привести к возникновению серьезных проблем. Поэтому убедитесь, что вы внимательно выполните следующие действия. Для дополнительной защиты создайте резервную копию реестра перед его изменением. Так вы сможете восстановить реестр, если возникнет проблема. Для получения дополнительной информации о том, как создать резервную копию и восстановить реестр, см. статью Сведения о резервном копировании и восстановлении реестра Windows.
Чтобы предоставить необходимые разрешения для удостоверения потока, измените безопасность журнала событий с помощью приведенных ниже разделов реестра на серверном компьютере. Вы должны выбрать журнал событий, в который приложение записывается:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Eventlog\Application\CustomSD
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Eventlog\System\CustomSD
CustomSD
Значение реестра имеет тип REG_SZ и содержит дескриптор безопасности в синтаксисе языка определения дескриптора безопасности (SDDL). Дополнительные сведения о синтаксисе SDDL см. в разделе "Дополнительные сведения " ниже.
Примечание.
Чтобы создать строку SDDL, существуют три отдельные права, относящиеся к журналам событий: чтение, запись и очистка. Эти права соответствуют следующим битам в поле прав доступа строки совместимой кодировки ASCII (ACE):
- 1 = чтение
- 2 = запись
- 4 = Очистить
Внимание
Журнал безопасности можно настроить таким же образом. Однако можно изменить только разрешения на чтение и очистку доступа. Доступ на запись к журналу безопасности зарезервирован только для локального центра безопасности Windows (LSA).
В следующем примере представлен пример SDDL, показывающий строку SDDL по умолчанию для журнала приложений. Права доступа (в шестнадцатеричном режиме) полужирные:
O:BAG:SYD:(D;; 0xf0007;; AN(D;; 0xf0007;; BG)(A;; 0xf0007;; SY)(A;; 0x5;; BA)(A;; 0x7;; SO(A;; 0x3;; IU)(A;; 0x2;; BA)(A;; 0x2;; LS)(A;; 0x2;; NS)
Значения записи:
- Владелец объекта O:BA является встроенным администратором (BA).
- Основная группа G:SY — System (SY).
- D. Это дискреционный список управления доступом (DACL), а не запись аудита или SACL.
(D;;0xf0007;;;AN)
Запретить анонимный доступ (AN). (1=Чтение + 2=Запись + 4=Очистить) (Первая строка ACE в этом SDDL).(D;;0xf0007;;;BG)
Запретить доступ всем встроенным гостям (BG).(A;;0xf0005;;;SY)
Разрешить системное чтение и очистку (1=Чтение + 4=Очистить), включая DELETE, READ_CONTROL, WRITE_DAC и WRITE_OWNER (указано 0xf0000).(A;;0x7;;;BA)
Разрешить встроенному администратору чтение, запись и очистку.(A;;0x7;;;SO)
Разрешить операторы сервера READ, WRITE и CLEAR.(A;;0x3;;;IU)
Разрешить интерактивным пользователям чтение и запись.(A;;0x3;;;SU)
Разрешить учетные записи служб READ и WRITE.
Добавьте соответствующую строку ACE, чтобы веб-страница получите доступ к журналам событий. Если веб-страница работает анонимно (иными словами, при использовании анонимной проверки подлинности в IIS), необходимо предоставить IUSR или настраиваемую анонимную учетную запись соответствующим разрешениям для этого CustomSD
раздела реестра. Группа прошедших проверку подлинности пользователей должна иметь необходимые разрешения, если она работает в интегрированной проверке подлинности Windows.
Для этого добавьте приведенную ниже запись к значению CustomSD
по умолчанию в выбранном журнале событий.
Для группы прошедших проверку подлинности пользователей (если есть встроенная проверка подлинности windows):
(A;;0x0003;;;AU)
где AU = прошедшие проверку подлинности пользователи.Для IUSR или настраиваемой анонимной учетной записи, если есть анонимная проверка подлинности, найдите идентификатор безопасности для этой учетной записи и создайте ее, а затем создайте ее, как показано
(A;;0x3;;;S-1-5-21-1985444312-785446638-2839930158-1121)
, где последнее поле является идентификатором безопасности для учетной записи IUSR на моем компьютере.Для проверки подлинности Windows в службах IIS и ASP.NET включена олицетворение с определенной учетной записью пользователя, найдите идентификатор безопасности для этой олицетворенной учетной записи, а затем создайте строку SDDL, которая выглядит следующим образом:
(A;;0x3;;;S-1-5-21-1985444312-785446638-2839930158-1121)
где последнее поле является идентификатором безопасности для олицетворенной учетной записи.
Чтобы предоставить группе разрешения на чтение, добавьте следующее значение CustomSD
в конце текущей CustomSD
строки:
(A;;0x1;;;[Your Group Name/user account SID])
Чтобы предоставить группе разрешения на чтение и запись, добавьте следующее значение CustomSD
в конце текущей CustomSD
строки:
(A;;0x3;;;[Your Group Name/user account SID])
Windows Server 2008
Вместо этого на сервере Windows 2008, если вы предоставляете пользователям и группам доступ на чтение ко всем журналам событий, вы можете просто добавить их в встроенную группу средств чтения журналов событий. Однако если вы не хотите предоставлять доступ ко всем журналам событий, вам по-прежнему придется прибегнуть к использованию SDDL, для которого можно использовать WevtUtil
программу. В следующем примере показано определение доступа к системе входа в Windows 2008 Server:
Откройте командную строку и выполните следующую команду, чтобы выбросить SDDL для выхода системы в файл txt.
wevtutil gl system > C:\temp\out.txt
Откройте текстовый файл и скопируйте каналAccess: запись
channelAccess: O:BAG:SYD:(A;;0xf0007;;;SY)(A;;0x7;;;BA)(A;;0x5;;;SO)(A;;0x1;;;IU)(A;;0x1;;;AU)(A;;0x1;;;SU)(A;;0x1;;;S-1-5-3)(A;;0x2;;;LS)(A;;0x2;;;NS)(A;;0x2;;;S-1-5-33)
Добавьте пользователя или группу в эту строку и выполните следующую команду, чтобы применить новый SDDL. Замените O:BAG:XXXX строкой SDDL, созданной на предыдущем шаге:
wevtutil sl System /ca:O:BAG:XXXX
Примечание.
После изменения этого значения и перезагрузки компьютера новый параметр вступит в силу. Убедитесь, что вы полностью понимаете SDDL и разрешения по умолчанию, размещенные в каждом журнале событий перед использованием этой процедуры. Кроме того, необходимо тщательно протестировать любые изменения перед их реализацией в рабочей среде, так как вы можете случайно настроить списки управления доступом (ACL) в журнале событий таким образом, чтобы никто не мог получить к нему доступ.