Разрешения на запись в EventLog
Мой вопрос связан с правами на запись в журнал событий Windows.
Я просмотрел несколько сообщений, рассказывающих об этом, и нашел некоторые способы решения моей проблемы, но ни один из них не подходит для моего текущего сценария.
Я использую С# в .NET 4.0. Я использую класс EventLog:
Класс EventLog
Короче говоря, мне нужно выяснить, есть ли способ олицетворять или аутентифицировать аутентифицированный пользователь и пароль, чтобы достичь права, которое мне нужно записать в журнал событий. Сервер всегда будет в семействе Windows Server, но версия может отличаться.
Мое приложение - это служба Windows, работающая с одной из следующих учетных записей:
- Сетевая служба
- Локальная служба
- Локальная система
- Пользователь с ограниченными правами (пользователи или
Группы пользователей домена)
Вот некоторые другие критерии, которые у меня есть:
- Я не могу поместить пользователя службы в качестве администратора, даже локального администратора на сервере
- Я не могу редактировать или изменять реестр
- Я не могу изменить UAC или любые групповые политики на сервере
- У меня есть пользователь с правами администратора, но он не может использоваться для запуска службы
- Журнал событий всегда будет локальным журналом событий, а не на удаленном компьютере.
- Журнал, вероятно, всегда будет журналом "Приложение"
- Источник может отличаться, и это, по-видимому, является сердцем проблемы.
Мой вопрос: Возможно ли это?
Могу ли я выдавать себя за пользователя в моем коде для достижения того, что мне нужно?
Я делаю это при подключении к веб-сервисам, входе на SMTP-серверы и в courseclogging в базы данных и т.д.
Я наткнулся на этот класс:
Класс EventLogPermission
Но я не могу получить хорошую концепцию о том, как использовать класс.
Надеюсь, я выразил свою проблему хорошо. Я не рассматриваю это дубликат другого сообщения из-за моих критериев.
Ответы
Ответ 1
Ответ показал "нет".
Я понимаю, что нет хорошего способа решить это, как я просил. Должно быть выполнено ручное задание.
Таким образом, решение, которое я выбираю для этого сценария, заключается в том, что клиенты, которые не могут запускать службу в качестве администратора или выполнять ручное редактирование реестра, не могут использовать функции, связанные с протоколированием журнала событий. И я позволю включить и отключить ведение журнала из конфигурации.
Администратор и редактирование реестра - это известные способы для меня, но, как сказано, я пытался избежать. Но это, как кажется, невозможно в соответствии с моими критериями на этот раз.
Ответ 2
По умолчанию любой аутентифицированный пользователь может записывать в журнал событий приложения. Однако только администраторы могут создавать новые источники событий. Если все источники событий известны во время установки службы, я рекомендую заранее зарегистрировать эти источники, тогда вы все настроитесь. Регистрация - это простой вызов EventLog.CreateEventSource.
Если вам нужна дополнительная гибкость в источниках событий, вы можете настроить разрешения. Эти настройки по умолчанию можно настроить, настроив раздел реестра:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Eventlog\Application\CustomSD
Процесс, описанный в этой статье статьи KB. Инструмент wevtutil
, который является частью ОС, доступный на сервере 2008 и выше, делает его немного легче, чем через regedit.