В системах * nix вы можете получить корневую оболочку следующим образом:
$ su # or 'sudo -s'
#
Корневая оболочка создается в том же терминале.
Я пытаюсь найти что-то, что делает подобное повышение на месте в командной строке Windows. Другими словами, он не должен создавать новое окно или отображать запросы UAC. До сих пор я был в состоянии сделать запланированное задание, которое обходит UAC, но окно командной строки с повышенными правами не появляется на месте.
Существует ли аналогичная команда для Windows, которая выполняет повышение на месте без появления нового окна?
windows
command-line
uac
user2064000
источник
источник
sudo
иногда запрашивает пароль, но это происходит с помощью текстового интерфейса. Мне интересно, как Nano-серверы (которые, по-моему, даже не предлагают графический интерфейс для удаленного рабочего стола по умолчанию) справляются с этим.Ответы:
TL; DR - единственный вариант - порождать другой процесс. (Новое
cmd.exe
.) В случае командной строки запуск нового экземпляра с токеном доступа с более высокими разрешениями всегда приведет к созданию нового окна .Невозможно предоставить дополнительные разрешения для уже запущенного процесса.
Когда пользователь с правами администратора входит в систему Windows с включенным контролем учетных записей (UAC), создаются два отдельных маркера доступа :
Во время создания процесса (например
CMD.EXE
) ему назначается один из этих двух токенов доступа . Если процесс запущен «с повышенными правами» от имени администратора, используется маркер доступа без фильтрации. Если процессу не предоставлены права администратора, используется отфильтрованный токен стандартного пользователя.После создания процесса невозможно заменить его токен доступа . 1 В этой теме MSDN Application Security для Windows Desktop постер, идентифицирующий себя как член команды ядра Windows, заявляет:
Примечание. Контроль учетных записей пользователей был представлен с выпуском Windows Vista .
Этот ответ суперпользователя приводит два дополнительных источника, подтверждающих то же самое:
Сообщение в блоге на devzest.com Программирование с повышенными привилегиями / UAC :
Статья на techtarget.com Как правильно повысить привилегии программ с помощью UAC в Vista :
Поэтому просто невозможно поднять Командную строку или любой другой процесс на месте. Единственный вариант - порождать другой процесс с новым токеном доступа (который может быть другим экземпляром исходного процесса при желании). В случае командной строки запуск нового экземпляра с токеном доступа с более высокими разрешениями всегда приведет к созданию нового окна, и, если в системе включены запросы UAC, они также будут инициированы.
1 Вы можете настроить привилегии в существующем токене доступа с помощью функции AdjustTokenPrivileges , но в соответствии с MSDN :
источник
Хотя я энтузиаст пользователя
TCC-LE
, есть решение, которое не требует каких-либо новых программ:cmd
как администратор.%SystemRoot%\system32\
- если нет,cd
там.copy cmd.exe cmdadmin.exe
(или любое имя, которое вы выберете, напримерsu.exe
).cmdadmin.exe
.Теперь
cmdadmin
вашsu
илиsudo
: вы можете запустить его без параметров, чтобы дать вам оболочку с административными привилегиями, или вы можете запустить его,/c
чтобы выполнить одну команду в этом режиме. В зависимости от вашей политики, вы можете или не можете запросить подтверждение.Обратите внимание, что это всегда будет открывать новое окно (как и решение TCC
start /elevated ...
): для приложения с графическим интерфейсом это ожидается, но для программы командной строки вы можете использовать/k
вместо/c
, чтобы дать вам возможность увидеть выходные данные ; или вы можете запустить через командный файл (sudo.cmd
возможно?), который объединяется& pause
до конца вашей строки выполнения.В любом случае это не совсем то же самое, что
su
иsudo
, но это самое близкое, что вы получите. Установив расположение окон вручную, можно создать новое окно непосредственно под оригиналом.источник
sudo
, с оговоркой о том, что все еще приходится иметь дело с новым окном / процессом, порождаемым. Хотя это, вероятно, не самая лучшая идея с точки зрения безопасности, отключение всех приглашений UAC избавит от необходимости отвечать на приглашение UAC при запуске процесса с повышенными правами.mklink cmdadmin.exe cmd.exe
Есть довольно неудобный способ:
Были лучшие способы, но Microsoft закрыла их. Конечно, вы всегда можете закатать рукава и написать собственный сценарий, эквивалентный
sudo
исходному коду, который я только что дал вам.Богохульство! Сожги его в костре! ;) Шутки в стороне нет. Нет Это было бы ошибкой и уязвимостью безопасности. Microsoft предприняла явные усилия, чтобы гарантировать, что расширенный и стандартный процесс имеют как можно меньше общего.
Умные дети, которые думают о двух бэкэндах (один стандартный и один с повышенными правами) и один графический интерфейс для обоих, должны прочитать о Сессии 0 Изоляция .
источник
Нет такой встроенной команды. Хотя я этого не доказал, я верю в это, потому что я видел несколько способов использования дополнительного программного обеспечения / кода для решения этой проблемы.
Забудь это. Абсолютно забудь это. Это идет вразрез с дизайном UAC. Если бы вы могли управлять этим, вы нарушаете фундаментальный процесс безопасности. Ожидайте, что ваше решение сломается на патч после того, как Microsoft узнает и исправит любой процесс, который вы можете предпринять, чтобы обойти это.
Решение, чтобы избежать запросов UAC, состоит в том, чтобы иметь высокое возвышение для начала. UAC не должен беспокоить вас, если вы достаточно уполномочены. Если вы начнете с более низкого уровня прав (что часто рекомендуется для обеспечения безопасности), а затем попытаетесь сделать что-то, требующее более высокого уровня прав, тогда ожидайте взаимодействия с UAC.
источник
elevate cmd
чтобы открыть новое окно командной строки с приглашением UAC (на сайте также есть команды контекстного меню!). Или, конечно, вы можете просто нажать Ctrl + Shift + щелкнуть значок на панели задач любого существующего окна командной строки, чтобы сделать то же самое - это то, что я склонен делать чаще всего. (Что я знаю, это не то, о чем просил ОП, но то, о чем просил ОП, заблокировано по замыслу.)То, что вы хотите, невозможно в Windows, потому что не поддерживает эту концепцию. Вам нужно начать новый процесс с более высокими разрешениями .
Я использую nircmd, чтобы поднять процессы из командной строки. Ваша команда будет
nircmdc elevate cmd
источник
Я увидел этот вопрос и нашел простое решение. Это крошечная утилита
rsudo
, которая запускает расширенные команды из обычного окна CMD.Примечание: появится приглашение UAC . Спрятать это невозможно, именно так был разработан UAC.
Скачать[Скачать не работает, скоро обновлю]Примечание. Команды запускаются в новом окне. Если вы хотите просмотреть вывод, запустите
rsudo.exe "pause && [command]"
источник
rsudo.exe "[command] && pause"
?pause
запускаетсяЭто странно
Вы можете попробовать сделать ssh на своем собственном компьютере, который будет использовать тот же существующий терминал, но на самом деле будет совсем другим.
Это сработает, но это, вероятно, не то, что вы хотите.
Другие могут найти это полезным, хотя.
источник
Попробуйте воспользоваться командной строкой Take JPSOFT TCC / LE. Он поставляется в 32- и 64-разрядных версиях и является бесплатным, если вам не нужна дополнительная функциональность.
Перейдите на https://jpsoft.com/ и нажмите «Загрузки» и выберите то, что вы хотите.
TCC / LE имеет START / ELEVATED, который запускает программу с повышенными правами администратора. (Только для Windows Vista или более поздней версии.)
источник