Nous avons une suite de services Windows fonctionnant sur nos serveurs qui effectuent une multitude de tâches automatisées indépendamment les unes des autres, à l'exception d'un service qui s'occupe des autres services.
Si l'un des services ne répond pas ou se bloque, ce service tente de le redémarrer et, si une exception est générée au cours de la tentative, envoie un e-mail à l'équipe de support afin qu'elle puisse redémarrer le service elle-même.
Après avoir effectué quelques recherches, j'ai trouvé quelques «solutions» allant de la solution de contournement mentionnée dans le KB907460 à l'attribution du compte sous lequel le service exécute des droits d'administrateur.
Je ne suis pas à l'aise avec l'une ou l'autre de ces méthodes. Je ne comprends pas les conséquences de la première méthode décrite dans l'article de la base de connaissances de Microsoft, mais je ne souhaite absolument pas donner à l'administrateur un accès au compte sous lequel le service est exécuté. .
J'ai parcouru rapidement la stratégie de sécurité locale et, outre la stratégie qui définit si un compte peut ouvrir une session en tant que service, je ne vois rien d'autre qui ressemble à une référence à des services.
Nous utilisons ceci sur Server 2003 et Server 2008, donc toute idée ou tout pointeur serait gracieusement reçu!
Précision: je ne veux pas donner la possibilité de démarrer / arrêter / redémarrer TOUS les services à un utilisateur ou à un groupe donné - je veux pouvoir donner la permission de le faire uniquement à des services spécifiques , à un utilisateur ou à un groupe donné.
Précision supplémentaire: les serveurs sur lesquels je dois accorder ces autorisations n'appartiennent pas à un domaine. Ce sont deux serveurs Internet qui reçoivent les fichiers, les traitent et les envoient à des tiers, tout en servant plusieurs sites Web. La stratégie de groupe Active Directory n'est pas possible. Désolé de ne pas avoir précisé cela.
Réponses:
Il ne semble pas y avoir de moyen graphique de faire cela à moins que vous ne fassiez partie d'un domaine - du moins pas d'un domaine que je pourrais trouver nulle part - j'ai donc creusé un peu plus et j'ai trouvé une réponse qui fonctionne pour notre sitaution.
Je ne comprenais pas ce que la représentation sous forme de chaîne signifiait dans l'article de la base de connaissances, mais creuser un peu m'a fait comprendre qu'il s'agissait de la syntaxe SDDL. Les recherches plus approfondies m’ont conduit à cet article d’Alun Jones qui explique comment obtenir le descripteur de sécurité pour un service et ce que chaque bit signifie. MS KB914392 a plus de détails.
Pour ajouter au descripteur de sécurité existant du service, utilisez
sc sdshow "Service Name"
pour obtenir le descripteur existant. S'il s'agit d'un ancien service Windows .NET simple, comme c'est le cas chez nous, le descripteur de sécurité devrait ressembler à ceci:Nous devions accorder des autorisations
RP
(pour démarrer le service),WP
(pour arrêter le service),DT
(pour suspendre / poursuivre le service) etLO
(pour interroger le statut actuel du service). Cela pourrait être fait en ajoutant notre compte de service au groupe Utilisateurs avec pouvoir, mais je souhaite uniquement accorder un accès individuel au compte sous lequel le service de maintenance est exécuté.Utilisant
runas
pour ouvrir une invite de commande sous le compte de service, j’ai exécutéwhoami /all
ce qui m’a donné le SID du compte de service, puis construit le SDDL supplémentaire ci-dessous:Ceci est ensuite ajouté à la section D: de la chaîne SDDL ci-dessus:
Ceci est ensuite appliqué au service en utilisant la
sc sdset
commande:Si tout se déroule comme prévu, le service peut alors être démarré, arrêté, mis en pause et son statut doit être interrogé par l'utilisateur défini par le SID ci-dessus.
la source
SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop"
CCLCSW
aux autorisations SDDL (en plus de RPWPDTLO) afin que je puisse également voir le service répertorié lorsque j'exécute Get-Service (ce qui nécessite d'abord de modifier le SDDL pour que le service du gestionnaire de contrôle de service scmanager puisse répertorier les services accessibles). . Je devais aussiSW
pouvoir redémarrer certains services.Je viens d'avoir le même problème.
Vous pouvez utiliser SubInACL.exe à partir du Kit de ressources. Téléchargez l'utilitaire autonome ici: http://www.microsoft.com/download/en/details.aspx?displaylang=fr&id=23510
Utilisez
msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractTo
pour extraire les fichiers si vous ne voulez pas installer le .msisubinacl /service SERVICE_NAME /grant=COMPUTER_NAME\USERNAME=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 aux utilisateurs le droit de gérer des services dans Windows 2000
ou de taper
subinacl /help
Remarque: n'essayez pas
subinacl /service SERVICE_NAME /perm
car cela pourrait vous causer des ennuis (leçon apprise: P). Le nom peut être trompeur (perm! = Permission), car il supprime toutes les autorisations accordées à tous les utilisateurs (même l'administrateur!).la source
Vous recherchez Configuration 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 également configurer les 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égie de groupe.
Pour ajouter des services qui n'existent que sur une autre machine:
la source
gpedit.msc
, car la fenêtre "Gérer le serveur" ne répertorie pas de nœud de stratégies. Si tel est le cas, je ne vois aucun élément sous le nœud Paramètres de sécurité faisant référence à "Services système", comme vous le suggérez ci-dessus, que ce soit sur Server 2008 ou Server 2003.J'ai utilisé SubinAcl (comme suggéré par patrx) pour pouvoir démarrer MySQL en tant qu'utilisateur de domaine normal (pas administrateur) et cela fonctionne parfaitement! (la commande doit cependant être exécutée en tant que -local au moins- Admin)
La commande est:
Il suffit de noter que j'ai entré l'utilisateur sans le préfixer avec le domaine ... sinon, la commande échoue lors de l'analyse syntaxique!
la source