Sécurité
Nouveaux PowerToys d’élévation pour Windows Vista
Michael Murgolo
Vue d'ensemble:
- Exécuter en tant qu'administrateur pour outils de script de fournisseurs tiers
- Exécuter en tant qu'utilisateur différent
- Invite de commande en tant que système et Invite PowerShell en tant que système
- Gadget d'élévation glisser-déplacer
Télécharger le code de cet article: Elevation2008_06.exe (197KB)
Bienvenue dans cette nouvelle édition des PowerToys d'élévation pour Windows Vista. J'ai examiné tout cela en détail dans le numéro de juin 2007 de TechNet Magazine. Nous voici un an plus tard. A cette occasion, je voudrais vous expliquer comment j'ai étendu la fonction Exécuter en tant qu'administrateur à certains
de mes outils de script de fournisseurs tiers préférés, comment vous pouvez remplacer une fonction pratique de Windows® XP supprimée dans Windows Vista® et examiner certains des outils utiles inclus dans les PowerToys d'élévation.
Exécuter en tant qu'administrateur pour outils de script supplémentaires
Dans l'article précédent (disponible sur technet.microsoft.com/magazine/cc162321.aspx), j'abordais notamment la question de l'activation de l'option Exécuter en tant qu'administrateur pour les outils de script Windows natifs. Pour cet article, j'ai créé des PowerToys Exécuter en tant qu'administrateur pour certains outils de script de fournisseurs tiers :
- AutoIt v3 (www.hiddensoft.com)
- AutoHotkey (www.autohotkey.com)
- ActivePerl (www.activestate.com)
- KiXtart 2010 (www.kixtart.org)
Le code de chacun d'eux est inclus dans le téléchargement de cet article, disponible sur technetmagazine com. Les fichiers sont respectivement nommés ElevateAutoIt3.inf, ElevateAutoHotKey.inf, ElevatePerlScript.inf et ElevateKiXtart.inf. Pour AutoIt v3, AutoHotkey et ActivePerl, la configuration est très simple. Il suffit de télécharger l'application correspondante et de l'installer à l'emplacement par défaut. Après voir installé les applications qui vous intéressent, vous pouvez simplement installer le PowerToy Exécuter en tant qu'administrateur approprié pour chaque outil.
Malheureusement, KiXtart 2010 ne comprend pas de programme d'installation. Donc, pour m'assurer que KiXtart est installé à un emplacement standard permettant à mon PowerToy de fonctionner correctement, j'ai fourni un fichier INF qui installe KiXtart 2010 (v 4.60) sous Program Files\KiXtart et inscrit l'extension de fichier .kix.
Accédez à www.kixtart.org/?p=downloads, téléchargez le fichier KiX2010_460.zip et décompressez-le dans un dossier. Copiez le fichier Install_KiXtart.inf (inclus dans le téléchargement de code qui accompagne cet article) dans ce même dossier. Cliquez ensuite avec le bouton droit de la souris sur Install_KiXtart.inf et sélectionnez Install (Installer). Après cela, vous pouvez simplement installer le PowerToy ElevateKiXtart.inf.
PowerToy Exécuter en tant qu'utilisateur différent
Le contrôle de compte d'utilisateur (UAC) a été créé pour rendre le système d'exploitation moins vulnérable aux logiciels malveillants en obligeant les utilisateurs, même les administrateurs, à exécuter la plupart des applications avec des privilèges utilisateur standard. L'UAC offre un potentiel d'élévation pour les tâches administratives et d'autres fonctions d'application. Ce potentiel d'élévation est fourni via l'option Exécuter en tant qu'administrateur, à laquelle vous accédez en cliquant avec le bouton droit de la souris sur des fichiers exécutables. Les PowerToys d'élévation examinés dans le numéro de juin 2007 étendaient cette capacité à d'autres types de fichier et d'objet.
La fonctionnalité intégrée dans Windows Vista fonctionne relativement bien pour de nombreuses tâches administratives. Cependant, un scénario important a été omis pour Windows Vista. Dans beaucoup de services informatiques, les administrateurs réseau utilisent un compte utilisateur pour leurs tâches quotidiennes (messagerie électronique, création de documents, etc.) et un autre uniquement pour l'administration réseau (ou l'administration informatique locale).
Ceci afin de contribuer à réduire le risque qu'un administrateur réseau compromette tout son système (ou le domaine dans lequel il se trouve) en exécutant accidentellement un logiciel malveillant lors de ses tâches quotidiennes. C'était possible sous Windows XP grâce à l'option de clic-droit Exécuter... Mais cette option a disparu de Windows Vista, où elle a été remplacée par l'option Exécuter en tant qu'administrateur.
L'outil de ligne de commande runas, cependant, existe toujours dans Windows Vista. Malheureusement, il ne peut pas être utilisé pour les tâches de compte double les plus courantes (exécution de composants logiciels enfichables de la console MMC (Microsoft® Management Console)). Par exemple, imaginons que l'on vous a délégué certaines tâches de gestion de compte dans Active Directory®. Vous travaillez en tant qu'utilisateur standard pour les tâches quotidiennes et votre compte d'administration réseau est également membre du groupe d'administrateurs locaux (afin que vous puissiez installer les outils de gestion de réseau si nécessaire) sur un ordinateur Windows Vista où UAC est activé. Vous voulez à présent démarrer des utilisateurs &ordinateurs Active Directory (ADU&C) avec votre compte administrateur Active Directory. Vous essayez donc la commande runas, comme suit :
runas /user:mydomain\admin
"mmc.exe %windir%\system32\dsa.msc"
Malheureusement, cela ne lance pas l'ADU&C. Au lieu de cela, vous recevez l'erreur runas suivante : « L'opération demandée nécessite une élévation ». Ce qui se passe dans ce cas, c'est que l'exécutable MMC est marqué pour s'exécuter au niveau de privilège highestAvailable. Puisque le niveau highestAvailable pour votre compte d'administration réseau est celui d'administrateur, lancer l'ADU&de cette manière nécessite une élévation. Puisque runas ne génère pas d'invite d'élévation, l'erreur se produit.
Windows Vista complique donc ce scénario en ne fournissant pas d'élément de menu contextuel pour Exécuter... et en ne proposant pas de moyens intégrés d'exécuter un processus en tant qu'utilisateur différent nécessitant une élévation.
Le sujet serait frustrant s'il n'y avait pas de solution, mais heureusement, un de mes PowerToys d'élévation originaux résout le deuxième problème, tandis que j'ai déniché une solution au premier. (Je voudrais pouvoir affirmer avoir trouvé la solution au problème d'élévation, mais cet honneur revient à Gov Maharaj de l'équipe Windows AppCompat).
Il apparaît que le PowerToy de commande d’élévation peut être utilisé avec la commande runas. Là où la commande précédente ne produisait pas d'invite d'élévation, celle-ci le fera :
runas /user:mydomain\admin
"elevate mmc.exe%windir%\system32\dsa.msc"
Elle pousse runas à lancer elevate.cmd (techniquement, le processus lancé est cmd.exe) en tant qu'utilisateur différent, tandis que la commande d'élévation lance mmc.exe avec une invite d'élévation.
Finalement, j'ai pris cette astuce, l'ai combinée avec des associations de fichiers pour .exe et .msc et l'ai intégrée à une interface utilisateur d'application HTML pour produire un PowerToy créant une option Exécuter en tant qu'utilisateur différent disponible via le menu contextuel. Lorsque vous sélectionnez Exécuter en tant qu'utilisateur différent, vous obtenez une application HTML semblable à celle de la figure 1.
Figure 1** Outil Exécuter en tant qu'utilisateur différent **(Cliquez sur l'image pour l'agrandir)
Saisissez simplement le nom d'utilisateur et le domaine (pour un compte sur l'ordinateur local, cochez la case Use Local Account (Utiliser compte local)). Cliquez ensuite sur le bouton Exécuter pour lancer l'application comme un utilisateur standard. Vous pouvez également cliquer sur le bouton Run as Admin (Travailler en tant qu'administrateur) pour lancer l'application avec des privilèges élevés. Après avoir cliqué sur un de ces deux boutons, runas.exe s'exécute et vous demande un mot de passe ou un code confidentiel de carte à puce.
Comme ce PowerToy utilise le PowerToy de commande d'élévation, vous devez d'abord installer ce dernier. Cliquez ensuite avec le bouton droit de la souris sur le fichier RunAs.inf, sélectionnez Install (Installer) et acceptez l'élévation. Pour désinstaller l'outil, utilisez l'option Programmes et fonctionnalités du Panneau de configuration.
Vous constaterez que certains des raccourcis vers les fichiers .msc dans les Outils d'administration (comme la Gestion de l'ordinateur) fonctionnent avec ce PowerToy. Notez toutefois que si vous installez les outils d'administration Windows Server® 2003 avec adminpak.msi, les raccourcis créés ne sont pas des raccourcis standard vers les fichiers .msc. Il s'agit au contraire de raccourcis Windows Installer. Dès lors, l'Explorateur Windows n'affichera pas l'option Exécuter en tant qu'utilisateur différent pour ces raccourcis.
Pour ces derniers, vous devrez chercher les fichiers .msc et cliquez dessus avec le bouton droit de la souris ou créer de nouveaux raccourcis vers ces fichiers. De plus, runas ne fonctionne pas avec Internet Explorer® à cause de la façon dont celui-ci a été restructuré en mode protégé sous Windows Vista (vous pouvez trouver des informations supplémentaires sur ce problème sur support.microsoft.com/?id=922980).
Remarque : entre le moment où j'ai terminé ces PowerToys et la parution de cet article, Windows Sysinternals a publié un nouvel outil très semblable du point de vue fonctionnel à mon PowerToy Exécuter en tant qu'utilisateur différent. Cet outil s'appelle ShellRunas et est disponible sur le site Windows Sysinternals : technet.microsoft.com/sysinternals/cc300361.
Etant donné que c'est le métier des spécialistes de Sysinternals d'écrire du code, vous pouvez préférer leur outil. J'ai décidé de laisser le mien dans l'article en tant qu'exemple de la manière dont cette tâche en particulier et les extensions de shell en général peuvent être effectuées à l'aide d'applications HTML avec du code de script.
Invite de commande en tant que système et Invite PowerShell en tant que système
Il est parfois nécessaire d'exécuter des programmes dans un contexte de Système local. Par exemple, de nombreux outils de distribution de logiciel, comme System Center Configuration Manager (SCCM), utilisent un agent de client qui s'exécute en tant que système local pour accomplir ses tâches.
Pour tester le comportement d'un programme d'installation de logiciel s'exécutant en tant que système local avant de tenter une distribution avec un produit comme SCCM, il peut être utile de démarrer le programme d'installation à l'aide d'une invite de commande s'exécutant en tant que système local. J'ai donc commencé par créer mes PowerToys Invite de commande en tant que système et Invite PowerShell en tant que système.
Sous Windows XP, j'avais pour habitude de procéder avec un script d'interface de commande :
@echo off
sc create CmdAsSystem type= own type= interact
binPath= "cmd /c start cmd /k (cd c:\ ^& color ec ^&
title ***** SYSTEM *****)"
net start CmdAsSystem
sc delete CmdAsSystem
Cependant, si vous essayez d'exécuter à partir d'une invite de commande élevée sous Windows Vista, vous obtenez le message d'erreur suivant et l'invite de commande d'exécution en tant que système ne s'affiche pas :
AVERTISSEMENT : le service CmdAsSystem est configuré comme étant interactif et sa prise en charge est en cours de retrait. Il est possible que le service ne fonctionne pas correctement.
Le problème, c'est que ce script essaie de créer et de démarrer un service interactif. Les services interactifs ne fonctionnent pas correctement en raison de l'isolation de la session 0 sous Windows Vista. (Pour une explication de l'isolation de la session 0, voir le livre blanc « Services sous Windows Vista » sur microsoft.com/whdc/system/vista/Vista_Services.mspx).
Pour contourner cette restriction, j'ai utilisé l'outil Psexec développé par Sysinternals (voir technet.microsoft.com/sysinternals/bb897553.aspx). Cet outil permet de démarrer des processus dans le contexte Système. Malheureusement, la plupart des outils de Sysinternals ne comprennent pas de programme d'installation. J'ai donc fourni un fichier NF (disponible dans le téléchargement de code) pour installer la Suite Sysinternals complète (qui comprend Psexec) dans Program Files\Sysinternals Suite. Avantage supplémentaire, ce fichier INF crée des raccourcis de menu Démarrer pour les outils graphiques de la suite.
Pour installer la suite, téléchargez tout d'abord le fichier SysinternalsSuite.zip à l'adresse technet.microsoft.com/sysinternals/bb842062.aspx et décompressez-le dans un dossier. Copiez mon fichier INF (Install_SysinternalsSuite.inf) dans ce dossier, cliquez avec le bouton droit sur Install_SysinternalsSuite.inf, puis sélectionnez Installer. Puisque ces nouveaux PowerToys utilisent le PowerToy de commande d'élévation, installez ce dernier. Ensuite, vous pouvez installer CmdHereAsSystem.inf et PowerShellHereAsSystem.inf. Une fois ces PowerToys installés, les options Invite de commande en tant que système et Invite PowerShell en tant que système seront disponibles sous forme d'éléments de menu contextuel pour les dossiers et les lecteurs dans l'Explorateur Windows, comme vous pouvez le voir à la figure 2.
Figure 2** Options Invite de commande en tant que système et Invite PowerShell en tant que système **
La figure 3 illustre une invite de commande s'exécutant en tant que système. J'ai sélectionné les couleurs brillantes pour rappeler que cette invite s'exécute en tant que Système et peut influencer le système de manière imprévue (et dommageable) si vous saisissez des commandes incorrectes.
Figure 3** L'option Invite de commande en tant que système doit donc être utilisée avec précaution. **
Enfin, ces PowerToys ajoutent des commandes au système pour que ces invites puissent être démarrées dans la boîte de dialogue Exécuter ou une invite de commande. Par exemple, l'exécution de la commande suivante à partir de la boîte Exécuter démarrera une Invite de commande en tant que système dans le dossier Windows :
cmdassystem "c:\windows"
La commande équivalente pour Windows PowerShellTM est psassystem. Notez que j'ai également modifié les PowerToys Invite de commande en tant qu'administrateur et Invite PowerShell en tant qu'administrateur pour installer des commandes similaires (respectivement cmdasadmin et psasadmin).
Gadget d'élévation
La plupart de mes PowerToys nécessitent un clic-droit de la souris. Mais, cerise sur le gâteau pour cette mise à jour, j'ai inclus quelque chose d'un peu plus amusant. Il s'agit d'un gadget pour le volet Windows, que j'appelle Gadget d'élévation (voir figure 4). Il s'agit d'une cible de glisser-déplacer. Déplacez simplement un exécutable ou un script de l'Explorateur Windows doté d'une action runas définie et il démarrera en tant qu'élevé.
Figure 4** Gadget d'élévation glisser-déplacer **
Si vous avez installé mes précédents PowerToys d'élévation, cela fonctionnera pour les scripts Windows Script Host, les scripts Windows PowerShell, les applications HTML et les packages et correctifs Windows Installer (de même que les exécutables et les scripts d'interface de commande qui ont une action runas définie par défaut dans Windows Vista). Vous pouvez également glisser plusieurs éléments à la fois. (Essayez de glisser un dossier dans le gadget et voyez ce qui se passe).
Pour installer le gadget, double-cliquez sur Elevation.Gadget (disponible dans le téléchargement de code). Si vous souhaitez voir le code du gadget, ajoutez simplement l'extension .cab au nom du fichier. Vous pouvez alors extraire le contenu du fichier Cab.
Conclusion
Le téléchargement associé à cet article contient les nouveaux PowerToys et ceux de l'article original. J'ai apporté des modifications mineures à certains des anciens. Par exemple, les versions originales de l'Invite PowerShell en tant qu'administrateur et Élever le script WSH installaient toutes deux leurs propres copies d'elevate.cmd et elevate.vbs. Comme plusieurs des nouveaux PowerToys dépendent également de ces fichiers, j'ai modifié ces outils pour que le PowerToy de commande d'élévation doive être installé (et que cette copie puisse être partagée). Pour déterminer si un PowerToy nécessite l'installation du PowerToy de commande d'élévation, vérifiez l'en-tête dans le fichier INF.
Certains autres PowerToys originaux ont également subi des modifications non fonctionnelles mineures. Désinstallez toujours l'ancienne version d'un PowerToy avant d'installer la nouvelle. Puisque cette collection comprend désormais 17 outils, j'ai inclus des scripts d'interface de commande permettant d'installer et de désinstaller toute la collection (respectivement InstallAllPowerToys.cmd et UninstallAllPowerToys.cmd). Vous pouvez les personnaliser pour seulement installer et désinstaller les outils dont vous avez besoin.
N'oubliez pas qu'InstallAllPowerToys.cmd n'installe pas les PowerToys Exécuter en tant qu'administrateur pour les outils de script de fournisseurs tiers par défaut. Vous pouvez modifier ce script afin d'installer seulement les PowerToys pour lesquels vous avez installé le logiciel. Lorsque vous exécutez l'un d'eux, il se relance lui-même en tant qu'élevé. UninstallAllPowerToys.cmd doit également supprimer toutes les anciennes versions de ces outils.
Comme pour tous mes PowerToys, ceux-ci sont des outils à « utiliser à vos propres risques », non pris en charge. Il ne s'agit pas de produits Microsoft officiels, mais de mes propres créations personnelles. Elles ont uniquement été testées par moi-même et quelques autres volontaires sur Windows Vista 32 bits avec US English comme langue par défaut. Enfin, il est possible qu'un ou tous ces PowerToys ne puissent pas fonctionner avec les futurs Services Packs, mises à jour ou versions de système d'exploitation de Windows.
Michael Murgolo est consultant en infrastructure senior pour Microsoft Consulting Services. Il se concentre sur les systèmes d’exploitation, le déploiement, les services réseau, Active Directory, la gestion des systèmes, l’automatisation et la gestion des correctifs. Il est expert dans le domaine du déploiement et de la migration des postes de travail.
© 2008 Microsoft Corporation and CMP Media, LLC. Tous droits réservés. Toute reproduction, totale ou partielle, est interdite sans autorisation préalable..