Использование `runas.exe` не похоже на PowerShell sudo

1184
xdhmoore

Я пытаюсь использовать runasфункцию PowerShell, чтобы выполнять функции бедного человека sudo, но runas, похоже, на самом деле не дает мне права администратора. Например, я получаю отказано в доступе при запуске:

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

Кроме того, если я открываю vim и пытаюсь записать файл в System32, при сохранении выдается сообщение об ошибке:

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

Я не думаю, что это проблема с учетными данными, потому что я могу выполнять неадминистративные задачи, такие как запись файлов на рабочий стол, и мой пароль, кажется, работает нормально. Я проверил в инструменте «Управление компьютером» в разделе «Администрирование», а «admin» в группе «Администраторы». Что мне не хватает? Я на Windows 7 Pro.

3
Здесь runas не является функцией powershell. Если вы используете PowerShell, попробуйте `> @powershell saps -credential yourdomain \ admin cmd '/ K mkdir C: \ Windows \ System32 \ mydirectory' -verb runas`. chingNotCHing 7 лет назад 1
Спасибо, я запустил `Start-Process` /` saps`. Что делает синтаксис `@ powershell`? xdhmoore 7 лет назад 0
Не берите в голову, [я нашел это] (https://superuser.com/questions/864901/what-is-the-difference-between-running-powershell-and-powershell-any-command-w). xdhmoore 7 лет назад 0

3 ответа на вопрос

0
xdhmoore

Я нашел следующую информацию в get-help -full start-processдокументации:

# Запускает процесс PowerShell с разрешениями «Запуск от имени администратора».

PS C:> запуск процесса powershell.exe -verb runas

Лучшее, что я могу сказать, runas.exeможет изменить вашего пользователя, но не повысит ваши права. Однако, исходя из приведенной выше цитаты, Start-Processпроцесс powershell может быть использован для этого, поэтому я закончил тем, что выполнил следующее в своей sudoфункции, которая, кажется, работает достаточно хорошо:

$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 
Как мы должны использовать этот длинный сценарий? А почему "Старт-Процесс PowerShell"? Исходя из этого, предполагается запуск других команд, а не PowerShell. 7 лет назад 0
Он используется примерно так же, как * nix `sudo`:` sudo "mkdir C: \ Windows \ System32 \ followthewhiterabbit" `. Start-Process используется потому, что, как упоминалось в chingNotCHing, его опция `-Verb runas` дает вам повышенные разрешения, а exe` runas` - нет. Моя цель - запускать команды powershell (включая функции), поэтому я использую Start-Process для запуска повышенного уровня PowerShell для запуска моих команд. Скрипт длинный, потому что изначально при использовании `runas` я не мог найти лучший способ для захвата выходных данных, кроме записи в файл tmp. С «Start-Process», возможно, есть лучший способ. xdhmoore 7 лет назад 0
0

После моего исследования в Windows 10, следующие команды РАБОТА :

Высота:

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

Переключение пользователей:

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

Следующие команды НЕ РАБОТАЮТ :

  • runas /user:admin "cmd /K mkdir C:\Windows\System32\mydirectory" - Это не приводит к повышению привилегий
  • saps -Credential admin "cmd" -Arg "/K mkdir C:\Windows\System32\mydirectory" - Это не приводит к повышению привилегий
  • New-Item -Credential admin "C:\Windows\System32\mydirectory" - Поставщик FileSystem не поддерживает альтернативные учетные данные, кроме командлета New-PSDrive.
-1
Wes Sayeed

UAC включен? Если да, запускаете ли вы сценарий PowerShell из командной строки с повышенными привилегиями?

На команду runas распространяются ограничения UAC его родительского командного окна. Если вы не вызывали команду runas из командной строки с повышенными правами, у пользователя не будет повышенных учетных данных, даже если это административная учетная запись.

К сожалению, так работает UAC. Единственное отличие состоит в том, что приложение CLI (такое как runas) не может запрашивать повышение прав, когда это необходимо так, как это может делать программа GUI. В операционных системах * NIX нет Windows, эквивалентного команде sudo.

Это не решение проблемы. Это то, что мы уже знаем из вопроса. 7 лет назад 0
Да, UAC включен. Нет, я не работаю с повышенными привилегиями. xdhmoore 7 лет назад 0