Разрешения на запись в EventLog

Мой вопрос связан с разрешениями на запись в журнал событий Windows. Я просмотрел несколько сообщений об этом и нашел несколько способов решения моей проблемы, но ни один из них не подходит для моего текущего сценария.

Я использую C # в .NET 4.0. Я использую класс EventLog: класс EventLog

Короче говоря, мне нужно увидеть, есть ли способ олицетворять или аутентифицироваться с аутентифицированным пользователем и паролем, чтобы получить право, которое мне нужно записать в журнал событий. Сервер всегда будет принадлежать к семейству Windows Server, но версия может отличаться.

Мое приложение - это служба Windows, работающая с одной из следующих учетных записей:

  • Сетевая служба
  • Местная служба
  • Локальная система
  • Пользователь с ограниченными правами (Пользователи или группы пользователей домена)

Вот еще несколько критериев, которые у меня есть:

  • Я не могу назначить пользователя службы администратором, даже локальным администратором на сервере
  • Я не могу редактировать или изменять реестр
  • Я не могу изменить UAC или какие-либо групповые политики на сервере
  • У меня есть пользователь с правами администратора, но его нельзя использовать для запуска службы
  • Журнал событий всегда будет локальным журналом событий, а не на удаленном компьютере.
  • Журнал, вероятно, всегда будет журналом «Приложения».
  • Источник может отличаться, и, похоже, в этом суть проблемы.

У меня вопрос: Возможно ли это вообще?

Могу ли я выдать себя за пользователя в своем коде, чтобы достичь того, что мне нужно? Я делаю это при подключении к веб-службам, входе на серверы smtp и, конечно же, при подключении к базам данных и т. Д.

Я наткнулся на этот класс: класс EventLogPermission

Но я не могу получить хорошее представление о том, как использовать класс.

Надеюсь, я хорошо выразил свою проблему. Я не считаю это дубликатом другого поста из-за моих критериев.


person Mats Magnem    schedule 09.01.2013    source источник
comment
Почему голосование против? Это вполне актуальный вопрос. Многие функции, для которых требуются особые права или права администратора, могут выдавать себя из кода, поэтому сама служба может работать от имени пользователя с низкими привилегиями.   -  person Mats Magnem    schedule 13.01.2013
comment
Хотя он не отвечает всем вашим требованиям, этот вопрос и ответы на него более полезны, ИМО.   -  person jpaugh    schedule 07.12.2016


Ответы (2)


По умолчанию любой аутентифицированный пользователь может вести запись в журнал событий приложения. Однако только администраторы могут создавать новые источники событий. Если все источники событий известны на момент установки службы, я рекомендую зарегистрировать эти источники заранее, тогда все будет готово. Регистрация - это простой вызов EventLog.CreateEventSource.

Если вам нужна большая гибкость в отношении источников событий, вы можете настроить разрешения. Эти значения по умолчанию можно настроить, настроив ключ реестра:

  HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Eventlog\Application\CustomSD

Процесс, описанный в этой статье базы знаний. Инструмент wevtutil, входящий в состав ОС, доступный на Server 2008 и более поздних версиях, делает это немного проще, чем использование regedit.

person seva titov    schedule 10.01.2013
comment
Ключевым моментом здесь является разрешение на уровне администратора во время установки, которое просто необходимо, если вы хотите работать с настройками безопасности по умолчанию / безопасными. - person pseudocoder; 10.01.2013
comment
Я знаю об этом, и обычно этим занимаюсь. Но оба нарушают мои критерии (как указано в вопросе). Я не могу редактировать или изменять реестр. И я не могу зарегистрировать источники заранее, так как мой источник может отличаться. - person Mats Magnem; 10.01.2013
comment
@MatsMagnem, я почти уверен, что вы можете редактировать реестр во время установки службы. Когда вы устанавливаете службу Windows, вам в любом случае потребуются административные разрешения, поэтому вы можете настраивать разрешения, пока вы в ней. Как только это будет сделано и ваша служба запущена, вам не нужно изменять реестр. - person seva titov; 11.01.2013
comment
Я могу, конечно. и я сделаю это, если понадобится. Но это продукт, который продается для установки в собственном окружении режиссера. Большинство государственных и корпоративных клиентов часто не предоставляют мне пользователя с административными правами из-за политики и политики. Сама установка не требует прав администратора, как и полный запуск решения. Так что это не мой выбор. Если придется, сделаю. Но если я смогу избежать этого, выдав себя за пользователя (что нормально, потому что они могут установить имя пользователя и пароль после установки), это было бы здорово :-) - person Mats Magnem; 11.01.2013
comment
@MatsMagnem, The installation itself does not need administrator privileges - Это неверно, чтобы установить службу Windows, вам нужно быть администратором на машине. - person seva titov; 13.01.2013
comment
Хорошо, это правда. Как бы то ни было, мой вопрос остается. И это если есть возможность делать то, что мне нравится, без необходимости запускать службу от имени пользователя sdministrator или доступа к реестру Windows. Многие крупные клиенты недовольны, когда мне приходится вносить изменения в реестр. Это должен быть действующий критерий для вопроса. - person Mats Magnem; 13.01.2013
comment
@MatsMagnem, возможно, вы этого не понимаете, но при установке службы Windows вы уже вносите изменения в реестр. Изменение еще одного ключа reg - это не то, чего вы не делаете во время установки. Предложенное мной решение работает для службы, работающей под учетной записью пользователя с низкими привилегиями, и вам не нужно изменять какой-либо ключ reg во время работы службы (только во время установки). Я проголосовал против вашего вопроса, потому что ваши критерии противоречат друг другу. Добавьте четкое объяснение, что вы ищете (и зачем вам это нужно), чтобы я мог снять свой голос против. - person seva titov; 13.01.2013
comment
Вы объясните ручное редактирование в реестре. Мне трудно внести ручное редактирование реестра в документацию по установке. Установка службы выполняется с помощью кода и не требует ручных действий. Приложение, создающее службу, имеет манифест, требующий прав администратора. Я понимаю, что нельзя выдавать себя за другое лицо. Таким образом, можно попробовать и безопасно отредактировать реестр в этом приложении. - person Mats Magnem; 14.01.2013
comment
Так что дело не в изменении реестра. Дело в том, что это руководство. А лицо, выполняющее установку, может не обладать квалификацией для безопасного внесения надлежащих изменений в реестр. Не во всех случаях я могу быть установщиком. Поэтому я ищу не ручной способ. Но может и не быть. Так что ответ на мой вопрос должен быть отрицательным, а не отрицательным. - person Mats Magnem; 14.01.2013

Ответ оказался отрицательным.

Я понимаю, что нет хорошего способа решить эту проблему так, как я просил. Должна быть ручная работа.

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

Пользователь с правами администратора и редактирование реестра - это для меня известные способы, но, как уже говорилось, я пытался избежать. Но на этот раз это, по-видимому, невозможно по моим критериям.

person Mats Magnem    schedule 13.01.2013
comment
-1: Чтобы изменить реестр из вашего кода, используйте Windows Registry API в процессе установки. Это не обязательно должно быть вручную. - person seva titov; 14.01.2013
comment
Другие предложения описывали ручное редактирование и не отвечали на мой конкретный вопрос. Это были альтернативные методы, а не то, о чем я просил. - person Mats Magnem; 14.01.2013
comment
Как уже упоминалось, вы можете написать компонент установщика, который при установке вашей службы также автоматически добавляет источник событий (и удаляет его при удалении). Вы признали, что установка должна выполняться как пользователь с правами администратора, поэтому решение явно существует, поэтому ответ был отрицательным. - person Peter; 16.12.2015
comment
@Peter интересный подход, вы бы выложили его как ответ. - person RoninCoder; 25.03.2016