web-dev-qa-db-fra.com

Autorisations d'écriture EventLog

Ma question concerne les autorisations d'écriture dans le journal des événements Windows. J'ai regardé autour de plusieurs messages concerant cela, et j'ai trouvé des moyens de résoudre mon problème, mais aucun d'entre eux n'est acceptable pour mon scénario actuel.

J'utilise C # dans .NET 4.0. J'utilise la classe EventLog: classe EventLog

En bref, je dois voir s'il existe un moyen d'usurper l'identité ou d'authentifier avec un utilisateur et un mot de passe authentifiés pour atteindre le droit dont j'ai besoin pour écrire dans le journal des événements. Le serveur sera toujours dans la famille Windows Server, mais la version peut varier.

Mon application est un service Windows exécuté avec l'un des comptes suivants:

  • Service réseau
  • Service local
  • Système local
  • Utilisateur avec droits restreints (utilisateurs ou groupes d'utilisateurs de domaine)

Voici quelques autres critères que j'ai:

  • Je ne peux pas mettre l'utilisateur du service en tant qu'administrateur, pas même l'administrateur local sur le serveur
  • Je ne peux pas modifier ou altérer le registre
  • Je ne peux pas modifier l'UAC ni aucune stratégie de groupe sur le serveur
  • J'ai un utilisateur avec des droits d'administrateur, mais il ne peut pas être utilisé pour exécuter le service
  • Le journal des événements sera toujours le journal des événements local, pas sur une machine distante
  • Le journal sera probablement toujours le journal "Application"
  • La source peut varier , et cela semble être le cœur du problème

Ma question est: Est-ce que cela est possible?

Puis-je me faire passer pour un utilisateur dans mon code pour obtenir ce dont j'ai besoin? Je le fais lors de la connexion aux services Web, de la connexion aux serveurs SMTP et bien sûr de la connexion aux bases de données, etc.

Je suis tombé sur cette classe: Classe EventLogPermission

Mais je n'arrive pas à avoir un bon concept sur la façon d'utiliser la classe.

J'espère avoir bien exprimé mon problème. Je ne considère pas cela comme un doublon d'un autre poste en raison de mes critères.

29
Mats Magnem

La réponse s'est avérée "non".

Je me rends compte qu'il n'y a pas de bon moyen de résoudre ce problème comme je l'ai demandé. Un travail manuel doit être effectué.

La solution que j'ai choisie pour ce scénario est donc que les clients qui ne peuvent pas exécuter le service en tant qu'administrateur ou effectuer une modification manuelle du registre ne peuvent pas utiliser les fonctions de journalisation dans le journal des événements. Et je vais permettre d'activer et de désactiver la journalisation depuis la config.

L'administrateur et la modification du registre sont des moyens connus pour moi, mais comme indiqué, j'essayais d'éviter. Mais cela ne semble pas possible cette fois selon mes critères.

1
Mats Magnem

Par défaut, tout utilisateur authentifié peut écrire dans le journal des événements de l'application. Cependant, seuls les administrateurs peuvent créer de nouvelles sources d'événements. Si toutes les sources d'événements sont connues au moment de l'installation du service, je vous recommande d'enregistrer ces sources à l'avance, alors vous serez tous configurés. L'enregistrement est un simple appel à EventLog.CreateEventSource .

Si vous avez besoin de plus de flexibilité sur les sources d'événements, vous pouvez personnaliser les autorisations. Ces valeurs par défaut peuvent être personnalisées en modifiant une clé de registre:

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

Un processus décrit dans ce KB Article . Un outil wevtutil, qui fait partie du système d'exploitation, disponible sur Server 2008 et supérieur, le rend un peu plus facile que de passer par regedit.

18
seva titov