O uso de 'runas.exe' parece não funcionar como o PowerShell sudo

3

Estou tentando usar runas em uma função do PowerShell para servir como sudo de um homem pobre, mas runas não parece me conceder acesso de administrador. Por exemplo, recebo um acesso negado durante a execução:

runas /user:admin "cmd /K mkdir C:\Windows\System32\mydirectory"

Além disso, se eu abrir o vim e tentar gravar um arquivo no System32, será exibido um erro quando eu salvar:

runas /user:admin "C:\Program Files (x86)\Vim\vim74\gvim.exe C:\Windows\System32\mynewtextfile.txt"

Não acho que seja um problema de credenciais, porque posso executar tarefas não administrativas, como gravar arquivos na área de trabalho, e minha senha parece funcionar bem. Eu verifiquei na ferramenta "Gerenciamento do Computador" nas Ferramentas Administrativas, e "admin" está no grupo "Administradores". o que estou perdendo? Eu estou no Windows 7 Pro.

    
por xdhmoore 09.01.2017 / 02:38

3 respostas

0

Após minha investigação no Windows 10, os seguintes comandos WORK :

Elevação:

saps -Verb RunAs "cmd" -Arg "/K mkdir C:\Windows\System32\mydirectory"

Alternando usuários:

saps -Verb RunAsUser "cmd" -Arg "/K mkdir C:\Windows\System32\mydirectory"

Os seguintes comandos NÃO FUNCIONAM :

  • runas /user:admin "cmd /K mkdir C:\Windows\System32\mydirectory" - Isso não resulta em elevação de privilégios
  • saps -Credential admin "cmd" -Arg "/K mkdir C:\Windows\System32\mydirectory" - Isso não resulta em elevação de privilégios
  • New-Item -Credential admin "C:\Windows\System32\mydirectory" - O provedor FileSystem não suporta credenciais alternativas, exceto o cmdlet New-PSDrive.
por 09.01.2017 / 07:10
0

Encontrei as informações a seguir na documentação get-help -full start-process :

# Starts a PowerShell process with "Run as Administrator" permissions.

PS C:>start-process powershell.exe -verb runas

O melhor que posso dizer é que runas.exe pode alterar seu usuário, mas não elevará suas permissões. No entanto, com base na citação acima, o Start-Process process do powershell pode ser usado para fazer isso, então acabei fazendo o seguinte na minha função sudo , que parece estar funcionando bem:

$MY_PROFILE_TMP="$Env:TMP\my_profile_tmp";
Function Init-TMP() {
   #Make sure my personal tmp directory exists
   if (!(Test-Path $MY_PROFILE_TMP)) {
      mkdir $MY_PROFILE_TMP | Out-Null
   }
}

Function As-Admin() {
   Init-TMP

   #Create unique temp filenames to capture stderr and stdout
   $GUID=New-Guid
   $ADMIN_OUT="$MY_PROFILE_TMP\$($GUID)_OUT.txt"
   $ADMIN_ERR="$MY_PROFILE_TMP\$($GUID)_ERR.txt"

   #Remove temp files if for some anomoly or error they already exist
   rm -ErrorAction Ignore $ADMIN_OUT
   rm -ErrorAction Ignore $ADMIN_ERR

   #Start powershell with elevated permissions and write to the tmp out and error files
   #Without the &{}, invalid commands like 'sudo dinosaur' don't get
   #captured to the error file
   Start-Process powershell "& { $args } 2>$ADMIN_ERR > $ADMIN_OUT" -Verb runas -Wait -WindowStyle Hidden

   #Write to the current console the out and error results from the elevated process
   #TODO ideally, we'd read from these as a stream  so the order would be correct...
   cat $ADMIN_ERR -Delimiter None | Write-Error
   cat $ADMIN_OUT

   #Remove the temp files
   rm -ErrorAction Ignore $ADMIN_OUT
   rm -ErrorAction Ignore $ADMIN_ERR
}

#Make an alias "sudo"
New-Alias -Name sudo -Value As-Admin
    
por 09.01.2017 / 05:05
-1

Você tem o UAC? Em caso afirmativo, você está executando o script do PowerShell em um prompt elevado?

O comando runas está sujeito às restrições do UAC de sua janela de comando pai. Se você não chamou o comando runas de um prompt elevado, o usuário não terá credenciais elevadas, mesmo que seja uma conta administrativa.

Infelizmente, é assim que funciona o UAC. A única diferença é que um aplicativo CLI (como runas) não pode solicitar a elevação quando precisa da maneira que um programa GUI pode. Não há nenhum equivalente do Windows para o comando sudo nos sistemas operacionais * NIX.

    
por 09.01.2017 / 06:09