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:
Voici quelques autres critères que j'ai:
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.
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.
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.