web-dev-qa-db-ja.com

EventLog書き込み許可

私の質問は、Windowsイベントログへの書き込み許可に関するものです。これに関するいくつかの投稿を見て、問題を解決する方法を見つけましたが、現在のシナリオではこれらはどれも受け入れられません。

.NET 4.0ではC#を使用しています。 EventLogクラスを使用します: EventLog class

つまり、イベントログに書き込む必要がある権限に到達するために、認証されたユーザーとパスワードで偽装または認証する方法があるかどうかを確認する必要があります。サーバーは常にWindows Serverファミリーに属しますが、バージョンは異なる場合があります。

私のアプリケーションは、次のアカウントのいずれかで実行されているWindowsサービスです。

  • ネットワークサービス
  • ローカルサービス
  • ローカルシステム
  • 制限された権限を持つユーザー(ユーザーまたはドメインユーザーグループ)

ここに私が持っているいくつかの他の基準があります:

  • サーバーのローカル管理者でなく、管理者としてサービスユーザーを配置できません。
  • レジストリを編集または変更できません
  • サーバーのUACまたはグループポリシーを変更できない
  • 管理者権限を持つユーザーがいますが、サービスの実行に使用できません
  • イベントログは、リモートマシン上ではなく、常にローカルイベントログになります
  • ログは、おそらく常に「アプリケーション」ログになります
  • ソースは異なる場合があります、それが問題の核心であるようです

私の質問は:これは可能ですか?

コードでユーザーを偽装して、必要なものを実現できますか?私は、Webサービスに接続するとき、SMTPサーバーにログオンするとき、そしてもちろんデータベースなどに詰まるときにそれを行います。

私はこのクラスにつまずいた: EventLogPermission Class

しかし、クラスの使用方法について良いコンセプトを得ることができないようです。

私の問題をうまく表現できたことを願っています。私の基準のため、これを別の投稿の複製とは考えません。

29
Mats Magnem

答えは「いいえ」であることが示されました。

私が要求した方法でこれを解決する良い方法はないことを理解しています。手動での作業が必要です。

したがって、このシナリオで選択するソリューションは、管理者としてサービスを実行できない、または手動でレジストリを編集できないお客様は、イベントログへのログ記録に関する機能を使用できないということです。そして、設定からロギングを有効または無効にすることを可能にします。

管理者ユーザーとレジストリ編集は私にとって既知の方法ですが、述べたように、私は避けようとしていました。しかし、それは、今回の私の基準では不可能なようです。

1
Mats Magnem

デフォルトでは、認証されたユーザーはアプリケーションイベントログに書き込むことができます。ただし、管理者のみが新しいイベントソースを作成できます。サービスのインストール時にすべてのイベントソースがわかっている場合は、それらのソースを事前に登録することをお勧めします。そうすれば、すべてのセットアップが完了します。登録は EventLog.CreateEventSource への単純な呼び出しです。

イベントソースの柔軟性を高める必要がある場合は、権限をカスタマイズできます。これらのデフォルトは、レジストリキーを調整することでカスタマイズできます。

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

これに記載されているプロセス KB記事 。 Server 2008以降で利用可能なOSの一部であるwevtutilツールを使用すると、regeditを使用するよりも少し簡単になります。

18
seva titov