67 votes

Comment accorder des autorisations de démarrage / arrêt / redémarrage sur un service à un utilisateur ou groupe arbitraire sur un serveur non membre du domaine ?

Nous avons une suite de services Windows s'exécutant sur nos serveurs qui effectuent un tas de tâches automatisées indépendamment les unes des autres, à l'exception d'un service qui s'occupe des autres services.

Dans le cas où l'un des services ne répondrait pas ou serait bloqué, ce service tente de redémarrer le service et, en cas de levée d'une exception pendant la tentative, envoie un e-mail à l'équipe de support, afin qu'ils puissent redémarrer le service eux-mêmes.

Après avoir fait un peu de recherche, j'ai trouvé quelques 'solutions' allant de la solution de contournement mentionnée dans KB907460 à l'octroi de droits d'administrateur au compte sous lequel le service s'exécute.

Je ne suis à l'aise avec aucune de ces méthodes - je ne comprends pas les conséquences de la première méthode telle qu'indiquée dans l'article de la base de connaissances de Microsoft, mais je ne veux certainement pas donner un accès administratif au compte sous lequel le service s'exécute.

J'ai jeté un rapide coup d'œil dans la Politique de sécurité locale et en dehors de la politique qui définit si un compte peut se connecter en tant que service, je ne vois rien d'autre qui semble se référer aux services.

Nous utilisons Server 2003 et Server 2008, donc toute idée ou indication serait grandement appréciée!


Clarification: Je ne veux pas accorder la capacité de démarrer/arrêter/redémarrer TOUS les services à un utilisateur ou à un groupe donné - je veux être en mesure de donner cette permission sur des services spécifiques seulement, à un utilisateur ou à un groupe donné.


Clarification Supplémentaire: Les serveurs sur lesquels j'ai besoin d'accorder ces autorisations ne font pas partie d'un domaine - ce sont deux serveurs en accès internet qui reçoivent des fichiers, les traitent et les envoient à des tiers, en plus de servir quelques sites web, donc la Stratégie de groupe Active Directory n'est pas possible. Désolé de ne pas avoir été plus clair.

0 votes

Vous pourriez également jeter un coup d'œil à cet article de Microsoft, qui fait également référence aux modifications de GP : support.microsoft.com/kb/256345

4 votes

Désolé je t'ai manqué... J'étais occupé. Tu cherchais quelque chose comme ça: serverfault.com/questions/15147/…

0 votes

Je sais que c'est une question très ancienne, mais avez-vous envisagé d'utiliser les options de 'récupération' dans le gestionnaire de services Windows ?

0voto

Safwan Points 101

Voici un fichier batch qui automatise les tâches liées à l'octroi de permissions à un utilisateur ou un groupe spécifique pour arrêter et démarrer des services Windows spécifiques. Il utilise les commandes intégrées de Windows sc.exe et wmic.exe, donc il n'y a pas de dépendances sur des outils externes.

Le fichier batch a 5 codes de sortie pour aider dans les processus d'automatisation:

  • -1 Le fichier batch s'est arrêté de manière inattendue.
  • 0 Le fichier batch s'est terminé avec succès.
  • 1 Échec pour obtenir l'identifiant de l'utilisateur.
  • 2 Échec pour obtenir les permissions actuelles du service.
  • 3 Échec pour définir les nouvelles permissions sur le service.

Avant d'exécuter le fichier batch, assurez-vous de remplacer les valeurs dans les variables suivantes pour correspondre à votre environnement:

Définir "$ServiceName=TestService"

Définir "$UserName=TestUser"

Définir "$UserDomain=MyDomain"

Note: Le fichier batch n'a pas de vérification d'erreur, par exemple, il ne vérifie pas si les services existent réellement, ou si l'utilisateur a déjà obtenu les permissions adéquates sur le service.

@Echo Off & Cls
SetLocal EnableExtensions EnableDelayedExpansion
Set "$ExitCode=-1"

Set "$ServiceName=TestService"
Set "$UserName=TestUser"
Set "$UserDomain=MyDomain"

Call :GetUserSID "!$UserDomain!" "!$UserName!" && (
 Call :ServiceGetPermissions "!$ServiceName!" && (
  Set "$ServicePermissions=!$ServicePermissions:)S:(=)@:(!"
  For /f "Tokens=1 Delims=@" %%x In ("!$ServicePermissions!") Do Set "$ServicePermissions=%%x"
  Set "$ServicePermissions=!$ServicePermissions!(A;;RPWPCR;;;!$UserSID!)"
  Call :ServiceSetPermissions "!$ServiceName!" "!$ServicePermissions!" && Set "$ExitCode=0" || Set "$ExitCode=3"
 ) || (
  Set "$ExitCode=2"
 )
) || (
 Set "$ExitCode=1"
)
Exit /b !$ExitCode!

:GetUserSID  
:-------------------------------------
Set "#GetUserSID=-1"
Set "#UserDomain=%~1"
Set "#UserAccount=%~2"
Set "$UserSID="
For /f "Skip=1 Tokens=1" %%x In ('2^>Nul wmic.exe UserAccount Where ^(Name^="!#UserAccount!" And Domain^="!#UserDomain!"^) Get SID') Do (
 If Not Defined $UserSID Set "$UserSID=%%x"
 If /I Not "!$UserSID:~0,6!"=="S-1-5-" Set "$UserSID="
)
If Defined $UserSID Set "#GetUserSID=0" Else Set #GetUserSID=2"
Exit /b !#GetUserSID!

:ServiceGetPermissions 
:-----------------------------------
Set "#ServiceGetPermissions=-1"
Set "#ServiceName=%~1"
Set "$ServicePermissions="
For /f "Skip=1 Tokens=1" %%x In ('2^>Nul sc.exe sdshow "!#ServiceName!"') Do Set "$ServicePermissions=%%x"
If Defined $ServicePermissions Set "#ServiceGetPermissions=0" Else Set "#ServiceGetPermissions=3"
Exit /b !#ServiceGetPermissions!

:ServiceSetPermissions  
:--------------------------------------------------------
Set "#ServiceSetPermissions=-1"
Set "#ServiceName=%~1"
Set "#ServicePermissions=%~2"
>Nul 2>&1 sc.exe sdset "!#ServiceName!" "!#ServicePermissions!" && Set "#ServiceSetPermissions=0" || Set "#ServiceSetPermissions=5"
Exit /b !#ServiceSetPermissions!

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X