2009-12-16 5 views
10

J'ai écrit un service sur lequel un site web peut exécuter une commande à distance en utilisant la méthode ExecuteCommand. J'ai remarqué que si le site Web n'est pas exécuté sous un utilisateur qui est un administrateur sur l'ordinateur distant, j'obtiens une exception d'autorisation refusée en essayant d'exécuter la commande.permissions servicecontroller

La classe servicecontroller ne vous permet même pas de spécifier les paramètres d'authentification. Est-ce correct? Existe-t-il un ensemble spécifique de privilèges dont l'utilisateur a besoin plutôt que d'un administrateur, étant donné que je suis réticent à ajouter tous les utilisateurs des serveurs Web dans notre cluster en tant qu'administrateurs locaux sur la machine de service?

Répondre

5

Vous devrez emprunter l'identité d'un utilisateur admin pour le thread en cours puis revenir en arrière. Recherchez WindowsIdentity.Impersonate() dans MSDN. ServiceController utilisera le principal du thread actuel pour effectuer les appels du registre et du gestionnaire de contrôle de service et vous devez vous assurer qu'il est défini sur un utilisateur admin si vous souhaitez manipuler les services. L'inconvénient est que vous aurez besoin de stocker le mot de passe quelque part pour le compte, assurez-vous que vous utilisez SecureString et ne pas stocker le mot de passe en texte brut.

+0

Si possible, je suggère que l'utilisateur entre son mot de passe administrateur chaque fois qu'ils exécutent la commande. De cette façon, vous évitez de le stocker. Cela peut ne pas être faisable dans votre cas, cependant. – John

Questions connexes