Existe-t-il une commande 'sudo' pour Windows?

Je travaille toujours sur un compte non administrateur sur mon ordinateur Windows. Parfois, je dois installer des programmes nécessitant un accès administrateur. Comme j'utilise surtout l'invite de commande Windows, existe-t-il une commande Windows pour augmenter les privilèges, similaire à la commande du terminal Linux sudo ?

La commande runas .

 runas [{/profile|/noprofile}] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:UserAccountName program 

Il suffit de courir:

 runas /noprofile /user:Administrator cmd 

Démarrer un shell de commande en tant qu'administrateur

J'ai découvert l' élévation aujourd'hui qui "exécute une commande avec l'élévation des privilèges UAC. Ceci est utile pour travailler à l'intérieur d'instructions de commande ou avec des fichiers par lots". Ce n'est pas le même que sudo , il modifie l'utilisateur exécutant pour Administrateur, mais sa syntaxe est beaucoup plus simple à utiliser que les runas , et elle peut conserver le répertoire actuel, ce qui permet d'utiliser des chemins relatifs.

 Synopsis: elevate [(-c | -k) [-n] [-u]] [-w] command Options: -c Launches a terminating command processor; equivalent to "cmd /c command". -k Launches a persistent command processor; equivalent to "cmd /k command". -n When using -c or -k, do not pushd the current directory before execution. -u When using -c or -k, use Unicode; equivalent to "cmd /u". -w Waits for termination; equivalent to "start /wait command". 

Le but de Elevate n'est pas de contourner ou de contourner UAC (User Account Control), mais de travailler avec lui. Tant que UAC est activé, il doit y avoir une sorte d'invite à un moment donné du processus. Si vous devez vous débarrasser de l'invite, vous devez désactiver UAC .

Le niveau de douleur éleve atténue l'escalade d'un processus particulier à partir d'un shell non privilégié, puis continue comme normalement. Sans cela, vous devez lancer une invite de commande privilégiée en cliquant avec le bouton droit de la souris sur "Exécuter en tant qu'administrateur" , qui ne peut pas être facilement scripté, avant d'essayer la commande privilégiée.

Vous pouvez utiliser la commande runas qui est similaire à celle-ci, ou vous pouvez consulter le projet sudo pour Windows sur SourceForge qui ajoute une commande sudo.

La différence est subtile:

Disons que vous avez deux utilisateurs. Bob est un utilisateur normal et James est un administrateur.

Si vous vous connectez en tant que Bob et utilisez "runas james acommand", la commande est exécutée comme si elle était gérée par James, donc elle accède aux paramètres de l'utilisateur de James et tous les changements d'utilisateurs entrent dans James My Documents & dossiers de configuration, etc. Donc, si vous Sont en train d'installer une application, par exemple, il sera installé comme James, et non comme Bob.

Si, d'autre part, Bob fait "sudo acommand", la commande est toujours exécutée comme Bob, mais avec des autorisations élevées – tout comme la commande Linux sudo. Pour éviter que n'importe quel utilisateur puisse sudo, vous devez définir un groupe d'utilisateurs sudoers qui contient la liste des utilisateurs normaux qui ont la permission d'élever en utilisant sudo. Les utilisateurs doivent toujours fournir des informations d'identification avant l'élévation.

Parfois, la différence n'est pas importante, parfois elle est, et je trouve que les deux commandes peuvent être utiles.

Vous pouvez également utiliser le script Elevation PowerToys .

Si vous êtes prêt à passer à des consoles alternatives, il existe ConEmu (je suis l'auteur). L'une de ses fonctionnalités: la possibilité d'exécuter des onglets élevés et non élevés dans la seule fenêtre ConEmu. Les onglets peuvent également être lancés avec différentes références.

Pour le confort de l'utilisateur, il existe un fichier batch csudo.cmd (qui peut être facilement adopté pour bash). Lire la description complète dans le wiki du projet . En bref, lorsque vous exécutez une commande à partir d'un onglet existant non élevé, par exemple

 csudo dism /online /enable-feature /featurename:NetFX3 /All /Source:D:\sources\sxs /LimitAccess 

ConEmu dism sur la nouvelle console / onglet élevée (avec l'invite UAC précédente dans Vista ou la boîte de connexion dans XP).

Par défaut, csudo lance une nouvelle console dans une partition (peut-être des modifications via l'édition de contenu csudo.cmd ).

Et bien sûr, vous pouvez le renommer à sudo.cmd si vous aimez le mot "classique" sudo .

Sudo dans ConEmu / Windows

Si vous faites cela sur Windows, en plus de la commande Exécuter comme indiqué dans quelques autres réponses, il existe également des moyens de le faire avec la souris.

Si vous maintenez la touche Maj enfoncée lorsque vous cliquez avec le bouton droit de la souris sur la plupart des fichiers exécutables dans Windows, vous devriez remarquer quelques options plus avancées. L'une d'entre elles est l'option " Run As... " (je pense que c'est appelé " Run As Administrator " depuis Vista).

Vous pouvez également télécharger une version plus avancée de RunAs de Microsoft, appelée ShellRunAs , qui présente des améliorations sur la commande RunAs intégrée, tant en mode de commande que dans les modes graphiques, y compris vous permettant de sauvegarder les informations d'identification du compte

Méthode rapide:

Trois étapes pour ajouter sudo.

  1. Ouvrez PowerShell.

  2. Copiez le script suivant (Ctrl + C) et collez-le dans PowerShell (Alt + Espace + E + P):

 $script_path="$HOME\Documents\Scripts"; if (!(test-path $script_path)) {New-Item -ItemType directory $script_path} if (!(test-path $profile)) { new-item -path $profile -itemtype file -force }". $script_path\sudo.ps1" | Out-File $profile -append; "function sudo(){if (`$args.Length -eq 1){start-process `$args[0] -verb `"runAs`"} if (`$args.Length -gt 1){start-process `$args[0] -ArgumentList `$args[1..`$args.Length] -verb `"runAs`"}}" | Out-File $script_path\sudo.ps1; powershell 
  1. Entrer Entrer .

Il sera en permanence activé sudo commande dans PowerShell.

Usage:

 sudo <process-name> [param1 [param2 [param3]]] 

Exemples:

 sudo explorer sudo notepad sudo powershell sudo cmd sudo taskmgr sudo tasklist sudo taskkill /IM Skype.exe /PID 8496 

Longue méthode d'apprentissage:

  • Lisez cet article .
  • Lisez les commentaires.
  • Regardez le dépôt Git de Stephen et le fichier readme .

Remarque: J'ai mélangé le script des deux articles pour créer le script ci-dessus. Plutôt collage manuel du script dans le bloc-notes, j'ai ajouté les instructions Out-File pour enregistrer les ps1 $profile ps1 et $profile à partir du script.

Astuce: si vous n'êtes pas un très grand fan des popups UAC (comme moi), enregistrez les éléments suivants dans le fichier * .reg et exécutez-le:

 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System] "ConsentPromptBehaviorAdmin"=dword:00000000 

Surun est une application open source ouverte qui permet à certains programmes de fonctionner avec des droits administratifs, sans fournir de mot de passe sans modifier le registre des utilisateurs ou modifier les variables d'environnement.

Lorsque j'utilise Windows XP, cette application m'a beaucoup aidé. Beta fonctionne sous Windows 7.

Comme vous l'avez probablement découvert, les runas vous permettront de fonctionner comme un autre utilisateur, mais il ne peut pas faire d'élévation et il ne transmet pas les répertoires actuels, les variables d'environnement ou les longues lignes de commande.

La coque de Hamilton C résout celle avec un su et sudo authentique. Su vous permet d'exécuter une commande comme un autre utilisateur; Sudo (en fait, un alias à su) vous permet d'exécuter une commande élevée. Vous pouvez également faire les deux, être élevé comme un utilisateur différent. Les répertoires actuels, les variables d'environnement et les longues lignes de commande sont transmis par une mémoire de mémoire partagée entre les exécutions dans le contexte de l'appelant et une copie de lui-même s'exécute en tant qu'interlocuteur avec les nouvelles informations d'identification qui débute l'enfant. La divulgation complète: je suis l'auteur.

Ce script fait le travail:

 @echo Set objShell = CreateObject("Shell.Application") > %temp%\sudo.tmp.vbs @echo args = Right("%*", (Len("%*") - Len("%1"))) >> %temp%\sudo.tmp.vbs @echo objShell.ShellExecute "%1", args, "", "runas" >> %temp%\sudo.tmp.vbs @cscript //NoLogo %temp%\sudo.tmp.vbs 

Enregistrez-le comme sudo.cmd puis ajoutez-le à votre PATH

Remarque: les runas signifient dans ce contexte "Exécuter en tant qu'administrateur" et non "Exécuter comme autre utilisateur"

Pris à partir d'ici et légèrement édités pour supprimer l'en-tête cscript.exe de la sortie

Un remplaçant sudo fonctionnel pour le terminal mintty de Cygwin serait de placer le script suivant dans PATH de l'utilisateur:

 $!/bin/bash cygstart --action=runas mintty -e `which bash` -lc \"$@\" 

Pour moi, c'est le seul remplacement viable pour élever les privilèges de programmes comme vim ou cygrunsrv tout en travaillant dans un terminal sur Windows.