Nos sistemas * nix, você pode obter um shell raiz assim:
$ su # or 'sudo -s'
#
O shell raiz é gerado no mesmo terminal.
Estou tentando encontrar algo que faça uma elevação semelhante no local no prompt de comando do Windows. Em outras palavras, ele não deve gerar uma nova janela ou exibir prompts do UAC. Até agora, consegui fazer uma tarefa agendada que ignora o UAC, mas a janela elevada do prompt de comando não é gerada no local.
Existe um comando semelhante para o Windows que realiza uma elevação no local sem gerar uma nova janela?
windows
command-line
uac
user2064000
fonte
fonte
sudo
às vezes, solicita uma senha, mas o faz com uma interface de texto. Estou me perguntando como os servidores Nano (que eu acredito que nem oferecem uma GUI para Área de Trabalho Remota por padrão) lidam com isso.Respostas:
TL; DR - A única opção é gerar outro processo. (Uma nova
cmd.exe
.) No caso do prompt de comando, iniciar uma nova instância com um token de acesso com permissões mais altas sempre resultará na criação de uma nova janela .Não é possível conceder permissões adicionais a um processo já em execução .
Quando um usuário com direitos administrativos efetua login em uma máquina Windows com o Controle de Conta de Usuário (UAC) ativado, dois tokens de acesso separados são criados :
No momento em que um processo (por exemplo
CMD.EXE
) é criado, é atribuído um desses dois tokens de acesso . Se o processo for executado "elevado" como Administrador, o token de acesso não filtrado será usado. Se o processo não receber direitos de administrador, o token de usuário padrão filtrado será usado.Após a criação de um processo, não é possível substituir seu token de acesso . 1 Neste segmento do MSDN Application Security para Windows Desktop , um pôster que se identifica como membro da Equipe do Kernel do Windows declara:
Nota: O Controle de Conta de Usuário foi introduzido com o lançamento do Windows Vista .
Esta resposta do superusuário cita duas fontes adicionais que confirmam o mesmo:
A publicação no blog devzest.com Privilégio elevado de programação / UAC :
O artigo techtarget.com Como elevar os privilégios dos programas corretamente usando o UAC do Vista :
Portanto, simplesmente não é possível elevar o prompt de comando ou qualquer outro processo no local. A única opção é gerar outro processo com um novo token de acesso (que pode ser outra instância do processo original, se desejado). No caso do prompt de comando, iniciar uma nova instância com um token de acesso com permissões mais altas sempre resultará na criação de uma nova janela e, se os prompts do UAC estiverem ativados no sistema, eles também serão acionados.
1 Você pode ajustar os privilégios em um token de acesso existente com a função AdjustTokenPrivileges , mas de acordo com o MSDN :
fonte
Embora eu seja um usuário entusiasta
TCC-LE
, existe uma solução que não precisa de nenhum novo programa: -cmd
como administrador.%SystemRoot%\system32\
- se não estivercd
lá.copy cmd.exe cmdadmin.exe
(ou qualquer nome que você escolher, comosu.exe
).cmdadmin.exe
.Agora
cmdadmin
é seusu
ousudo
: você pode iniciá-lo sem parâmetros para fornecer um shell com privilégios administrativos ou executá-lo/c
para executar um único comando nesse modo. Dependendo de suas políticas, você pode ou não ser solicitado a confirmar.Observe que isso sempre abrirá uma nova janela (assim como a solução TCC
start /elevated ...
): para um aplicativo GUI, isso é esperado, mas para um programa de linha de comando, você pode usar em/k
vez de/c
, para ter a chance de ver a saída ; ou você pode executar através de um arquivo em lotes (sudo.cmd
talvez?) que concatena& pause
o final da sua sequência de execução.Em ambos os casos, não é exatamente o mesmo que
su
ousudo
, mas é o mais próximo que você vai chegar. Ao definir o layout das janelas manualmente, a nova janela pode ser criada diretamente abaixo e adjacente ao original.fonte
sudo
, com a ressalva de ainda ter que lidar com uma nova janela / processo sendo gerado. Embora provavelmente não seja a melhor ideia do ponto de vista de segurança, desabilitar todos os prompts do UAC eliminaria a necessidade de responder ao prompt do UAC quando o processo elevado fosse iniciado.mklink cmdadmin.exe cmd.exe
Existe uma maneira bastante inconveniente:
Havia maneiras melhores, mas a Microsoft as fechou. Claro, você sempre pode arregaçar as mangas e escrever seu próprio script equivalente
sudo
ao código-fonte que acabei de fornecer.Blasfêmia! Queime-o na estaca! ;) Brincadeira à parte, não. Não existe. Isso seria um bug e uma vulnerabilidade de segurança. A Microsoft fez um esforço explícito para garantir que o processo elevado e o padrão tenham o mínimo em comum possível.
Crianças inteligentes que estão pensando em dois back-ends (um padrão e um elevado) e um front-end gráfico para ambos devem ler sobre o isolamento da sessão 0 .
fonte
Não existe um comando desse tipo. Embora eu não tenha provado isso, acredito nisso porque vi várias maneiras de usar código / software extra para solucionar esse problema.
Esqueça. Absolutamente esqueça. Isso vai contra o design do UAC. Se você pudesse gerenciar isso, está quebrando um processo de segurança fundamental. Espere que sua solução seja interrompida após o conhecimento e a correção da Microsoft, seja qual for o processo que você possa fazer para solucionar esse problema.
A solução para evitar solicitações do UAC é ter uma elevação alta para começar. O UAC não deve incomodá-lo se você estiver suficientemente autorizado. Se você começar com uma elevação mais baixa (geralmente recomendada para obter benefícios de segurança) e tentar fazer algo que exija elevação mais alta, espere a interação do UAC.
fonte
elevate cmd
para abrir uma nova janela de prompt de comando com um prompt do UAC (o site também possui comandos de menu de contexto!). Ou, é claro, basta pressionar Ctrl + Shift + Clique no ícone da barra de tarefas de qualquer janela de prompt de comando para fazer o mesmo - é o que costumo fazer com mais frequência. (O que eu sei não é o que o OP pediu, mas o que o OP pediu está bloqueada por design.)O que você deseja é impossível no Windows, porque não suporta esse conceito. Você precisa iniciar um novo processo com permissões mais altas .
Eu uso o nircmd para elevar processos da linha de comando. Seu comando seria
nircmdc elevate cmd
fonte
Eu vi essa pergunta e surgiu com uma solução simples. Este é um pequeno utilitário chamado
rsudo
, que executa comandos escalados a partir de uma janela CMD comum.Nota: Um prompt do UAC será exibido. Ocultar isso não é possível, é assim que o UAC foi projetado.
Download[O download não está funcionando, será atualizado em breve]Nota: Os comandos são executados em uma nova janela. Se você deseja visualizar a saída, execute
rsudo.exe "pause && [command]"
fonte
rsudo.exe "[command] && pause"
?pause
para ser executado primeiro e depoisEsse aqui é estranho.
Você pode tentar fazer um ssh em seu próprio computador, que usaria o mesmo terminal existente, mas seria realmente um terminal completamente diferente.
Vai funcionar, mas provavelmente não é o que você deseja.
Outros podem achar útil.
fonte
Tente o prompt de comando TCC / LE do JPSOFT Take Command . Ele vem nas versões de 32 e 64 bits e é gratuito, a menos que você queira mais funcionalidades.
Vá para https://jpsoft.com/, clique em Downloads e selecione o que deseja.
O TCC / LE possui um START / ELEVATED, que inicia o programa elevado com privilégios totais de administrador. (Somente Windows Vista ou posterior.)
fonte