2009-09-17 09:24:35 +0000 2009-09-17 09:24:35 +0000
463
463

Existe algum comando 'sudo' para Windows?

Eu trabalho sempre com uma conta sem administrador no meu computador Windows. Por vezes preciso de instalar programas que requerem acesso de administrador. Como eu uso principalmente o prompt de comando Windows, existe algum comando Windows para escalar privilégios, semelhante ao comando do terminal Linux sudo?

Respostas (15)

272
272
272
2009-09-17 09:29:46 +0000

O comando runas .

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

Basta correr:

runas /noprofile /user:Administrator cmd

para iniciar uma shell de comandos como administrador

128
128
128
2011-04-12 06:42:00 +0000
  • Elevate *** - “executa um comando com elevação de privilégios UAC. Isto é útil para trabalhar dentro de comandos ou com ficheiros batch.” Não é o mesmo que sudo, muda o utilizador executante para Administrador, mas a sua sintaxe é muito mais simples de usar que runas, e pode manter o directório actual, permitindo o uso de caminhos relativos.
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".

O objectivo do Elevate não é trabalhar em torno ou contornar o UAC (User Account Control), mas sim trabalhar com ele. Desde que o UAC esteja activado, tem de ser uma espécie de prompt em algum ponto do processo. Se você precisa se livrar de um alerta, você tem que desabilitar o UAC .

O ponto de dor Elevate alivia um determinado processo a partir de uma concha não-privilegiada e depois continuar como normalmente. Sem isto tem de iniciar um comando privilegiado com clique com o botão direito do rato > “Run as Administrator” antes de tentar o comando privilegiado, o qual não pode ser facilmente programado.

Isto funciona bem com “Elevate without prompting” em secpol.msc. Juntos, eles fazem o mesmo que %wheel ALL=(ALL) NOPASSWD: ALL em sudo

Uma limitação conhecida é que não devolve o código de erro do programa que está a elevar.

Se a sua memória muscular está presa em sudo, crie um alias usando Doskey : doskey sudo=elevate -w

ou batchfile em PATH: @elevate -w %*

Elevate é uma ferramenta de terceiros escrita por Johannes Passing . É um download de 11kb e portátil (não é necessário instalar): http://code.kliu.org/misc/elevate/

67
67
67
2009-09-17 09:28:30 +0000

Pode usar o comando runas que é um pouco semelhante, ou pode verificar o projecto sudo for Windows em SourceForge que adiciona um comando sudo.

A diferença é subtil:

Digamos que tem dois utilizadores. Bob é um utilizador normal e James é um administrador.

Se entrar como Bob e usar “runas james acommand” o comando é executado como se fosse executado por James, então acede às definições de utilizador de James e quaisquer alterações de utilizador vão para as pastas James My Documents & settings, etc. Assim, se estiver a instalar uma aplicação, digamos, ela será instalada como James, não como Bob.

Se por outro lado o Bob fizer “sudo acommand” o comando ainda é executado como Bob, mas com permissões elevadas - tal como o comando sudo do Linux. Para evitar que qualquer utilizador possa usar o sudo tem de definir um grupo de utilizadores sudoers que contenha a lista dos utilizadores normais que têm permissão para se elevarem usando o sudo. Os utilizadores ainda têm de fornecer credenciais antes da elevação.

Às vezes a diferença não é importante, às vezes é, e eu acho que ambos os comandos podem ser úteis.

41
41
41
2009-09-17 13:11:39 +0000

Pode também utilizar o Script Elevation PowerToys .

30
30
30
2012-10-26 07:52:13 +0000

Se estiver pronto para mudar para consolas alternativas, existe o ConEmu (sou o autor). Uma das suas características - a capacidade de executar tanto as abas elevadas como as não elevadas na única janela do ConEmu. Os separadores também podem ser iniciados com diferentes credenciais.

Para conforto do utilizador, existe o ficheiro de lote csudo.cmd (que pode ser facilmente adoptado para esmagar). Leia a descrição completa em project’s wiki . Em resumo, quando você executa algum comando a partir de um separador não-elevado existente, por exemplo

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

ConEmu irá iniciar dism na nova consola/tab elevada (com prompt UAC anterior no Vista ou na caixa de Login no XP).

Por defeito csudo inicia a nova consola numa divisão (pode ser alterado através da edição do conteúdo de csudo.cmd).

E, claro, pode mudar o nome para sudo.cmd se gostar da palavra “clássico” sudo.

24
24
24
2012-08-28 10:36:22 +0000

Método rápido:

Três passos para adicionar sudo.

  1. Abrir PowerShell.

  2. Copie o seguinte script (Ctrl+C) e cole-o no PowerShell (Alt+Space+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. Pressione Enter.

Irá activar permanentemente o comando sudo no PowerShell.

Utilização:

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

Exemplos:

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

Método longo para aprendizagem:

Note: Misturei o script de ambos os artigos para criar o script acima mencionado. Ao invés de colar manualmente o script no bloco de notas, adicionei os comandos Out-File para salvar os arquivos ps1 e $profile do script.

** Dica: Se você não é um grande fã de popups UAC (como eu), salve o seguinte no arquivo *.reg e execute-o:**

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000
19
19
19
2009-09-17 11:22:41 +0000

Se estiver a fazer isto no Windows, então para além do comando Run As mencionado em algumas outras respostas, existem também formas de o fazer com o rato.

Se mantiver premida a tecla Shift enquanto clica com o botão direito do rato na maioria dos ficheiros executáveis no Windows, deverá notar algumas opções mais avançadas. Uma delas é a opção “Run As...” (penso que se chama “Run As Administrator” a partir do Vista).

Também pode fazer o download de uma versão mais avançada de RunAs da Microsoft, chamada ShellRunAs , esta tem melhorias em relação ao comando RunAs incorporado, tanto no modo de linha de comando como no modo gráfico, incluindo a possibilidade de guardar as credenciais da conta

4
4
4
2011-11-17 15:24:50 +0000

A Surun é uma aplicação gratuita e de código aberto que permite a certos programas correr com direitos administrativos, sem fornecer uma password sem alterar o registo do utilizador ou modificar variáveis de ambiente.

Quando estava a utilizar o Windows XP esta aplicação ajuda-me muito. A Beta funciona no Windows 7.

3
3
3
2012-09-06 15:01:51 +0000

Como você provavelmente descobriu, o runas lhe permitirá executar como outro usuário mas não pode fazer elevação e não passa diretórios atuais, variáveis de ambiente ou linhas de comando longas. Hamilton C shell resolve isso com um su e sudo genuínos. su permite executar um comando como outro usuário; sudo (na verdade um apelido para su) permite executar um comando elevado. Você também pode fazer ambos, rodando elevado como um usuário diferente. Os directórios actuais, variáveis de ambiente e longas linhas de comando são passados através de um aperto de mão de memória partilhada entre o su a correr no contexto da pessoa que chama e uma cópia de si a correr como um interlúdio com as novas credenciais que depois inicia a criança. Divulgação completa: eu sou o autor.

3
3
3
2018-06-14 18:44:28 +0000

Existe um pacote de chocolate com o conveniente nome sudo . Pode instalar o pacote com chocolatey usando este comando:

choco install -y sudo

Depois em qualquer shell Windows/MS que tenha de usar, pode usar o sudo como esperado.

3
3
3
2019-11-07 16:12:24 +0000

Eu escrevi gsudo , um sudo para janelas que se parece com *nix sudo e tem algumas características matadoras:

  • Funciona dentro da consola actual (em anexo) sem quebrar o auto-completar da tecla de tabulação. Ou adicione -n para lançar numa nova janela.
  • Manipula todos os cenários de forma fiável para ser usado em scripts. (ExitCodes, StdIn/Out/Err Redirection/Capture)
  • Suporta Cmd/PowerShell/PowerShell Core
  • Cache de Credenciais: Se o gsudo for invocado várias vezes em minutos, mostra apenas uma vez o pop-up UAC.

Utilização

gsudo Abre uma shell elevada na consola actual.

gsudo [options] {command} [arguments]Executa o comando especificado com permissões elevadas.

Mais relevante [options]:

  • -n | --new* Inicia o comando numa nova consola com direitos elevados (e regressa imediatamente).
  • -w | --wait* Forçar esperar pelo fim do processo (e devolver o código de saída).
  • -s | --system* Executar como conta do Sistema Local (“NT AUTHORITY\SYSTEM”).
  • --copyev* Copiar todas as variáveis de ambiente para a sessão elevada antes de executar.

Instalação

  • Usando Scoop: scoop install gsudo
  • Usando Chocolatey: choco install gsudo
  • Instalação Manual
PowerShell -Command "Set-ExecutionPolicy RemoteSigned -scope Process; iwr -useb https://raw.githubusercontent.com/gerardog/gsudo/master/installgsudo.ps1 | iex"
1
1
1
2014-11-26 09:45:34 +0000

Um substituto para o terminal sudo do Cygwin’s mintty seria colocar o seguinte script no PATH do utilizador:

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

Para mim este é o único substituto viável para elevar privilégios de programas como o vim ou o cygrunsrv enquanto se trabalha num terminal no Windows.

1
1
1
2017-11-20 19:58:47 +0000

A solução mais simples, do meu ponto de vista, é utilizar o powerhell para fazer o trabalho, que é portátil e irá incitar o utilizador a utilizar o UAC.

Pode simplesmente executá-lo em qualquer shell (cmd ou powerhell)

powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"
0
0
0
2018-02-01 21:29:20 +0000

O seguinte script vbs permite lançar um dado comando com argumentos com elevação e imita o comportamento do comando original unix sudo para um conjunto limitado de casos usados (não irá armazenar credenciais nem permite executar verdadeiramente comandos com credenciais diferentes). Coloquei-o em 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

Exemplo de utilização num prompt de comando sudo net start service

0
0
0
2016-01-10 21:08:24 +0000

Este script faz o trabalho:

@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

Guarde-o como sudo.cmd e depois adicione-o ao seu PATH

Nota: o runas significa neste contexto “Executar como administrador” e não “Executar como outro utilizador” Tirado daqui e ligeiramente editado para remover o cabeçalho cscript.exe da saída