Questão Existe algum comando 'sudo' para o Windows?


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


414


origem


Eu acredito que o termo que você está procurando é o acesso "elevado". Mesmo que suas credenciais tenham permissão de administrador, os processos sob suas credenciais não têm permissões de administrador até você "sudo" o comando. No Windows, eles chamam de "elevar". - surfasb
Apenas use su e seu comando. Ele abre uma nova instância do powershell que está sendo executada como admin. - IGRACH
@IGRACH não no meu powershell ... - jiggunjer


Respostas:


o correr como comando.

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

Apenas corra:

runas /noprofile /user:Administrator cmd 

iniciar um shell de comando como administrador


254



Você pode achar que deseja o perfil carregado (por exemplo, incluindo variáveis ​​de ambiente) para qualquer uso prolongado. Nesse caso, largue o /noprofile. - Richard
Isso não está funcionando para mim. Depois de digitar minha senha, o prompt de comando é fechado. - Jonas
Isso não é pedir a senha do administrador? sudo está pedindo seu senha! - n611x007
Infelizmente, isso está seriamente desatualizado. Runas simplesmente executa comandos sob um conjunto diferente de credenciais. Mesmo que suas credenciais tenham permissões de administrador, isso não significa que todos os processos sob suas credenciais sejam executados como administrador. - surfasb
+1 para "desatualizado", pois as runas não podem ignorar o UAC. Em vez disso, pressione o botão do Windows, digite cmd e pressione Ctrl + Shift + Enter. - mellow-yellow


Eu descobri elevar hoje que "executa um comando com elevação de privilégio do UAC. Isso é útil para trabalhar dentro de prompts de comando ou com arquivos em lote." Não é o mesmo que sudo, ele altera o usuário em execução para Administrador, mas sua sintaxe é muito mais simples de usar do que runas, e pode manter o diretório atual, 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 objetivo do Elevate não é contornar ou ignorar o UAC (User Account Control), mas sim trabalhar com ele. Enquanto o UAC estiver habilitado, tem para ser algum tipo de prompt no alguns ponto no processo. Se você precisa se livrar de pedir por completo, você tem que desabilitar o UAC.

Os alívios de elevação de ponto de dor estão aumentando um processo específico de um shell não privilegiado e, em seguida, prosseguindo normalmente. Sem isso, você precisa iniciar um prompt de comando privilegiado com clique com o botão direito em "Executar como administrador", que não pode ser facilmente roteirizado, antes de tentar o comando privilegiado.


112



Isso vai perfeito com "Elevar sem solicitar" em secpol.msc. Juntos, eles fazem o mesmo que %wheel ALL=(ALL) NOPASSWD: ALL em sudo. - sayap
@sayap, só para ficar claro, você quer dizer isso: ss64.com/nt/syntax-uac.html? - matt wilkie
O único problema que encontro com o elevate (v1.3.0) é que ele não retorna o código de erro do programa que ele está elevando. - Ken
Sudo.bat: @elevate %* => lucro! - Joe DF
Seria bom mencionar que é um utilitário externo, faltando OOTB. - Hi-Angel


Você pode usar o correr como comando que é semelhante, ou você pode conferir o sudo para Windows projeto ao longo de SourceForge que adiciona um comando sudo.

A diferença é sutil:

Digamos que você tenha dois usuários. Bob é um usuário normal e James é um administrador.

Se você logar como Bob e usar "runas james acommand" o comando é executado como se fosse executado por James, então ele acessa as configurações de usuário de James e qualquer alteração de usuário vai para James Meus documentos Então, se você está instalando um aplicativo, digamos, ele será instalado como James, não como Bob.

Se, por outro lado, Bob fizer "sudo acommand", o comando ainda será executado como Bob, mas com permissões elevadas - assim como o comando sudo do Linux. Para evitar que qualquer usuário consiga sudo, você deve definir um grupo de usuários sudoers que contenha a lista dos usuários normais que têm permissão para elevar usando o sudo. Os usuários ainda precisam fornecer credenciais antes da elevação.

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


66



Você tem certeza? Quando eu executo o sudo no ubuntu, se meu tema atual está em ~/.themes então o aplicativo sudo-ed não será capaz de acessar esse tema, porque não está em /home/root/.themes, e vai usar o tema gtk feio padrão. - hasen
@hasen j - seu problema é justamente porque ~ / .themes avalia antes que o comando seja executado (e, portanto, antes de mudar para o root). - Jared
Outra solução, exceto hospedada no GitHub, é o windosu: github.com/tehsenaus/windosu Acabei de encontrar e parece funcionar muito bem. A coisa favorita é super fácil de instalar. Apenas "npm install -g windosu". - Venryx


Você também pode usar o PowerToys de elevação de script.


39



Awesome - exatamente o que eu estava procurando. Eu não queria correr como um comando tem um usuário diferente, apenas para executá-lo com privilégios elevados. - orip
Exatamente a solução certa para este problema! Quem quer Runas com sua sintaxe confusa? - Stabledog
Eu sempre desejei que o comando elevate fosse embutido no windows. É uma ferramenta fantástica. - nhinkle♦
agora há um Coleção PowerToys de elevação pelo mesmo autor do qual Criando um script autoelevador é particularmente relevante. - matt wilkie
@barlop claro que não. Isso derrotaria o propósito do UAC. - nhinkle♦


Se você está pronto para mudar para consoles alternativos, há ConEmu (Eu sou o autor). Um de seus recursos - a capacidade de executar guias elevadas e não elevadas na janela do ConEmu. Guias podem ser iniciadas com credenciais diferentes também.

Para o conforto do usuário, há arquivo em lote csudo.cmd (que pode ser facilmente adotado para bash). Leia a descrição completa em wiki do projeto. Em resumo, quando você executa algum comando a partir da guia não elevada existente, por exemplo

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

ConEmu vai começar dism no novo console / guia elevado (com o prompt do UAC anterior na caixa Vista ou Login no XP).

Por padrão csudo inicia novo console em uma divisão (pode ser alterações através da edição de csudo.cmd conteúdo).

E, claro, você pode renomeá-lo para sudo.cmd se você gosta de "classic" sudo palavra.

sudo in ConEmu/Windows


25



O csudo há muito tempo foi incluído na distribuição do ConEmu. Nenhum link é necessário a todos. - Maximus
problema aqui é a nova guia do console torna-se inutilizável após o comando sudo'd. Então você não pode continuar trabalhando na aba elevada, é só pegar um press enter or esc to exit mensagem. - jiggunjer
Claro que você não pode. Mesmo no Unix você está de volta ao terminal não elevado depois sudo comando é feito o seu trabalho! Você está indo errado caminho. - Maximus
1) se você vai abrir uma nova janela ou aba você pode mantê-lo, deixe o do utilizador Escolha se eles querem continuar. 2) No meu Ubuntu eu não tenho que sudo cada vez, a elevação dura alguns minutos, eu acho. 3) esta aplicação tem um milhão de opções, mas nada para isso? Talvez eu esteja estragado. - jiggunjer


Método rápido:

Três passos para adicionar o sudo.

  1. Abra o PowerShell.

  2. Copie o seguinte script (Ctrl + C) e cole-o no PowerShell (Alt + Espaço + 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. Acertar Entrar.

Permitirá permanentemente sudo comando no PowerShell.

Uso:

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 aprender:

Nota: Eu misturei o script de ambos os artigos para criar o script acima mencionado. Em vez de colar manualmente o script no bloco de notas, adicionei o Out-File instruções para salvar ps1 e $profile arquivos do script.

Dica: Se você não é um grande fã de pop-ups do 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

23



Eu amo a solução powershell para esta questão. Essa deve ser a maneira mais fácil de elevar alguma coisa. Arquivos .bat existentes podem ser facilmente convertidos em POSH - Mitchell Skurnik
Tem esse erro no windows 10: . : File C:\Users\User\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 cannot be loaded because running scripts is disabled on this system. - sowrov
@sowrov, veja [este artigo] (www.faqforge.com/windows/windows-powershell-running-scripts-is-disabled-on-this-system/). Por padrão, os scripts do PowerShell são desabilitados em qualquer instalação do Windows. Você precisa ativá-lo com este comando set-executionpolicy remotesigned. Outras opções além remotesigned são descritos em documentos oficiais. - vulcan raven
Os leitores notam que este script ps é um wrapper para o powershell -c start -verb runas program.exe funcionalidade. Observe também que você não pode elevar assim com o prompt do cmd (nativamente). Powershell é a melhor opção nativa. - jiggunjer


Se você estiver fazendo isso no Windows, além do comando Executar como mencionado em algumas outras respostas, também há maneiras de fazer isso com o mouse.

Se você segurar o Mudança Ao clicar com o botão direito do mouse na maioria dos arquivos executáveis ​​no Windows, você deve observar algumas opções mais avançadas. Um deles é o "Run As..."opção (acho que é chamado"Run As Administrator"do Vista em diante).

Você também pode baixar uma versão mais avançada do RunAs da Microsoft, chamada ShellRunAs, isso tem aprimoramentos sobre o comando interno RunAs, tanto na linha de comando quanto nos modos gráficos, incluindo a possibilidade de salvar credenciais de conta


20