webentwicklung-frage-antwort-db.com.de

EventLog-Schreibrechte

Meine Frage bezieht sich auf Schreibberechtigungen für das Windows-Ereignisprotokoll. Ich habe mich in mehreren Posts umgesehen und einige Wege gefunden, um mein Problem zu lösen, aber keines davon ist für mein aktuelles Szenario akzeptabel.

Ich benutze C # in .NET 4.0. Ich benutze die EventLog-Klasse: EventLog-Klasse

Kurz gesagt, ich muss sehen, ob es eine Möglichkeit gibt, sich mit einem authentifizierten Benutzer und einem authentifizierten Kennwort auszugeben oder zu authentifizieren, um das Recht zu erreichen, in das Ereignisprotokoll zu schreiben. Der Server gehört immer zur Windows Server-Produktfamilie, die Version kann jedoch variieren.

Meine Anwendung ist ein Windows-Dienst, der mit einem der folgenden Konten ausgeführt wird:

  • Netzwerkdienst
  • Service vor Ort
  • Lokales System
  • Benutzer mit eingeschränkten Rechten (Benutzer oder Domänenbenutzergruppen)

Hier sind einige andere Kriterien, die ich habe:

  • Ich kann den Dienstbenutzer nicht als Administrator festlegen, auch nicht als lokalen Administrator auf dem Server
  • Ich kann die Registrierung nicht bearbeiten oder ändern
  • Ich kann die Benutzerkontensteuerung oder Gruppenrichtlinien auf dem Server nicht ändern
  • Ich habe einen Benutzer mit Administratorrechten, aber er kann nicht zum Ausführen des Dienstes verwendet werden
  • Das Ereignisprotokoll ist immer das lokale Ereignisprotokoll, nicht auf einem Remotecomputer
  • Das Protokoll wird wahrscheinlich immer das Protokoll "Anwendung" sein
  • Die Quelle kann variieren , und das scheint der Kern des Problems zu sein

Meine Frage ist: Ist das überhaupt möglich?

Kann ich mich in meinem Code als Benutzer ausgeben, um das zu erreichen, was ich brauche? Ich mache das, wenn ich mich mit Webdiensten verbinde, mich bei SMTP-Servern anmelde und mich natürlich bei Datenbanken anmelde usw.

Ich bin über diese Klasse gestolpert: EventLogPermission Class

Aber ich kann anscheinend kein gutes Konzept für die Verwendung der Klasse finden.

Ich hoffe ich habe mein Problem gut ausgedrückt. Ich halte dies aufgrund meiner Kriterien nicht für ein Duplikat eines anderen Posts.

29
Mats Magnem

Die Antwort lautete "nein".

Mir ist klar, dass es keinen guten Weg gibt, dies so zu lösen, wie ich es gewünscht habe. Es muss eine manuelle Arbeit erledigt werden.

Die Lösung, die ich für dieses Szenario auswähle, besteht darin, dass Kunden, die den Dienst nicht als Administrator ausführen oder die Registrierung nicht manuell bearbeiten können, die Funktionen zur Protokollierung im Ereignisprotokoll nicht verwenden können. Und ich werde es möglich machen, die Protokollierung von der Konfiguration zu aktivieren und zu deaktivieren.

Administratorbenutzer und Registrierungsbearbeitung sind für mich bekannte Methoden, aber wie gesagt, etwas, das ich vermeiden wollte. Aber diesmal ist das nach meinen Kriterien anscheinend nicht möglich.

1
Mats Magnem

Standardmäßig kann jeder authentifizierte Benutzer in das Anwendungsereignisprotokoll schreiben. Es können jedoch nur Administratoren neue Ereignisquellen erstellen. Wenn alle Ereignisquellen zum Zeitpunkt der Installation des Dienstes bekannt sind, empfehle ich, diese Quellen im Voraus zu registrieren, damit Sie alle eingerichtet sind. Das Registrieren ist ein einfacher Aufruf von EventLog.CreateEventSource .

Wenn Sie mehr Flexibilität für Ereignisquellen benötigen, können Sie die Berechtigungen anpassen. Diese Standardeinstellungen können durch Ändern eines Registrierungsschlüssels angepasst werden:

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

Ein in diesem KB Article beschriebener Prozess. Ein wevtutil -Tool, das Teil des Betriebssystems ist und auf Server 2008 und höher verfügbar ist, macht es ein bisschen einfacher als die Ausführung von regedit.

18
seva titov