windows 7 : donner quelques permissions sur les services à un utilisateur non-admin

Bon, ce fut long et pénible pour réussir à faire un truc simple avec ce joli Windows Seven : « permettre à un utilisateur sans droit de relancer un service », en l’occurrence « PS3 Media Server » que je tente d’héberger sur un Windows plutôt qu’un Linux pour de sombres raisons. Donc je me fais un aide-mémoire qui servira à d’autres et à d’autres cas similaires j’en suis sûr.
Bien sûr, hors de question de faire sauter l’UAC (User Access Control = popup casse-pied pour dire « oui je veux être admin ») et encore moins donner les droits admin à un compte qui ne l’est pas, ni le pass de l’admin. Juste pour rallumer un service, ce serait trop.

Quelques pistes sans succès

Pour ce qui est de faire un .bat contenant des « service stop/start MonService », il faut être admin.
Pour l’option qui consiste à cocher la case « toujours lancer en admin » ? non, pas sur les .bat…
Alors je le le compile en .exe avec n’importe quel « bat2exe » ? bah non, le .exe n’est pas signé par une autorité de certif. reconnue => blablablabla UAC encore
Ok, je génère mes propres « root certif », signe, compile, danse nu un soir de pleine lune et tout ça ??? non là c’est trop (pas la danse, la génération/ajout de mes propres clefs de certifs). Je dégomme pas les mouches au bazooka.
Bon, retour à l’option .bat. Les gens parlent de créer une tâche planifiée contenant l’appel à ce .bat, avec l’option admin puis faire un raccourci vers la tâche. Ca marche, pas de confirmation via l’UAC. Sauf que les tâches sont liées à l’utilisateur. Donc mon utilisateur sans droit ne la voit pas… La planifier en son nom ou l’inverse (dans son compte, planifier avec le compte et mot de passe de l’admin), pas mieux.
J’ai aussi tenté l’utilisation d’un outil tiers, appelé « elevate », pour lancer une commande avec des droits supérieurs. Oui, mais non, pour le non-admin, ça change rien, il faut obtenir ce droit, donc se signer.
Bref, c’est lourd.

The solution : SubInACL

Chez Microsoft, il y a un bout de Resource Kit, la commande SubInACL.exe. Elle permet de manipuler les permissions de n’importe quel objet : fichiers, imprimantes, services etc. Youpiiii.
La syntaxe est bien moisie, mais ça marche.
Il faut :

  • Lancer une fenêtre DOS « en tant qu’administrateur »
  • Taper la commande suivante (dans mon cas, lire la doc pour le reste) :
    C:\Program Files\Windows Resource Kits\Tools>subinacl /service "PS3 Media Server" /GRANT=MAMACHINE\monutilisateursansdroit=TO
    la liste des codes est ici : http://www.eventlogblog.com/blog/2007/11/setting-service-permissions-wi.html
  • Réaliser que je ne sais quel droit générique de l’admin tombe du coup. Je me suis retrouvé avec tout le monde capable de relancer ce service SAUF l’admin 🙂 ‘suffit d’appliquer la commande à lui-même

Et voilà

Autre piste : SETACL

Lorsque j’ai essayé avec setacl, ça ne fonctionnait pas. Je n’avais pas compris qu’il fallait lancer la fenêtre DOS en admin, à ce moment là, comme je l’ai fait pour SubInACL. Je pense que le problème venait de là. La syntaxe donnait un truc comme ça :
setacl -on "PS3 Media Server" -ot srv -ace "n:monutilisateursansdroit;p:start_stop,read" -actn ace

Voilà. Evidemment, un petit sudo, ce serait quand même plus simple. Mais avec un OS qui ne sait rien faire de base en ligne de commande… Ah quoi que, peut-être avec du powershell etc… Il aurait bien fallu une 20aine de ligne de baratin pour y arriver à mon avis.
Amusez-vous bien.
Ah oui, à la fin, un .bat tout bête faisant un net stop/start « PS3 Media Server » passe donc tout seul.

Ca doit marcher sous Vista aussi, voire Windows Server 2008.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.