31

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

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

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

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

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

これが私が持っている他のいくつかの基準です:

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

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

必要なことを達成するために、コード内でユーザーになりすますことはできますか?Webサービスに接続するとき、SMTPサーバーにログオンするとき、そしてもちろんデータベースなどにログインするときに、これを行います。

私はこのクラスに出くわしました: EventLogPermissionクラス

しかし、私はクラスの使い方について良い概念を得ることができないようです。

私は自分の問題をうまく表現できたと思います。私の基準のため、これを別の投稿の複製とは見なしません。

4

2 に答える 2

24

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

イベント ソースにさらに柔軟性が必要な場合は、アクセス許可をカスタマイズできます。これらのデフォルトは、レジストリ キーを微調整することでカスタマイズできます。

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

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

于 2013-01-10T06:26:30.957 に答える
2

答えは「いいえ」であることがわかりました。

私が要求した方法でこれを解決する良い方法がないことを認識しています。手作業が行われている必要があります。

したがって、このシナリオで私が選んだ解決策は、管理者としてサービスを実行できない、または手動でレジストリを編集できない顧客は、イベント ログへのログ記録に関する機能を使用できないということです。また、config からロギングを有効または無効にできるようにします。

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

于 2013-01-13T20:27:05.263 に答える