62 votes

Existe-t-il une commande permettant d'élever l'invite de commande en place ?

Sur les systèmes *nix, vous pouvez obtenir une racine Shell comme ceci :

$ su # or 'sudo -s'
#

La racine Shell est créée à la place dans le même terminal.

J'essaie de trouver quelque chose qui fasse une élévation similaire, en place, sur l'invite de commande Windows. En d'autres termes, il ne doit pas créer une nouvelle fenêtre ou afficher des invites UAC. Jusqu'à présent, j'ai réussi à créer une tâche planifiée qui contourne l'UAC, mais la fenêtre élevée de l'invite de commande n'est pas créée sur place.

Existe-t-il une commande similaire pour Windows qui effectue une élévation sur place sans créer une nouvelle fenêtre ?

68voto

I say Reinstate Monica Points 24173

TL;DR - La seule option est de lancer un autre processus. (Un nouveau cmd.exe .) Dans le cas de l'Invite de commande, le démarrage d'une nouvelle instance avec un jeton d'accès ayant des permissions plus élevées entraînera toujours l'ouverture d'une nouvelle fenêtre en cours de création.


Il n'est pas possible d'accorder des permissions supplémentaires à une déjà en cours processus.

Lorsqu'un utilisateur disposant de droits d'administration se connecte à une machine Windows sur laquelle le contrôle des comptes d'utilisateurs (UAC) est activé, deux jetons d'accès distincts sont créés :

  1. Un avec un accès administrateur complet, et
  2. Un deuxième "jeton filtré" avec un accès utilisateur standard

Au moment où un processus (par ex. CMD.EXE ) est créé, on lui attribue l'un des deux éléments suivants jetons d'accès . Si le processus est exécuté "en hauteur" en tant qu'administrateur, le jeton d'accès non filtré est utilisé. Si le processus n'a pas de droits d'administrateur, le jeton d'accès filtré et standard est utilisé.

Une fois qu'un processus a été créé, il n'est pas possible de remplacer son jeton d'accès. . 1 Dans ce MSDN Sécurité des applications pour le bureau Windows filetage un poster s'identifiant comme un membre de l'équipe Windows Kernel déclare :

Le noyau NT n'a jamais été conçu pour permettre le changement de jeton une fois qu'un processus a commencé à fonctionner. En effet, les handles, etc. peuvent avoir été ouverts dans un ancien contexte de sécurité, les opérations en cours d'exécution peuvent utiliser des contextes de sécurité incohérents, etc. En tant que tel, il n'est généralement pas judicieux de changer le jeton d'un processus une fois qu'il a commencé son exécution. Cependant, cette mesure n'a pas été appliquée avant Vista . [souligné par moi] (Source merci a @Ben N )

Note : Le contrôle de compte d'utilisateur était introduit avec la sortie de Windows Vista .

Ce super utilisateur réponse cite deux autres sources qui confirment la même chose :

Il n'est donc tout simplement pas possible d'élever l'invite de commande ou tout autre processus sur place. La seule option est de créer un autre processus avec un nouveau jeton d'accès (qui peut être une autre instance du processus d'origine si vous le souhaitez). Dans le cas de l'invite de commande, le démarrage d'une nouvelle instance avec un jeton d'accès ayant des autorisations plus élevées entraînera toujours la création d'une nouvelle fenêtre, et si les invites UAC sont activées sur le système, elles seront également déclenchées.


1 Vous pouvez modifier les privilèges d'un jeton d'accès existant à l'aide de la commande AdjustTokenPrivileges mais selon MSDN :

La fonction AdjustTokenPrivileges ne peut pas ajouter de nouveaux privilèges au jeton d'accès. Elle peut uniquement activer ou désactiver les privilèges existants du jeton.

18voto

AFH Points 16642

Bien que je sois un utilisateur enthousiaste de TCC-LE il existe une solution qui ne nécessite pas de nouveaux programmes :-.

  • Début cmd en tant qu'administrateur.
  • Cela devrait vous permettre de commencer %SystemRoot%\system32\ - si non, cd là.
  • copy cmd.exe cmdadmin.exe (ou tout autre nom de votre choix, tel que su.exe ).
  • Maintenant, lancez Explorer et trouvez cmdadmin.exe .
  • Cliquez avec le bouton droit de la souris et sélectionnez Propriétés .
  • Dans le Compatibilité sélectionnez "run as admin" (ou définissez-le pour tous les utilisateurs).

Maintenant cmdadmin est votre su o sudo vous pouvez le lancer sans paramètres pour vous donner un Shell avec des privilèges administratifs, ou vous pouvez le lancer avec /c pour exécuter une seule commande dans ce mode. En fonction de vos politiques, une confirmation peut vous être demandée ou non.

Notez que cela ouvrira toujours une nouvelle fenêtre (comme le fait la solution TCC). start /elevated ... ) : pour une application GUI, c'est normal, mais pour un programme en ligne de commande, vous pouvez utiliser /k 代わりに /c pour vous donner une chance de voir la sortie ; ou vous pouvez exécuter via un fichier batch ( sudo.cmd peut-être ?) qui concatène & pause à la fin de votre chaîne d'exécution.

Dans les deux cas, ce n'est pas tout à fait la même chose que su o sudo mais c'est ce qui s'en rapproche le plus. En définissant manuellement la disposition des fenêtres, la nouvelle fenêtre peut être créée directement en dessous et à côté de l'originale.

14voto

Existe-t-il une commande permettant d'élever l'invite de commande en place ?

Il y a un moyen peu commode :

powershell -Command "Start-Process 'cmd.exe' -Verb runAs"

Il y avait de meilleurs moyens, mais Microsoft les a fermés. Bien sûr, vous pouvez toujours retrousser vos manches et écrire votre propre script équivalent de sudo avec le code source que je viens de te donner.

En d'autres termes, il ne doit pas créer de nouvelle fenêtre ni afficher d'invites UAC.

Blasphème ! Brûlez-le sur le bûcher ! ;) Blague à part, non. Il n'y en a pas. Ce serait un bug et une faille de sécurité. Microsoft a fait un effort explicite pour s'assurer que le processus élevé et le processus standard ont le moins de choses en commun possible.

Les enfants intelligents qui pensent à deux back-ends (l'un standard et l'autre surélevé) et à un front-end graphique pour les deux, devraient lire le document suivant Session 0 Isolement .

5voto

Gerardo Grignoli Points 296

Il ne devrait pas être possible de passer outre l'UAC, sinon cela violerait un principe de sécurité de Windows.

Mais il existe des outils qui permettent de le faire. Comme gsudo un sudo pour Windows qui permet d'élever l'invite de commande en place. Je suis l'auteur.

Il montre une fenêtre UAC pour la première élévation. Si vous gsudo à nouveau avant que le gsudo élevé n'expire, il ne demandera plus l'UAC.

Caractéristiques

  • Les commandes élevées sont affichées dans la console de l'utilisateur, comme suit *nix sudo fait, au lieu d'ouvrir la commande dans une nouvelle fenêtre.
  • Cache d'authentification : Si gsudo est invoqué plusieurs fois en quelques minutes, il n'affiche la fenêtre pop-up UAC qu'une seule fois.
  • Support pour les commandes CMD : gsudo md folder (il n'est pas nécessaire d'utiliser la forme longue gsudo cmd.exe /c md folder
  • Support pour les commandes PowerShell si elles sont invoquées à partir d'un PS Shell.
  • Scripting :
    • gsudo peut être utilisé sur les scripts qui nécessitent d'élever une ou plusieurs commandes. (la popup UAC apparaîtra une fois).
    • Les sorties et les codes de sortie des commandes élevées peuvent être interprétés : Par exemple, StdOutbound peut être canalisé ou capturé ( gsudo dir | findstr /c:"bytes free" > FreeSpace.txt ) et les codes de sortie également ('%errorlevel%)).
    • Si gsudo est invoqué (avec des paramètres) à partir d'une console déjà élevée, il ne fera qu'exécuter les commandes. Donc si vous invoquez un script qui utilise gsudo depuis une console déjà élevée, cela fonctionnera également. La fenêtre contextuelle UAC n'apparaît pas.

Installation

Voyez-le en action : gsudo demo

Projet Github https://github.com/gerardog/gsudo

2voto

Jason Points 1025

J'ai vu cette question et j'ai trouvé une solution simple. Il s'agit d'un petit utilitaire appelé rsudo qui exécute les commandes escaladées à partir d'une fenêtre CMD normale.

Remarque : Une invite UAC sera monter. Il n'est pas possible de le masquer, c'est simplement la façon dont l'UAC a été conçu.

Usage:
  rsudo.exe "[command]"

Télécharger [Le téléchargement ne fonctionne pas, sera mis à jour bientôt]

Note : Les commandes sont exécutées dans une nouvelle fenêtre. Si vous souhaitez afficher la sortie, exécutez rsudo.exe "pause && [command]"

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