Lavoro sempre su un account non amministratore sul mio computer Windows. A volte ho bisogno di installare programmi che richiedono l'accesso di amministratore. Poiché utilizzo principalmente il comando Prompt di Windows, esiste un comando di Windows per l'escalation dei privilegi, simile al comando del terminale Linux Sudo
?
Il comando runas .
runas [{/profile|/noprofile}] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:UserAccountName program
Corri:
runas /noprofile /user:Administrator cmd
per avviare un comando Shell come amministratore
Ho scoperto elevate oggi quale "esegue un comando con elevazione del privilegio UAC, utile per lavorare all'interno di prompt di comando o con file batch." Non è uguale a Sudo
, cambia l'utente in esecuzione in Amministratore, ma la sua sintassi è molto più semplice da usare rispetto a runas
, e può mantenere la directory corrente, consentendo l'uso di percorsi relativi.
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".
Lo scopo di Elevate non è quello di aggirare o aggirare UAC (User Account Control), ma di lavorare con esso. Finché UAC è abilitato lì ha per essere una sorta di Prompt a some point nel processo. Se è necessario eliminare completamente il prompt, è necessario disable UAC .
Il punto di dolore eleva alleviati sta intensificando un particolare processo da una Shell non privilegiata, e poi proseguendo normalmente. Senza questo è necessario avviare un comando privilegiato Prompt con tasto destro del mouse> "Esegui come amministratore" , che non può essere facilmente copiato, prima di tentare il comando privilegiato.
Puoi usare il comando runas che è abbastanza simile, oppure puoi controllare il progetto Sudo per Windows su SourceForge che aggiunge un comando Sudo.
La differenza è sottile:
Diciamo che hai due utenti. Bob è un utente normale e James è un amministratore.
Se si effettua il login come Bob e si utilizza "runas james acommand", il comando viene eseguito come se fosse eseguito da James, quindi accede alle impostazioni utente di James e qualsiasi modifica utente viene spostata in James My Documents & settings folders , ecc. Quindi, se stai installando un'applicazione, per esempio, verrà installata come James, non come Bob.
Se invece Bob esegue "Sudo acommand", il comando viene comunque eseguito come Bob, ma con autorizzazioni elevate, proprio come il comando Linux Sudo. Per impedire a qualsiasi utente di accedere a Sudo, è necessario definire un gruppo di utenti sudoers che contenga l'elenco degli utenti normali che hanno il permesso di elevare utilizzando Sudo. Gli utenti devono ancora fornire credenziali prima dell'elevazione.
A volte la differenza non è importante, a volte lo è, e trovo che entrambi i comandi possano essere utili.
Puoi anche usare Script Elevation PowerToys .
Se sei pronto per passare a console alternative, c'è ConEmu (sono l'autore). Una delle sue caratteristiche: la possibilità di eseguire sia schede elevate che non elevate nella finestra di ConEmu. Le schede possono essere avviate con credenziali diverse.
Per comodità dell'utente, vi è batch-file csudo.cmd (che può essere facilmente adottato per bash). Leggi la descrizione completa in wiki del progetto . In breve, quando si esegue un comando dalla scheda non elevata esistente, ad esempio
csudo dism /online /enable-feature /featurename:NetFX3 /All /Source:D:\sources\sxs /LimitAccess
ConEmu avvierà dism
nella nuova console/scheda elevata (con il prompt UAC precedente in Vista o nella casella Login in XP).
Di default csudo
avvia una nuova console in una divisione (possono essere modificate modificando i contenuti csudo.cmd
).
E naturalmente puoi rinominarlo in Sudo.cmd
se ti piace "classico" Sudo
Word.
Tre passaggi per aggiungere Sudo.
Apri PowerShell.
Copia il seguente script (Ctrl + C) e incollalo in PowerShell (Alt + Spazio + 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
Abiliterà in modo permanente il comando Sudo
in PowerShell.
Sudo <process-name> [param1 [param2 [param3]]]
Esempi:
Sudo Explorer
Sudo notepad
Sudo powershell
Sudo cmd
Sudo taskmgr
Sudo tasklist
Sudo taskkill /IM Skype.exe /PID 8496
Nota: ho mixato lo script di entrambi gli articoli per creare lo script di cui sopra. Piuttosto incollando manualmente lo script nel blocco note ho aggiunto le istruzioni Out-File
per salvare i file ps1
e $profile
dallo script.
Suggerimento: se non sei un grande fan dei popup UAC (come me), salva quanto segue nel file * .reg ed eseguilo:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000
Se lo stai facendo su Windows, oltre al comando Esegui come menzionato in un paio di altre risposte, ci sono anche dei modi per farlo con il mouse.
Se si tiene premuto il tasto Shift come fai clic con il pulsante destro del mouse sulla maggior parte dei file eseguibili in Windows, dovresti notare alcune opzioni più avanzate. Una di queste è l'opzione "Run As...
" (penso che sia chiamata "Run As Administrator
" da Vista in poi).
È anche possibile scaricare una versione più avanzata di RunAs da Microsoft, chiamata ShellRunAs , questo ha miglioramenti rispetto al comando RunA incorporato, sia in modalità riga di comando che in modalità grafica, incluso il permesso di salvare le credenziali dell'account
Come probabilmente hai scoperto, runas ti permetterà di correre come un altro utente ma non può fare elevazione e non passa le directory correnti, le variabili d'ambiente o le lunghe righe di comando.
Hamilton C Shell risolve quello con un vero su e Sudo. su consente di eseguire un comando come un altro utente; Sudo (in realtà un alias su su) ti consente di eseguire un comando elevato. Puoi anche fare entrambe le cose, eseguendo elevati come utenti diversi. Le directory correnti, le variabili di ambiente e le lunghe righe di comando vengono passate tramite un handshake di memoria condivisa tra su in esecuzione nel contesto del chiamante e una copia di se stesso in esecuzione come una parentesi con le nuove credenziali che poi avvia il bambino. Full disclosure: sono l'autore.
Surun è un'applicazione open source gratuita che consente a determinati programmi di funzionare con diritti amministrativi, senza fornire una password senza modificare il registro utente o modificare le variabili di ambiente.
Quando stavo usando Windows XP questa app mi aiuta molto. Beta funziona con Windows 7.
C'è un pacchetto cioccolatoso con il nome conveniente Sudo . Puoi installare il pacchetto con chocolatey usando questo comando:
choco install -y Sudo
Quindi, in qualsiasi Shell di Windows/MS devi usare, puoi usare Sudo
come previsto.
Una sostituzione Sudo
funzionante per il terminale mintty
di Cygwin sarebbe quella di inserire il seguente script nel PATH dell'utente:
$!/bin/bash
cygstart --action=runas mintty -e `which bash` -lc \"[email protected]\"
Per me questa è l'unica alternativa valida per elevare i privilegi di programmi come vim
o cygrunsrv
mentre si lavora su un terminale su Windows.
Questo script fa il lavoro:
@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
Salvalo come Sudo.cmd
e aggiungilo al tuo PATH
Nota: runas
significa in questo contesto "Esegui come amministratore" e non "Esegui come altro utente"
Preso da qui e leggermente modificato per rimuovere l'intestazione di cscript.exe dall'output
La soluzione più semplice a mio avviso è quella di sfruttare PowerShell per eseguire il lavoro, che è portatile e richiederà all'utente l'utilizzo del controllo dell'account utente.
Puoi semplicemente eseguirlo in qualsiasi Shell (cmd o powershell)
powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"
Il seguente script vbs fa il trucco per me. L'ho messo su 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
Esempio di utilizzo su un comando Prompt Sudo net start service