
При запуске некоторые программы требуют повышения разрешения (щит рядом со значком приложения), но на самом деле для их нормальной работы не нужны права администратора. Например, вы можете вручную предоставить пользователям права на папку app в папке ProgramFiles и/или ключи реестра, используемые программой. Если на компьютере включен контроль учетных записей пользователей, то при попытке запустить такую программу от имени обычного пользователя появится приглашение UAC и Windows попросит ввести пароль администратора.
Чтобы обойти этот механизм, многие администраторы просто отключают UAC или предоставляют права администратора, добавляя учетную запись пользователя в локальную группу «Администраторы». Конечно, оба способа небезопасны. Ни один из этих методов не рекомендуется для широкого использования, поскольку они снижают уровень безопасности Windows. В этой статье мы рассмотрим, как запустить программу, требующую прав администратора, от имени обычного пользователя и подавить запрос на повышение UAC.
- Настройка разрешений на запуск программы для пользователей, не являющихся администраторами
- Разрешить стандартным пользователям запускать программу, требующую прав администратора
- Как обойти UAC с помощью опции RunAsInvoker в CMD?
- Включение режима RunAsInvoker в манифесте EXE-файла
- Создание ярлыка для запуска программы с сохраненным паролем администратора
Настройка разрешений на запуск программы для пользователей, не являющихся администраторами
Программа Windows может запросить у вас права администратора при запуске, если:
- Программе необходимо получить доступ к системному каталогу или файлу, для которого разрешения NTFS не были предоставлены непривилегированным пользователям;
- Если программа была скомпилирована со специальным флагом, требующим повышения прав при запуске (
requireAdministrator
).
В первом случае для решения проблемы достаточно предоставить права пользователя RW или Full Control на каталог программы или нужный системный каталог/файл. Например, программа хранит свои файлы (журналы, файлы конфигурации и т. д.) в собственной папке в C:\Program Files (x86)\SomeApp
или в каком-либо системном каталоге. Для корректной работы программы у пользователя должно быть разрешение на запись в эти файлы. Для нормальной работы этой программы необходимы права администратора.
Чтобы программа могла работать от имени пользователя, не являющегося администратором, достаточно вручную предоставить ему (или встроенной группе Users) разрешение на изменение/запись файла/директории на уровне файловой системы NTFS
Чтобы найти список файлов, папок и ключей реестра, к которым обращается программа, воспользуйтесь командой Монитор процессов (https://learn.microsoft.com/en-us/sysinternals/downloads/procmon). Включите фильтр по имени программного процесса и найдите все ресурсы, при попытке доступа к которым отображается сообщение Access Denied. Предоставьте необходимые права на папки/файлы/ключи реестра.
Разрешить обычным пользователям запускать программу, требующую привилегий администратора
Ранее мы описывали, как отключить приглашение UAC для определенной программы с помощью команды RunAsInvoker параметр. Однако этот метод не является достаточно гибким.
Давайте рассмотрим более простой способ заставить любую программу запускаться без прав администратора (без ввода пароля администратора) и с включенным UAC (уровень 4, 3 или 2 ползунка UAC).
В качестве примера возьмем редактор реестра. regedit.exe (он находится в папке C:\Windows\). Обратите внимание на щит UAC рядом со значком приложения. Этот значок означает, что для запуска этого приложения требуется повышение уровня UAC.
Когда вы запускаете regedit.exe
, вы увидите приглашение User Account Control, запрашивающее учетные данные администратора (Do you want to allow this app to make changes to your device?
). Если вы не введете пароль и не подтвердите ввод, приложение не запустится.
Попробуем обойти запрос UAC для этой программы. Создайте текстовый файл run-as-non-admin.bat содержащий следующий код на Рабочем столе:
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"
Чтобы заставить regedit.exe запускаться без привилегий администратора и подавить приглашение UAC, просто перетащите EXE-файл, который вы хотите запустить, на этот BAT-файл на рабочем столе.
Редактор реестра должен запускаться без приглашения UAC и без ввода пароля администратора. Если вы откроете диспетчер задач и добавите команду Elevated столбце, вы увидите, что существует процесс regedit.exe без повышенного статуса (запущен с правами неадминистратора).
Попробуйте отредактировать любой элемент в ветке реестра HKEY_LOCAL_MACHINE. Как видите, пользователь не может редактировать элемент в этом ключе реестра (у пользователя нет прав на запись для ключей системного реестра). Однако вы можете добавлять или редактировать ключи и параметры реестра в пользовательской ветви (HKEY_CURRENT_USER).
Таким же образом можно запустить любое приложение с помощью 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» из контекстного меню проводника файлов Windows.
RUNASINVOKER
режим для программы не позволит вам повысить права доступа. RunAsInvoker подавляет приглашение UAC и сообщает программе, что она должна запускаться с привилегиями текущего пользователя и не запрашивать повышения прав. Если программе действительно нужны повышенные привилегии для редактирования системных настроек или файлов, она не будет работать или снова запросит права администратора.Как обойти UAC с помощью опции RunAsInvoker в CMD?
Переменная окружения __COMPAT_LAYER позволяет устанавливать различные уровни совместимости для приложений (the Совместимость вкладка в свойствах EXE-файла). Эта переменная позволяет указать параметры совместимости, с которыми вы хотите запустить программу. Например, чтобы запустить приложение в режиме совместимости с Windows 8 с разрешением 640×480, задайте следующее:
set __COMPAT_LAYER=Win8RTM 640x480
Переменная __COMPAT_LAYER имеет несколько параметров, которые нас интересуют. Есть следующие параметры:
- RunAsInvoker — Запуск приложения с привилегиями родительского процесса без приглашения UAC;
- RunAsHighest — запуск программы с самыми высокими правами, доступными пользователю (приглашение UAC появится, если у пользователя есть права администратора);
- RunAsAdmin — запуск приложения от имени администратора (при этом всегда будет появляться приглашение 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.
Обратите внимание, что теперь с иконки программы исчез щит UAC, и вы можете запускать ее от имени текущего пользователя, не запрашивая пароль администратора.
В этом случае можно заставить программу использовать внешний файл манифеста. Создайте обычный текстовый файл 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, запущенная с помощью команды /SAVECRED опция, сохраняющая имя пользователя и пароль в диспетчере учетных данных Windows.
При следующем запуске ярлыка инструмент runas автоматически получит сохраненный пароль из Credentials Manager и использует его для запуска приложения под указанной учетной записью локального администратора (вам не придется запрашивать пароль каждый раз, когда вы открываете ярлык).
Следующая команда выводит список сохраненных паролей в Credential Manager:
RunDll32.exe keymgr.dll,KRShowKeyMgr
При запуске такого ярлыка в Windows 11 возникает ошибка:
RUNAS ERROR: Unable to run - C:\CorpApp\myapp.exe 740: The requested operation requires elevation.
Чтобы исправить это, измените команду в свойствах ярлыка. Замените ее на:
C:\Windows\System32\runas /profile /user:WKS-123\root /savecred "cmd.exe /C C:\CorpApp\myapp.exe"
Использование опции /savecred небезопасно, как мы уже говорили выше. Это связано с тем, что пользователь, сохранивший пароль администратора в своем профиле, может использовать его для запуска любой программы или команды с повышенными правами, или даже для сброса пароля учетной записи администратора. Пароли, хранящиеся в диспетчере учетных данных, также могут быть сброшены в виде открытого текста такими инструментами, как Mimikatz, поэтому лучше отключить использование сохраненных паролей.
Существует несколько сторонних инструментов, позволяющих обойти недостаток использования сохраненного пароля администратора в runas. Например, AdmiLink, RunAsRob, RunAsSpc. Эти приложения позволяют хранить зашифрованный пароль администратора и безопасно запускать программу с правами администратора. Эти инструменты не позволят пользователю запустить любое приложение или команду с сохраненными учетными данными, поскольку они проверяют путь и контрольную сумму исполняемого файла при его запуске.