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 ?

55voto

Eric Points 161

Il ne semble pas y avoir de moyen basé sur l'interface graphique de faire cela à moins d'être connecté à un domaine - du moins je n'ai rien trouvé nulle part - donc j'ai creusé un peu plus et j'ai trouvé une réponse qui fonctionne pour notre situation.

Je n'ai pas compris ce que représentait la chaîne dans l'article de la base de connaissances, mais en creusant un peu plus j'ai découvert que c'était de la syntaxe SDDL. En creusant davantage, je suis tombé sur cet article d'Alun Jones qui explique comment obtenir le descripteur de sécurité pour un service et ce que signifie chaque bit. MS KB914392 a plus de détails.

Pour ajouter au descripteur de sécurité existant du service, utilisez sc sdshow "Nom du service" pour obtenir le descripteur existant. S'il s'agit simplement d'un service Windows .NET - comme c'est le cas pour nous - le descripteur de sécurité devrait ressembler à ceci :

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)S:(AU;FA
;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

Nous devions accorder les autorisations RP (pour démarrer le service), WP (pour arrêter le service), DT (pour mettre en pause/continuer le service) et LO (pour interroger le statut actuel du service). Cela pourrait être fait en ajoutant notre compte de service au groupe Utilisateurs avec pouvoir, mais je veux seulement accorder un accès individuel au compte sous lequel le service de maintenance s'exécute.

En utilisant runas pour ouvrir une invite de commande sous le compte de service, j'ai exécuté whoami /all qui m'a donné l'identifiant de sécurité du compte de service, puis j'ai construit le SDDL supplémentaire ci-dessous :

(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)

Cela est ensuite ajouté à la section D: de la chaîne SDDL ci-dessus :

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;RPWP
DTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSWRPWPDTLOC
RSDRCWDWO;;;WD)

Cela est ensuite appliqué au service en utilisant la commande sc sdset (avant le texte S:) :

sc sdset "Nom du service" D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;
CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU
)(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSW
RPWPDTLOCRSDRCWDWO;;;WD)

Si tout se passe comme prévu, le service peut ensuite être démarré, arrêté, mis en pause et son statut peut être interrogé par l'utilisateur défini par l'identifiant de sécurité ci-dessus.

10 votes

Pour une façon plus facile de faire la même chose, vous devriez envisager d'utiliser SetACL.exe. Voici un exemple de comment l'utiliser pour définir des autorisations sur un service : SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop"

2 votes

Vous pourriez utiliser Process Hacker (processhacker.sourceforge.net) pour une interface graphique permettant de configurer tous les services. Il inclut les services cachés et vous permet de configurer plus de paramètres d'un service, tels que le chemin binaire et les autorisations.

1 votes

Le gui CoreTech a fonctionné pour moi. Difficile de croire que GUI n'existe pas déjà dans Windows. En lisant les réponses ici, comment peut-il être si difficile? Gros échec de la part de Microsoft.

35voto

aaronbauman Points 641

J'ai eu le même problème.
Vous pourriez utiliser SubInACL.exe de la trousse à outils. Téléchargez l'utilitaire autonome ici : http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23510

Utilisez msiexec /a CheminFichierMSI /qb TARGETDIR=RépertoireExtraction pour extraire les fichiers si vous ne souhaitez pas installer le .msi

  1. Ouvrez une invite de commandes en tant qu'Administrateur
  2. Allez dans le répertoire où vous avez placé le .exe
  3. Exécutez subinacl /service NOM_DU_SERVICE /grant=ORDINATEUR\NOM_UTILISATEUR=TOP

T = Démarrer le service
O = Arrêter le service
P = Mettre en pause/continuer le service

Référence complète : Comment accorder des droits aux utilisateurs pour gérer des services dans Windows 2000
ou tapez subinacl /help

Remarque : ne pas essayer subinacl /service NOM_DU_SERVICE /perm car cela pourrait vous causer des problèmes (leçon apprise :P). Le nom peut être trompeur (perm != permission), car il supprime toutes les autorisations pour tous les utilisateurs (même l'Admin!).

0 votes

Impossible de fusionner les comptes SO et SF désolé Pat.

0 votes

@Chopper3 Merci pour votre réponse. En fait, j'ai 2 comptes SO : l'un est enregistré et associé à ce compte SF; l'autre est un compte SO non enregistré que j'avais avant de m'inscrire (utilisant la même adresse e-mail). J'espérais que les deux pourraient être fusionnés afin que je puisse suivre les publications que j'ai faites précédemment. Comme mentionné ici, j'ai essayé de signaler une publication mais je n'ai pas pu le faire sur SO (1 réputation). C'est pourquoi j'ai signalé cette publication. J'ai également essayé d'envoyer un e-mail à team@stackoverflow.com il y a plus de deux semaines mais je n'ai pas reçu de réponse. Pourriez-vous me diriger vers la bonne personne ou le bon endroit s'il vous plaît?

1 votes

Vérifiez les détails de cette procédure sur MSDN: support.microsoft.com/?kbid=288129

4voto

Ryan Bolger Points 16332

Vous cherchez Configuration de l'ordinateur - Stratégies - Paramètres Windows - Paramètres de sécurité - Services système

Là, vous pouvez non seulement définir le type de démarrage du service, mais vous pouvez également configurer les listes de contrôle d'accès (ACL) de sécurité pour chaque service. Par défaut, l'interface ne répertorie que les services installés sur la machine sur laquelle vous exécutez l'Éditeur de stratégies de groupe.

Pour ajouter des services qui n'existent que sur une autre machine :

  • exporter la clé de registre du service de l'autre machine
  • importer sur la machine avec le gpedit
  • appliquer la stratégie
  • supprimer la clé importée

0 votes

Je suppose que vous voulez faire cela via gpedit.msc, car la fenêtre "Gérer le serveur" ne répertorie pas un nœud de politiques. Si tel est le cas, je ne vois pas d'élément sous le nœud Paramètres de sécurité qui fait référence aux "Services du système" comme vous le suggérez ci-dessus, que ce soit sur Server 2008 ou Server 2003.

0 votes

Ah oui. Je supposais que vous aviez l'intention de faire ces changements via une stratégie de groupe.

1 votes

En effet - ce ne sont pas des serveurs membres. Existe-t-il un moyen de cibler cela en utilisant la politique locale, ou une autre méthode?

3voto

AndrewC Points 3135

J'ai utilisé SubinAcl (comme suggéré par patrx) pour pouvoir démarrer MySQL en tant qu'utilisateur de domaine régulier (pas admin) et ça fonctionne parfaitement ! (la commande doit cependant être exécutée en tant qu'Admin - local au moins)

La commande est :

[CHEMIN_VERS_SUBACL]\subinacl.exe /service MySQL /grant=[Utilisateur de domaine - Sans domaine]=TOP

Remarquez simplement que j'ai entré l'utilisateur sans préfixe avec le domaine... sinon la commande échoue lors de l'analyse de commande !

3voto

Marcos Bento Points 539

Je voudrais recommander 3 options comme solutions.

Je sais que c'est une vieille question, mais le défi posé dans la question reste (même sur les versions ultérieures de Windows). Et certaines des réponses proposées sont anciennes et certaines ne fonctionnent plus (ou les outils offerts n'existent plus).

Tout d'abord, MikeKullis ci-dessus a commenté à propos de "l'interface graphique CoreTech", mais je ne vois pas d'autre réponse ou commentaire qui explique ce qu'il voulait dire par là. Cela s'appelle Security Service Editor, et c'est gratuit. La société (CoreTech) propose plusieurs outils pour aider avec les tâches d'administration de Windows.

Je réalise que certaines personnes seront méfiantes ou hésiteront à installer un outil, mais vraiment pour la tâche spécifique d'indiquer facilement qu'un utilisateur donné devrait avoir l'autorisation de démarrer/arrêter un service spécifique, c'est la solution la plus facile. En quelques clics, on a une interface utilisateur qui ressemble à l'éditeur traditionnel de permissions de fichiers Windows, mais c'est pour contrôler les permissions de service (pour un service spécifique, pour un utilisateur spécifique - et offrant la même interface utilisateur pour "ajouter" un utilisateur, utiliser la fonction "rechercher" pour voir une liste d'utilisateurs sur la machine, etc.)

Deuxièmement, pour une solution plus "intégrée", on peut ajouter des "Modèles de sécurité" à mmc, et faire la même chose. C'est un peu plus compliqué, mais pas autant que certaines autres solutions en ligne de commande. Consultez une discussion sur son utilisation (et de nombreuses autres options, y compris certaines également mentionnées dans les réponses et commentaires ici) dans divers articles comme celui-ci.

Troisièmement et enfin, si quelqu'un préfère au moins utiliser un outil "MS", notez comment ce billet de blog (et d'autres) discutent de l'utilisation de l'outil Sysinternals Process Explorer, qui peut également offrir cette interface utilisateur facile pour contrôler les permissions de démarrage/arrêt pour un service donné par un utilisateur donné. Un petit inconvénient est que le service doit être en cours d'exécution (car vous utilisez ensuite ProcExp pour trouver le processus pour ce service, et utilisez une fonction de propriétés pour accéder à un onglet "services" qu'il propose ensuite). Pour certains, cela peut valoir mieux que l'une des deux options ci-dessus.

Mais comme Mike ci-dessus, je préfère l'outil CoreTech SSE. Il est gratuit, simple, et s'est avéré sûr et efficace dans mon utilisation sur plusieurs dizaines de postes de travail et serveurs.

J'espère que ce qui précède pourra aider d'autres personnes qui trouveront cette question.

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