Je travaille toujours sur un compte non-administrateur sur mon ordinateur Windows. Parfois, j'ai besoin d'installer des programmes nécessitant un accès administrateur. Étant donné que j'utilise principalement l'invite de commande Windows, existe-t-il une commande Windows permettant de hiérarchiser les privilèges, similaire à la commande de terminal Linux Sudo
?
Le runas commande.
runas [{/profile|/noprofile}] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:UserAccountName program
Il suffit de courir:
runas /noprofile /user:Administrator cmd
démarrer une commande Shell en tant qu'administrateur
J'ai découvert elevate today que "exécute une commande avec une élévation de privilège UAC. Cela est utile pour travailler à l'intérieur des invites de commande ou avec des fichiers de commandes." Ce n'est pas la même chose que Sudo
, cela change l'utilisateur exécutant en administrateur, mais sa syntaxe est beaucoup plus simple à utiliser que runas
et il peut conserver le répertoire courant, permettant ainsi l'utilisation de 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".
Elevate ne vise pas à contourner ou contourner le contrôle de compte d'utilisateur (UAC), mais à l'utiliser. Tant que le contrôle de compte d'utilisateur est activé, a une sorte d'Invite à un peu dans le processus. Si vous avez besoin de vous débarrasser complètement des invites, vous devez désactiver UAC .
Le point de difficulté soulager soulage est l'escalade d'un processus particulier à partir d'un shell non privilégié, puis continue comme d'habitude. Sans cela, vous devez démarrer une commande privilégiée Invite avec clic droit> "Exécuter en tant qu'administrateur" , qui ne peut pas être facilement scriptée, avant de tenter la commande privilégiée.
Vous pouvez utiliser la commande runas qui est un peu similaire, ou vous pouvez consulter le Sudo pour Windows projet 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 que vous utilisez "runas james acommand", la commande est exécutée comme si elle avait été exécutée par James. Elle accède ainsi aux paramètres utilisateur de James. Toute modification apportée à cet utilisateur est placée dans les dossiers James My Documents & settings , etc. Ainsi, si vous installez une application, disons, elle sera installée en tant que James, pas en tant que Bob.
Par contre, si Bob exécute "Sudo acommand", la commande est toujours exécutée en tant que Bob, mais avec des autorisations élevées - tout comme la commande Linux Sudo. Pour empêcher tout utilisateur de pouvoir utiliser Sudo, vous devez définir un groupe d'utilisateurs sudoers contenant la liste des utilisateurs normaux autorisés à élever à l'aide de Sudo. Les utilisateurs doivent toujours fournir leurs informations d'identification avant l'élévation.
Parfois, la différence n'est pas importante, parfois, et je trouve que les deux commandes peuvent être utiles.
Vous pouvez également utiliser le Script Elevation PowerToys .
Si vous êtes prêt à passer à d'autres consoles, il existe ConEmu (je suis l'auteur). L'une de ses fonctionnalités - la possibilité d'exécuter des onglets surélevés et non surélevés dans la même fenêtre ConEmu. Les onglets peuvent également être démarrés avec différentes informations d'identification.
Pour le confort de l'utilisateur, il existe un fichier de commandes csudo.cmd (qui peut être facilement adopté en bash). Lisez la description complète dans le wiki du projet . En bref, lorsque vous exécutez une commande à partir d'un onglet non élevé existant, par exemple
csudo dism /online /enable-feature /featurename:NetFX3 /All /Source:D:\sources\sxs /LimitAccess
ConEmu démarrera dism
dans la nouvelle console/onglet élevé (avec l’invitation précédente du UAC sous Vista ou la zone de connexion sous XP).
Par défaut, csudo
démarre la nouvelle console dans un groupe (les modifications peuvent être apportées via l'édition du contenu de csudo.cmd
).
Et bien sûr, vous pouvez le renommer en Sudo.cmd
si vous aimez le mot "classique" Sudo
.
Trois étapes pour ajouter Sudo.
Ouvrez PowerShell.
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
Il activera en permanence la commande Sudo
dans PowerShell.
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
Remarque: j'ai mélangé le script des deux articles pour créer le script susmentionné. Au lieu de coller manuellement le script dans le bloc-notes, j'ai ajouté les instructions Out-File
pour enregistrer les fichiers ps1
et $profile
à partir du script.
Astuce: Si vous n'êtes pas un grand fan des popups UAC (comme moi), enregistrez ce qui suit 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
Si vous effectuez cette opération sous Windows, outre la commande Exécuter en tant que mentionné dans quelques réponses, vous pouvez également le faire à l'aide de la souris.
Si vous maintenez la Shift Lorsque vous cliquez avec le bouton droit sur la plupart des fichiers exécutables dans Windows, vous devriez remarquer quelques options plus avancées. L'un d'eux est l'option "Run As...
" (je pense qu'elle s'appelle "Run As Administrator
" à partir de Vista).
Vous pouvez également télécharger une version plus avancée de RunAs auprès de Microsoft, appelée ShellRunAs , qui offre des améliorations par rapport à la commande RunAs intégrée, à la fois en mode de commande et en mode graphique, permettant notamment de sauvegarder les informations d'identification du compte
Comme vous l'avez probablement découvert, les runas vous permettent de vous lancer en tant qu'utilisateur différent, mais ils ne peuvent pas faire d'altitude et ne passent pas les répertoires actuels, les variables d'environnement ou les longues lignes de commande.
Hamilton C Shell résout cela avec un véritable su et Sudo. su vous permet d'exécuter une commande en tant qu'utilisateur différent; Sudo (en fait un alias à su) vous permet d'exécuter une commande élevée. Vous pouvez également faire les deux, en exécutant en tant qu'utilisateur différent. Les répertoires actuels, les variables d’environnement et les longues lignes de commande sont passés au moyen d’une négociation en mémoire partagée entre l’application de su dans le contexte de l’appelant et une copie de lui-même exécutée comme interlude avec les nouvelles informations d’identification qui démarrent ensuite l’enfant. Divulgation complète: je suis l'auteur.
Surun est une application gratuite et à code source ouvert qui permet à certains programmes de s'exécuter avec des droits d'administrateur, sans fournir de mot de passe, sans modifier le registre des utilisateurs ni modifier les variables d'environnement.
Lorsque j’utilisais Windows XP, cette application m’aide beaucoup. Beta fonctionne sous Windows 7.
Il existe un paquet chocolaté avec le nom pratique Sudo . Vous pouvez installer le paquet avec chocolatey en utilisant cette commande:
choco install -y Sudo
Ensuite, quel que soit le shell Windows/MS que vous utilisiez, vous pouvez utiliser Sudo
comme prévu.
Un remplacement Sudo
fonctionnel du terminal mintty
de Cygwin consisterait à placer le script suivant dans le chemin 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 tels que vim
ou cygrunsrv
tout en travaillant dans un terminal sous Windows.
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 en tant que Sudo.cmd
puis ajoutez-le à votre PATH
Remarque: runas
signifie dans ce contexte "Exécuter en tant qu'administrateur" et non "Exécuter en tant qu'autre utilisateur"
Extrait d'ici et légèrement modifié pour supprimer l'en-tête cscript.exe de la sortie
La solution la plus simple, à mon avis, consiste à utiliser powershell pour effectuer le travail, qui est portable et invite l'utilisateur à utiliser le contrôle de compte d'utilisateur.
Vous pouvez simplement l'exécuter dans n'importe quel shell (cmd ou powershell)
powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"
Le script vbs suivant fait le tour pour moi. Je le mets sur C:\Windows\System32
Set objArgs = WScript.Arguments
exe = objArgs(0)
args = ""
IF objArgs.Count >= 2 Then
args = args & objArgs(1)
End If
For it = 2 to objArgs.Count - 1
args = args & " " & objArgs(it)
Next
Set objShell = CreateObject( "WScript.Shell")
windir=objShell.ExpandEnvironmentStrings("%WINDIR%")
Set objShellApp = CreateObject("Shell.Application")
objShellApp.ShellExecute exe, args, "", "runas", 1
set objShellApp = nothing
Exemple d'utilisation sur une commande Invite Sudo net start service