Пакетный файл: сбросьте повышенные привилегии (запустите команду от имени исходного пользователя)

У меня есть командный файл, который запускается с повышенными привилегиями (мой установщик порождает его), но в определенный момент мне нужно запустить команду от имени исходного пользователя, запустившего мой установщик (т.е. отказаться от повышенных привилегий).

Возможно ли это сделать?


person sashoalm    schedule 26.11.2013    source источник


Ответы (2)


Вы можете запустить команду с ограниченными привилегиями с помощью:

runas /trustlevel:0x20000 "YourCommandHere"

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

Если вы хотите запустить более одной команды с ограниченными привилегиями, вы можете поместить их в отдельный командный файл и запустить с помощью:

runas /trustlevel:0x20000 "cmd /C PathToYourBatchFile"

В любом случае это откроет новую консоль с ограниченными привилегиями. Вы также должны использовать этот синтаксис всякий раз, когда вы хотите запустить с ограниченными привилегиями внутреннюю команду (например, copy, del и т. Д.), Поскольку они предоставляются интерпретатором командной строки и не имеют связанного пути.

Обратите внимание, что 0x20000 - это уровень доверия обычных пользователей. Вы можете перечислить другие доступные уровни доверия, запустив

runas /showtrustlevels
person GOTO 0    schedule 26.11.2013
comment
Хм, похоже, это немного отличается от того, что я ожидал. При обычном запуске cmd.exe в строке заголовка отображается только C:\Windows\System32\cmd.exe, при запуске с повышенными привилегиями отображается Administrator: C:\Windows\System32\cmd.exe, при запуске с runas /trustlevel:0x20000 cmd.exe отображается Administrator: cmd (running as sashoalm-PC\sashoalm with restricted privileges). Как видите, это не то же самое, что запускать его в обычном режиме, в смысле «запускать от имени исходного пользователя». Есть ли у вас идеи, в чем могут быть различия? - person sashoalm; 26.11.2013
comment
@sashoalm новая консоль по-прежнему связана с учетной записью администратора, но работает с привилегиями обычного пользователя (даже если ваша учетная запись имеет права администратора). Чтобы работать от имени исходного пользователя, ознакомьтесь с другими параметрами runas. - person GOTO 0; 26.11.2013
comment
Обозреватель процессов перечисляет оба процесса как имеющие имя пользователя sashoalm-PC\sashoalm. Моя учетная запись пользователя - это учетная запись администратора. Итак, если имя пользователя совпадает, а привилегии одинаковы, почему заголовок cmd сообщает о разнице? - person sashoalm; 26.11.2013
comment
Что ж, Windows позволяет одному и тому же пользователю запускать разные приложения с разным уровнем надежности. Это объясняется здесь: msdn.microsoft.com/en-us/library/bb625957 .aspx - person GOTO 0; 26.11.2013
comment
Как-то у меня это не работает. Я получаю RUNAS ERROR: Unable to run - cmd 1168: Element not found.. Даже когда я указываю полный путь к cmd, он показывает ту же ошибку. Он работает при использовании /user:<username>, но тогда мне нужно ввести PW. - person Joerg S; 04.05.2021
comment
На самом деле я обнаружил проблему: была просто опечатка ... вместо 0x20000 было 0x2000 - person Joerg S; 04.05.2021

1. Это все еще привилегированная программа (даже с ограничениями) в диспетчере задач с помощью этой команды:

runas /trustlevel:0x20000 <cmd>

2. Вы можете попробовать другой способ, который сделает его непривилегированным в диспетчере задач:

runas /savecred /user:%username% <cmd>

Вам все равно нужно вводить пароль один раз, но не каждый раз.

3. Используйте explorer.exe для запуска программы:

explorer.exe <cmd>

Exploere.exe не принимает аргументы для cmd, вы можете создать временный файл сценария и запустить его с помощью explorer.exe, если аргументы необходимы.

person vincez    schedule 13.07.2019