it-swarm-eu.dev

C'è un comando 'Sudo' per Windows?

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?

435
ukanth

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

262
Davy Landman

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.

120
matt wilkie

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.

66
Simon P Stevens

Puoi anche usare Script Elevation PowerToys .

39
Quog

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.

Sudo in ConEmu/Windows

28
Maximus

Metodo rapido:

Tre passaggi per aggiungere Sudo.

  1. Apri PowerShell.

  2. 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
  1. Colpire Enter.

Abiliterà in modo permanente il comando Sudo in PowerShell.

Uso:

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

Metodo lungo per l'apprendimento:

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
24
vulcan raven

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

20
GAThrawn

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.

3
Nicole Hamilton

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.

3
diimdeep

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.

3
ypid

Una sostituzione Sudofunzionante per il terminale minttydi 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 vimo cygrunsrvmentre si lavora su un terminale su Windows.

1
karafior

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

1
Charles Milette

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"
1
twall

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

0
ceztko