Как запустить программу без прав администратора и обойти подсказку UAC

При запуске некоторые программы требуют повышения разрешения (щит рядом со значком приложения), но на самом деле для их нормальной работы не нужны права администратора. Например, вы можете вручную предоставить пользователям права на папку app в папке ProgramFiles и/или ключи реестра, используемые программой. Если на компьютере включен контроль учетных записей пользователей, то при попытке запустить такую программу от имени обычного пользователя появится приглашение UAC и Windows попросит ввести пароль администратора.

Чтобы обойти этот механизм, многие администраторы просто отключают UAC или предоставляют права администратора, добавляя учетную запись пользователя в локальную группу «Администраторы». Конечно, оба способа небезопасны. Ни один из этих методов не рекомендуется для широкого использования, поскольку они снижают уровень безопасности Windows. В этой статье мы рассмотрим, как запустить программу, требующую прав администратора, от имени обычного пользователя и подавить запрос на повышение UAC.

Настройка разрешений на запуск программы для пользователей, не являющихся администраторами

Программа Windows может запросить у вас права администратора при запуске, если:

  • Программе необходимо получить доступ к системному каталогу или файлу, для которого разрешения NTFS не были предоставлены непривилегированным пользователям;
  • Если программа была скомпилирована со специальным флагом, требующим повышения прав при запуске (requireAdministrator).

В первом случае для решения проблемы достаточно предоставить права пользователя RW или Full Control на каталог программы или нужный системный каталог/файл. Например, программа хранит свои файлы (журналы, файлы конфигурации и т. д.) в собственной папке в C:\Program Files (x86)\SomeApp или в каком-либо системном каталоге. Для корректной работы программы у пользователя должно быть разрешение на запись в эти файлы. Для нормальной работы этой программы необходимы права администратора.

Чтобы программа могла работать от имени пользователя, не являющегося администратором, достаточно вручную предоставить ему (или встроенной группе Users) разрешение на изменение/запись файла/директории на уровне файловой системы NTFS

назначение прав на редактирование папки для обычных пользователейназначение прав на редактирование папки для обычных пользователей

Чтобы найти список файлов, папок и ключей реестра, к которым обращается программа, воспользуйтесь командой Монитор процессов (https://learn.microsoft.com/en-us/sysinternals/downloads/procmon). Включите фильтр по имени программного процесса и найдите все ресурсы, при попытке доступа к которым отображается сообщение Access Denied. Предоставьте необходимые права на папки/файлы/ключи реестра.

procmon: аудит доступа приложений к файловой системе и рееструprocmon: аудит доступа к файловой системе и реестру приложений

Примечание. Вообще-то, не рекомендуется хранить изменяемые данные приложения в каталоге C:\Program Files. Лучше хранить данные приложения в профиле пользователя. Но это вопрос лени и некомпетентности разработчиков приложений.

Разрешить обычным пользователям запускать программу, требующую привилегий администратора

Ранее мы описывали, как отключить приглашение UAC для определенной программы с помощью команды RunAsInvoker параметр. Однако этот метод не является достаточно гибким.

Давайте рассмотрим более простой способ заставить любую программу запускаться без прав администратора (без ввода пароля администратора) и с включенным UAC (уровень 4, 3 или 2 ползунка UAC).

В качестве примера возьмем редактор реестра. regedit.exe (он находится в папке C:\Windows\). Обратите внимание на щит UAC рядом со значком приложения. Этот значок означает, что для запуска этого приложения требуется повышение уровня UAC.

щит UAC рядом со значком приложения на windows10uac shield рядом со значком приложения на windows10

Когда вы запускаете regedit.exe, вы увидите приглашение User Account Control, запрашивающее учетные данные администратора (Do you want to allow this app to make changes to your device?). Если вы не введете пароль и не подтвердите ввод, приложение не запустится.

uac запрашивает пароль администратора для запуска программыuac запрашивает пароль администратора для запуска программы

Попробуем обойти запрос UAC для этой программы. Создайте текстовый файл run-as-non-admin.bat содержащий следующий код на Рабочем столе:

cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"

Чтобы заставить regedit.exe запускаться без привилегий администратора и подавить приглашение UAC, просто перетащите EXE-файл, который вы хотите запустить, на этот BAT-файл на рабочем столе.

Запуск программы под пользователем с обходом приглашения UAC запуск программы под пользователем с обходом приглашения UAC

Редактор реестра должен запускаться без приглашения UAC и без ввода пароля администратора. Если вы откроете диспетчер задач и добавите команду Elevated столбце, вы увидите, что существует процесс regedit.exe без повышенного статуса (запущен с правами неадминистратора).

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

Попробуйте отредактировать любой элемент в ветке реестра HKEY_LOCAL_MACHINE. Как видите, пользователь не может редактировать элемент в этом ключе реестра (у пользователя нет прав на запись для ключей системного реестра). Однако вы можете добавлять или редактировать ключи и параметры реестра в пользовательской ветви (HKEY_CURRENT_USER).

запуск regedit от имени обычного пользователя без прав администратора regedit запускается от имени стандартного пользователя без прав администратора

Таким же образом можно запустить любое приложение с помощью BAT-файла. Просто укажите путь к исполняемому файлу.

run-app-as-non-admin.bat
Set ApplicationPath="C:\Program Files\SomeApp\testapp.exe"
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %ApplicationPath%"

Вы также можете добавить контекстное меню, позволяющее запускать все приложения без повышения уровня. Для этого создайте RunAsUser.REG , скопируйте в него следующий код, сохраните и импортируйте его в реестр Windows, дважды щелкнув на reg-файле (для применения этого изменения вам понадобятся права администратора).

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker]
@="Run as user without UAC privilege elevation"
[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command]
@="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""

добавить запуск без повышения уровня uac в файловый проводник на win10добавить запуск без повышения уровня uac в файловый проводник на win10

После этого, чтобы запустить любое приложение без прав администратора, просто выберите «Запуск от имени пользователя без повышения привилегий UAC» из контекстного меню проводника файлов Windows.

Вы можете развернуть этот пункт меню на всех компьютерах в домене, импортировав параметры реестра с помощью GPO.

Запуск программы от имени пользователя без повышения привилегий UACЗапуск программы от имени пользователя без повышения привилегий UAC

Я хотел бы напомнить вам, что использование RUNASINVOKER режим для программы не позволит вам повысить права доступа. RunAsInvoker подавляет приглашение UAC и сообщает программе, что она должна запускаться с привилегиями текущего пользователя и не запрашивать повышения прав. Если программе действительно нужны повышенные привилегии для редактирования системных настроек или файлов, она не будет работать или снова запросит права администратора.

Как обойти UAC с помощью опции RunAsInvoker в CMD?

Переменная окружения __COMPAT_LAYER позволяет устанавливать различные уровни совместимости для приложений (the Совместимость вкладка в свойствах EXE-файла). Эта переменная позволяет указать параметры совместимости, с которыми вы хотите запустить программу. Например, чтобы запустить приложение в режиме совместимости с Windows 8 с разрешением 640×480, задайте следующее:

set __COMPAT_LAYER=Win8RTM 640x480

запустить приложение в режиме совместимости с windowsзапуск ap в режиме совместимости с windows

Переменная __COMPAT_LAYER имеет несколько параметров, которые нас интересуют. Есть следующие параметры:

  • RunAsInvoker — Запуск приложения с привилегиями родительского процесса без приглашения UAC;
  • RunAsHighest — запуск программы с самыми высокими правами, доступными пользователю (приглашение UAC появится, если у пользователя есть права администратора);
  • RunAsAdmin — запуск приложения от имени администратора (при этом всегда будет появляться приглашение UAC).
Это означает, что параметр RunAsInvoker не предоставляет привилегии администратора, а просто подавляет приглашение UAC.

Следующие команды включают режим RunAsInvoker для текущего процесса и запускают указанную программу без повышения уровня:

set __COMPAT_LAYER=RUNASINVOKER
start "" "C:\Program Files\MyApp\testapp.exe"

Включение режима RunAsInvoker в манифесте EXE-файла

Как упоминалось выше, Windows отображает значок щита UAC для программ, для запуска которых требуются повышенные привилегии. Разработчики устанавливают это требование при компиляции приложения в программе манифест

Вы можете отредактировать манифест любого EXE-файла и отключить требование запуска программы в повышенном режиме.

Воспользуйтесь бесплатной программой Хакер ресурсов инструмент для редактирования манифеста программы. Откройте исполняемый файл программы в Resource Hacker.

В этом примере я буду редактировать манифест программы Autologon.exe инструмента от Sysinternals, который можно использовать для автоматического входа в Windows без пароля.

В дереве слева перейдите к разделу Manifest раздел и откройте манифест программы. Обратите внимание на следующий раздел XML:

<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>

С requireAdministrator опция включена, Windows всегда запускает эту программу с правами администратора.

Измените requireAdministrator на asInvoker и сохраните изменения в файле .exe.отредактируйте манифест exe-файла, добавив параметр asInvokerредактировать манифест exe-файла добавить опцию asInvoker

Обратите внимание, что теперь с иконки программы исчез щит UAC, и вы можете запускать ее от имени текущего пользователя, не запрашивая пароль администратора.

удаление uac shield из значка приложения через манифестудалить uac shield из значка приложения через манифест

Если исполняемый файл приложения подписан цифровой подписью (Code Signing certificate), то после изменения exe-файла он может перестать работать или выдать предупреждение.

В этом случае можно заставить программу использовать внешний файл манифеста. Создайте обычный текстовый файл appname.exe.manifest (например, Autologon.exe.manifest) в каталог с exe-файлом и скопируйте в него код манифеста из Resource Hacker. Замените requireAdministrator на asInvoker. Сохраните файл манифеста.

Чтобы Windows всегда пыталась использовать внешний файл манифеста при запуске EXE-файлов, включите специальный параметр реестра:

REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide" /v PreferExternalManifest /t REG_DWORD /d 1 /f

Перезапустите Windows и убедитесь, что программа использует внешний файл манифеста и запущена без привилегий администратора.

Создание ярлыка для запуска программы с сохраненным паролем администратора

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

Чтобы открыть программу, создайте новый ярлык на рабочем столе. Укажите имя компьютера, имя локального администратора и полный путь к исполняемому файлу целевого приложения.

Например:

runas /user:wks-123\root /savecred "C:\CorpApp\myapp.exe"

создание ярлыка для запуска от имени администратора с сохраненной учетной записьюсоздать ярлык для запуска от имени администратора с сохраненной учетной записью

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

runas: сохранение учетных данных администратораrunas: сохранение учетных данных администратора

Команда RunAs, запущенная с помощью команды /SAVECRED опция, сохраняющая имя пользователя и пароль в диспетчере учетных данных Windows.

При следующем запуске ярлыка инструмент runas автоматически получит сохраненный пароль из Credentials Manager и использует его для запуска приложения под указанной учетной записью локального администратора (вам не придется запрашивать пароль каждый раз, когда вы открываете ярлык).

Следующая команда выводит список сохраненных паролей в Credential Manager:

RunDll32.exe keymgr.dll,KRShowKeyMgr

просмотр сохраненных учетных данных в windows credmanпросмотр сохраненных учетных данных в windows credman

При запуске такого ярлыка в Windows 11 возникает ошибка:

RUNAS ERROR: Unable to run - C:\CorpApp\myapp.exe
740: The requested operation requires elevation.

ошибка runas savedcred: 740: Запрошенная операция требует повышения уровняошибка runas savedcred: 740: Запрошенная операция требует повышения уровня

Чтобы исправить это, измените команду в свойствах ярлыка. Замените ее на:

C:\Windows\System32\runas /profile /user:WKS-123\root /savecred "cmd.exe /C C:\CorpApp\myapp.exe"

windows 11: редактирование ярлыка для запуска программы от имени администратора с сохранением пароляwindows 11: редактирование ярлыка для запуска программы от имени администратора с сохранением пароля

Использование опции /savecred небезопасно, как мы уже говорили выше. Это связано с тем, что пользователь, сохранивший пароль администратора в своем профиле, может использовать его для запуска любой программы или команды с повышенными правами, или даже для сброса пароля учетной записи администратора. Пароли, хранящиеся в диспетчере учетных данных, также могут быть сброшены в виде открытого текста такими инструментами, как Mimikatz, поэтому лучше отключить использование сохраненных паролей.

В Windows можно отключить сохранение пароля в диспетчере учетных данных с помощью параметра групповой политики Сетевой доступ: Не разрешать хранить пароли и учетные данные для сетевой проверки подлинности (Конфигурация компьютера -> Параметры Windows -> Параметры безопасности -> Локальные политики -> Параметры безопасности).

Существует несколько сторонних инструментов, позволяющих обойти недостаток использования сохраненного пароля администратора в runas. Например, AdmiLink, RunAsRob, RunAsSpc. Эти приложения позволяют хранить зашифрованный пароль администратора и безопасно запускать программу с правами администратора. Эти инструменты не позволят пользователю запустить любое приложение или команду с сохраненными учетными данными, поскольку они проверяют путь и контрольную сумму исполняемого файла при его запуске.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *