Как убрать запрос на разрешение запуска программы в windows 7
15.06.2021
itpro
Windows 10, Windows 7, Windows Server 2016, Групповые политики
комментариев 17
В Windows при попытке открыть или запустить исполняемый файл типа exe, vbs, msi, bat, cmd (и других типов файлов) с локального диска или сетевой папки может появиться предупреждение “Открыть файл – предупреждение системы безопасности” (Open file — Security Warning). Для продолжения выполнения программы пользователь должен вручную подтвердить запуск такого файла, нажав кнопку “Запустить” (Run). Такое предупреждение безопасности Windows обычно появляется при открытии файла, скачанного из интернета, или запуске исполняемого файла из общей сетевой папки или подключенного сетевого диска.
Предупреждение системы безопасности Windows при запуске файлов
Такая поведение Windows предназначено для защиты вашего компьютера от запуска потенциально опасных исполняемых файлов, которые вы скачали из Интернета или получили других недоверенных источников, и пытаетесь запустить. Предупреждение системы безопасности при запуске появляется во всех версиях Windows (включая Windows 10, 8.1 и 7).
Если вы устанавливаете или запускаете программы на компьютерах пользователя в фоновом режиме (через скрипты планировщика, групповые политики, задания SCCM и т.д.), это может вызвать проблемы. Дело в том, что в таки случаях предупреждающее окно системы безопасности Windows просто не отображается в сессии пользователя. Соответственно, установка или запуск таких приложений из скриптов становится невозможен.
Например, при открытии файла из сетевого каталога окно предупреждения системы безопасности Windows выглядит так:
При запуске скачанного их Интернета файла с локального диска (или сетевого каталога, смонтированного через net use) текст предупреждения немного другой:
Если снять галку на опции “Всегда спрашивать при открытии этого файл”, то при следующем запуске этой программы окно безопасности Windows не появится. Но таким образом добавлять программы в исключения придется вручную.
Попробуем разобраться, как убрать предупреждение системы безопасности при запуске исполняемых или установочных файлов в Windows (инструкция применима для всех версий Windows, начиная с XP).
Важно. Отключение данного окна с предупреждением системы безопасности Windows в большинстве случаев не рекомендуется, так как уменьшает уровень защиты компьютера и повышает риск заражения системы пользователем.
Мы предлагаем несколько вариантов отключения окна предупреждения системы безопасности. Выберите подходящий способ в зависимости от требуемого решения (в некоторых случаях предложенные решения приходится комбинировать).
Отключение окна предупреждения при запуске файла, скачанного из Интернета
Исполняемые файлы, скачанные из Интернета, автоматически помечаются как потенциально опасные (загруженные из небезопасного источника). Реализуется этот функционал через альтернативные NTFS потоки файлов. Для упрощения, будем считать что это специальная метка файла, которая автоматически назначается скачанному из сети файлу (Как Windows определяет, что файл скачан из Интернета). Чтобы удалить эту метку, нужно разблокировать это приложение. Для этого:
- Откройте свойства исполняемого файла;
- На вкладке Общие (General) нажмите кнопку или установите чекбокс Разблокировать (Unblock). У полученного из интернета файла рядом с кнопкой будет указано такое предупреждение:
Сохраните изменения, нажав на кнопку Ok. Теперь файл разблокирован (NTFS метка снята) и будет запускаться без предупреждающего окна.
Трюк. Чтобы метка автоматически не назначалась файлам, которые вы загружаете из Интернета через браузер, можно сохранять скачанные файлы на диск отформатированный в файловой системе FAT32 или exFAT. На этих файловых системах альтернативные потоки NTFS не работают.
Unblock-File someinstallfile.exe
Или утилиты
streams.exe
- Для Google Chrome и IE нужно создать такой ключ реестра
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Attachments]
“SaveZoneInformation”=dword:00000001 - Для Mozilla Firefox на странице настроек about:config нужно изменить значение browser.download.saveZoneInformation на false.
В Windows можно полностью отключить сохранение информации о зонах в файлах, скачанных из интернета с помощью специально параметра групповых политик “Не хранить сведения о зоне происхождения вложений”/Do note preserve zone information in file attachments (User Configuration -> Administrative Templates -> Windows Components -> Attachment Manager).
Предупреждение безопасности при запуске приложений из сетевого каталога
Этот вариант, как правило, возникает у корпоративных пользователей, которые работают в сети организации при доступе к ресурсам в другом домена AD или по IP адресу (по-умолчанию родной домен считается доверенным). Окно предупреждения может появится при запуске программы из общего сетевого каталога (сетевой шары) через UNC путь. В этом случае проще всего в настройках обозревателя Internet Explorer добавить имя и/или ip адрес сервера, на котором хранится исполняемый файл в зону Местная интрасеть. Тем самым вы укажете, что данный ресурс является доверенным. Для этого:
Совет. Эти настройки хранятся в реестре в ветке HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap. Доверенные IP адреса указывается в ветке реестра Ranges ; доменные имена – в Domains .
Вы можете добавить адреса и имена удаленных доверенных доменов, хостов и IP адресов в зону Местная интрасеть с помощью групповых политик (GPO). Откройте редактор локальной (gpedit.msc) либо доменной (gpmc.msc) политики. Перейдите в раздел Computer Configuration -> Administrative Templates -> Windows Components -> Internet Explorer -> Internet Control Panel -> Security Page (Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Internet Explorer -> Панель управления браузером -> Вкладка безопасность). Включите политику Site to Zone Assignment List (Список назначений зоны безопасности для веб-сайтов). В настройках политики нужно указать список доверенных серверов в формате:
- Имя сервера (в виде file://server_name , \\server_name , server_name или IP )
- Номер зоны (1 – Для местной интрасети)
Если у вас появляется окно предупреждения при запуске программ с подключенного сетевого диска, добавьте букву диска (например, U:\) или UNC путь в зону местной интрасети.
Сохраните изменения в политике и обновите GPO на клиенте (gpupdate /force). Теперь при запуске их сетевых каталогов на хостах, добавленных в местную интрасеть, не будет появляться предупреждение при открытии исполняемых файлов.
Кроме того, в групповых политиках можно включить следующие настройки в разделе User Configuration -> Administrative Templates -> Windows Components -> Internet Explorer -> Internet Control Panel -> Security Page (Конфигурация пользователя -> Административные шаблоны -> Компоненты Windows -> Internet Explorer -> Панель управления браузером -> Вкладка безопасность). Это оптимальный вариант для пользователей домена:
- Сайты Интрасети: все сайты, не перечисленные в других зонах Intranet Sites: Include all local (intranet) sites not listed in other zones
- Сайты Интрасети: все сетевые пути (UNC) Intranet Sites: Include all network paths (UNCs)
- Включить автоматическое определение интрасети
Перенаправление папки AppData и предупреждение при открытии файлов
Если вы используйте перенаправление папки AppData (в roaming сценариях), пользователи могут столкнуться с окном “Открыть файл – предупреждение системы безопасности” при запуске ярлыков приложений из профиля.
В этом случае нужно добавить ваш сервер (или целиком домен), где хранятся перемещаемые профили в доверенную зону.
Воспользуйтесь параметром GPO: User Configuration -> Policies -> Administrative Templates -> Windows Components -> Internet Explorer -> Internet Control Panel -> Security Page -> Site to Zone Assignment List. Добавьте имя сервера (домена) со значением 1.
Отключение предупреждение для определенных типов файлов через GPO
В некоторых случаях целесообразно отключить появление предупреждения для определенных типов (расширений) файлов через групповые политики. Хотя, конечно, это не очень безопасно, т.к. пользователь не глядя может запустить что-то вредоносное.
Для этого в редакторе GPO перейдите в раздел User Configuration-> Administrative Templates-> Windows Components-> Attachment Manager (Конфигурация пользователя -> Административные шаблоны -> Компоненты Windows -> Диспетчер вложений).
- Включите политику Не хранить сведения о зоне происхождения вложений (Do not preserve zone information in file attachments). Все скачанные из интернета исполняемые файлы будут запускаться без подтверждения на всех компьютерах.
- Включите политику Список включений для типов файлов с низким риском (Inclusion list for low file types), укажите в ее настройках список расширений файлов, для которых нужно отключить появления окна с предупреждением системы безопасности Windows, например: .exe;.vbs;.msi. Система будет игнорировать метки на файлах с этим расширением, и запускать их без подтверждения.
Примечание. При этом данные расширения файлов добавляются в параметр реестра LowRiskFileTypes: [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Associations]"LowRiskFileTypes"=".exe;.vbs;.msi;.bat;"
Совет. Для владельцев, Windows 7 Home и Starter, у которых отсутствует редактор политики gpedit.msc, скачать его можно здесь, для Windows 10 Home – тут.
Сохраните политику и примените ее на клиентах, выполнив на них команду gpupdate /force.
Теперь при открытии исполняемых файлов с указанными расширениями не будет появляться окно безопасности (независимо от наличия NTFS атрибута Zone.Identifier).
Можно также в параметрах обозревателя для зоны Интернета (Безопасность -> Интернет -> Другой -> Разное -> Запуск программ и небезопасный файлов) разрешить запуск любых файлов из интернета, но это крайне рискованно.
Вы можете полностью отключить вывод окна «Open File — Security Warning» с предупреждением об открытии небезопасных файлов с помощью параметра Turn off the Security Settings Check feature в разделе реестра Computer Configuration -> Administrative Templates -> Windows Components -> Internet Explorer.
Или с помощью следующих команд:
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3" /V "1806" /T "REG_DWORD" /D "00000000" /F
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3" /V "1806" /T "REG_DWORD" /D "00000000" /F
REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Internet Explorer\Security" /V "DisableSecuritySettingsCheck" /T "REG_DWORD" /D "00000001" /F
18.03.2021
itpro
Windows 10, Windows Server 2016
комментария 52
Многие программы при запуске требуют повышения прав (значок щита у иконки), однако на самом деле для их нормальной работы права администратора не требуется (например, вы можете вручную предоставить необходимые права пользователям на каталог программы в ProgramFiles и ветки реестра, которые используются программой). Соответственно, если на компьютере включен контроль учетных записей, то при запуске такой программы из-под непривилегированного пользователя появится запрос UAC и Windows потребует от пользователя ввести пароль администратора. Чтобы обойти этот механизм многие просто отключают UAC или предоставляют пользователю права администратора на компьютере, добавляя его в группу локальных администраторов. Microsoft не рекомендует использовать такие методы, т.к. это снижает безопасность компьютера.
Зачем обычному приложению могут понадобится права администратора?
Права администратора могут потребоваться программе для модификации некоторых файлов (логи, файлы конфигурации и т.д.) в собственной папке в C:\Program Files (x86)\SomeApp). По умолчанию у пользователей нет прав на редактирование данного каталога, соответственно, для нормальной работы такой программы нужны права администратора. Чтобы решить эту проблему, нужно войти на компьютер под администратором и вручную предоставить пользователю (или встроенной группе Users) права на изменение/запись для этого каталога на уровне файловой системы NTFS.
Примечание. На самом деле практика хранения изменяющихся данных приложения в собственном каталоге в C:\Program Files неверна. Правильнее хранить данные приложения в профиле пользователя. Но это уже вопрос о лени и некомпетентности разработчиков программ.
Запуск программы, требующей права администратора, от обычного пользователя
Ранее мы уже описывали, как можно с помощью параметра RunAsInvoker отключить запрос UAC для конкретной программы. Однако этот метод недостаточно гибкий.
Также можно воспользоваться RunAs с сохранением пароля админа /SAVECRED в диспетчере паролей Windows (Credentials Manager). Это также небезопасно, т.к. пользователь может использовать сохранённый пароль учетной записи администратора для запуска других программ.
Рассмотрим более простой способ принудительного запуска любой программы без прав администратора (и без ввода пароля админа) при включенном UAC (4,3 или 2 уровень ползунка UAC).
Для примера возьмем утилиту редактирования реестра — regedit.exe (она находится в каталоге C:\windows\). Обратите внимание на щит UAC у иконки. Данный значок означает, что для запуска этой программы будет запрошено повышение привилегий через UAC.
Если запустить regedit.exe , то перед вами появится окно User Account Contol с запросом пароля пользователя с правами администратора на этом компьютере ( 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"
Теперь для принудительного запуска приложения без прав администратора и подавлением запроса UAC, просто перетащите нужный exe файл на этот bat файл на рабочем столе.
После этого редактор реестра должен запуститься без появления запроса UAC и без ввода пароля администратора. Откройте диспетчер процессов, добавьте столбец Elevated и убедитесь, что в Windows 10 запустился непривилегированный процесс regedit (запущен с правами пользователя).
Попробуйте отредактировать любой параметр в ветке HKEY_LOCAL_MACHINE. Как вы видите доступ на редактирование реестра в этой ветке запрещен (у данного пользователя нет прав на запись в системные ветки реестра). Но вы можете добавлять и редактировать ключи в собственной ветке реестра пользователя — HKEY_CURRENT_USER.
Аналогичным образом через bat файл можно запускать и конкретное приложение, достаточно указать путь к исполняемому файлу.
run-app-as-non-admin.bat
Set ApplicationPath="C:\Program Files\MyApp\testapp.exe"
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %ApplicationPath%"
Также можно добавить контекстное меню, которое добавляет у всех приложений возможность запуска без повышения прав. Для этого создайте файл runasuser.reg файл, скопируйте в него следующий код, сохраните и импортируйте его в реестр двойным щелчком по reg файлу (понадобятся права администратора).
Можно распространить этот пункт меню на компьютеры в домене через импорт ветки реестра с помощью групповых политики.
После этого для запуска любого приложения без прав админа достаточно выбрать пункт “Run as user without UAC elevation” в контекстном меню проводника Windows File Explorer.
Еще раз напомню, что использование программы в режиме RUNASINVOKER не позволит вам получить повышенные права для программы. Параметр AsInvoker подавляет сообщает UAC и сообщает программе, что она должна запуститься с правами текущего пользователя и не запрашивать повышение привилегий. Если программе действительно нужны повышенные права для редактирования системных параметров или файлов, она не будет работать или повторно запросит права администратора.
RunAsInvoker в переменной окружения __COMPAT_LAYER
Переменная окружения __COMPAT_LAYER позволяет устанавливать различные уровни совместимости для приложений (вкладка Совместимость в свойствах exe файла). С помощью этой переменной можно указать настройки совместимости, с которыми нужно запускать программу. Например, для запуска приложения в режиме совместимости с Windows 7 и разрешением 640×480, установите:
set __COMPAT_LAYER=Win7RTM 640x480
Из интересных нам опций переменной __COMPAT_LAYER можно выделить следующие параметры:
- RunAsInvoker — запуск приложения с привилегиями родительского процесса без запроса UAC;
- RunAsHighest — запуск приложения с максимальными правами, доступными пользователю (запрос UAC появляется если у пользователя есть права администратора);
- RunAsAdmin — запуск приложение с правами администратора (запрос AUC появляется всегда).
Следующий код включает режим RUNASINVOKER для текущего процесса и запускает указанную программу:
start "" "C:\Program Files\MyApp\testapp.exe"
Включаем режим RunAsInvoker через манифест exe файла программы
Как мы уже говорили выше, Windows 10 показывает значок щита UAC у программ, которые для запуска требуют повышение привилегий. Это требование разработчики задают при разработке в специальной секции программы — манифесте.
Вы можете отредактировать манифест exe файла программы и отключить требование запускать программу в привилегированном режиме.
Для редактирования манифеста программы можно использовать бесплатную утилиту Resource Hacker. Откройте исполняемый файл программы в Resource Hacker.
В дереве слева перейдите в раздел Manifest и откройте манифест программы.
Обратите внимание на строки:
Именно благодаря опции requireAdministrator Windows всегда запускает эту программу с правами администратора.
Измените requireAdministrator на asInvoker и сохраните изменения в exe файле.
Обратите внимание, что теперь у иконки программы пропал щит UAC и вы можете запустить ее без запроса прав администратора с привилегиями текущего пользователя.
Если исполняемый файл программы подписан подписью MS Authenticode (сертификатом Code Signing), то после модификации exe файла он может перестать запускаться или выдавать предупреждение.
В этом случае можно заставить программу использовать внешний файл манифеста. Создайте в каталоге с ехе файлом текстовый файл app.exe.manifest (например Autologon.exe.manifest) и скопируйте в него код манифеста из Resource Hacker. Измените requireAdministrator на asInvoker. Сохраните файл.
Чтобы Windows при запуске приложений всегда пробовала использовать внешний файл манифеста, включите специальный параметр реестра:
REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide" /v PreferExternalManifest /t REG_DWORD /d 1 /f
Перезагрузите Windows и убедитесь, что программа использует внешний файл манифеста, в котором указано, что нужно запускаться без прав администратора.
30.11.2020
itpro
Windows 10, Windows 7, Windows 8
комментария 32
В этой статье мы покажем, как выборочно отключить UAC для определенного приложения, не отключая полностью эту службу User Account Control. Рассмотрим несколько способов отключения контроля учетных записей для приложениия с помощью флага совместимости RunAsInvoker.
Система контроля учетных записей (User Account Control или UAC) запрашивает у пользователя подтверждение на выполнение любого действия, требующего прав администратора. Это довольно эффективный механизм защиты Windows от различных угроз (вирусы, трояны, черви, руткиты и т.п). Некоторый пользователей раздражает окно UAC и они полностью отключают контроль учетных записей, хотя Microsoft и специалисты в области ИБ категорически не рекомендуют делать это.
Флаг RunAsInvoker позволяет запустить приложение с маркером, унаследованным от родительского процесса. При этом отменяется обработка манифеста приложения, и обнаружение процессов установщика. Данный параметр не предоставляет права администратора, а только блокирует появление окна UAC.
Если программа требует прав администратора для запуска, т.к. меняет настройки системы или системные файлы, то при отключении UAC для нее привилегии пользователя в приложении не повышаются. Программа все равно будет запускаться с правами текущего пользователя и, если у нет полномочий на эти изменения, программа не сможет их внести. Также есть небольшое количество приложений, которые запускаются только в режиме “As administrator”, игнорирующие флаг совместимости RunAsInvoker.
В качестве примера мы отключим появление запроса User Account Control для редактора реестра (regedit.exe). Несмотря на то, что у моей учетной записи есть права администратора, при запуске утилиты все равно появляется запрос UAC на подтверждение запуска.
Отключение UAC для программы с помощью Application Compatibility Toolkit
Запустите скачанный файл adksetup.exe и при установке (программе нужен доступ в Интернет) выберите только Application Compatibility Toolkit.
Примечание. Пакет Microsoft Application Compatibility Toolkit – бесплатный набор утилит, предназначенный для устранения проблем совместимости приложений при переходе на новые версии Windows.
В системе появится две версии Application Compatibility Administrator — 32-х и 64-х битная версия. Запустите версию Application Compatibility Administrator в зависимости от разрядности приложения, для которого вы хотите подавить запрос UAC.
Запустите утилиту Compatibility Administrator (32-bit) с правами администратора (!). В разделе Custom Databases, щелкните ПКМ по элементу New Database и выберите пункт Create New-> Application Fix.
В открывшемся окне нужно указать имя приложения (regedit), производителя (Microsoft) и путь к исполняемому файлу ( C:\Windows\regedit.exe ).
Пропустите следующее окно мастера настройки (Compatibility Mode), нажав Next. В окне Compatibility Fixes отметьте опцию RunAsInvoker.
При желании можно убедиться, что приложение может работать без UAC, нажав на кнопку тестового запуска (Test Run).
В окне Matching Information вы можете указать какие параметры приложения нужно проверять (версию, чексумму, размер и т.д.). Я оставил включенными проверки COMPANY_NAME,PRODUCT_NAME и ORIGINAL_FILENAME, чтобы не пересоздавать файл исправления после очередного обновления Windows 10 и обновлении версии файла regedit.
Совет. Для защиты от подмены исполняемого файла злоумышленником желательно использовать проверку по checksum, file_version и size. Отметим, что дополнительные проверки будут несколько замедлять запуск приложения.
Нажмите Finish и укажите имя файла, в который нужно сохранить созданный пакет исправления совместимости, например regedit.sdb. В этом файле будут содержаться инструкции по запуску приложения с заданными опциями совместимости.
Осталось применить пакет с исправлением совместимости к вашему приложению. Сделать это можно непосредственно из консоли Compatibility Administrator (выбрав в меню пункт Install), либо из командной строки.
sdbinst -q c:\ps\regedit.sdb
После установки пакета, соответствующая запись появится в списке установленных программ Windows (Programs and Features).
Попробуйте теперь запустить приложение в сессии пользователя без прав локального администратора. Теперь оно должно запуститься без появления запроса UAC.
Теперь проверьте, с какими привилегиями запущено данное приложение. Для этого в Task Manager на вкладке процессов добавьте столбец “Elevated”. Убедитесь, что процесс regedit.exe запущен от пользователя в непривилегированном режиме ( Elevated=No ).
В таком процесс редактора реестра пользователь может редактировать только собственные ветки реестра, но при попытке отредактировать/создать что-то в системной HKLM, появляется ошибка “You don’t have the requisite permissions”.
В дальнейшем это исправление совместимости можно распространить на компьютеры пользователей с помощью групповых политик. Тем самым можно добиться отключения проверки системы контроля учетных записей (UAC) для определенных приложений на множестве компьютеров в домене Active Directory.
Чтобы удалить исправление совместимости, выполните команду
sdbinst –u c:\ps\regedit.sdb
Включить флаг RUNASINVOKER для программы через реестр
В Windows 10/8.1/7 вы можете включить флаг совместимости RUNASINVOKER через реестр. Флаг совместимости приложения можно выставить для одного пользователя или для всех пользователей компьютера:
Например, для regedit нужно в ветке реестра HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers создать новый строковый параметр (REG_SZ) вида:
- Value name: C:\windows\regedit.exe
- Value data: RunAsInvoker
Если нужно включить режим совместимости приложения для всех пользователей компьютера, этот параметр нужно создать в ветке реестра: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers.
Bat файл для запуска приложения в режиме RunAsInvoker
Есть еще вариант для запуск приложения без прав администратора и подавлением запроса UAC (см. статью).
Просто создайте bat файл со следующим кодом:
Set ApplicationPath="C:\windows\regedit.exe"
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %ApplicationPath%"
При запуске этого bat файла под пользователем, указанное приложение запустится без появления запроса UAC.
Итак, мы рассмотрели, как отключить UAC для конкретной программы без полного отключения контроля учетных записей. Это позволит вам запускать программы Windows под обычным пользователем без появления запроса UAC и без пароля администратора.
К сожалению, в работе сисадмина нет-нет да и приходится разрешать пользователям запускать всякий софт с админскими правами. Чаще всего это какие-нибудь странные китайские программы для работы с оборудованием. Но бывают и другие ситуации вроде небезызвестного bnk.exe.
Выдавать пользователю права администратора, чтобы решить проблему быстро и просто, противоречит нормам инфобезопасности. Можно, конечно, дать ему отдельный компьютер и поместить в изолированную сеть, но — это дорого и вообще…
Попробуем разобрать решения, которые позволят и программу запустить, и безопасника с финансистом не обозлить.
Программа может запрашивать права администратора условно в двух случаях:
- Когда хочет получить доступ туда, куда «простым смертным» нельзя: например, создавать файлы в системных каталогах.
- Когда программу скомпилировали со специальным флагом «Требовать права администратора».
С первым случаем все понятно: берем в руки замечательную программу Марка Руссиновича Process Monitor, смотрим, что происходит, и куда программа пытается залезть:
Куда это лезет этот 7Zip?
И по результатам исследования выдаем права пользователю на нужный каталог или ветку реестра.
Сложнее, если случай клинический, и так просто выдать права не получится: например, программа требует сильного вмешательства в работу системы вроде установки драйверов. Тогда придется придумывать всякий колхоз, про который речь пойдет в последнем разделе статьи. Пока подробнее освещу второй случай — когда стоит флажок.
Если сильно упростить, то в специальном манифесте программы (к слову, установщики — это тоже программы) могут быть три варианта запуска:
- asInvoker. Программа запускается с теми же правами, что и породивший ее процесс (как правило, это explorer.exe c правами пользователя);
- highestAvailable. Программа попросит максимально доступные пользователю права (у администратора появится окно с запросом повышения UAC, у пользователя — нет);
- requireAdministrator. Программа будет требовать права администратора в любом случае.
Если разработчик твердо решил требовать права администратора, даже если они не нужны, то обойти это можно малой кровью.
В системе Windows, начиная с Vista, появилась служба UAC, которая помимо прочего отвечает за запросы программ на повышение прав. Не все программы «переваривали» работу с этой службой. Поэтому в системе был доработан механизм совместимости приложений, позволяющий прямо задать программе ее поведение — запрашивать права или нет.
Простейшим вариантом работы с этим механизмом будет использование переменных среды.
Рассмотрим пример с редактором реестра. Действительно, запуская regedit.exe под администратором, мы получаем запрос на повышение прав:
Запрос повышение прав.
Если же мы запустим редактор реестра из консоли, предварительно поменяв значение переменной среды __COMPAT_LAYER на:
То запроса UAC не будет, как и административных прав у приложения:
Бесправный редактор реестра.
Этим можно пользоваться, запуская программы батниками или добавляя контекстное меню через реестр. Подробнее читайте в материале How to Run Program without Admin Privileges and to Bypass UAC Prompt?
Поскольку ярлычками тут обойтись не выйдет, ведь 1С сама скачивает файл и запускает его, то придется применять тяжелую артиллерию — Microsoft Application Compatibility Toolkit.
Документация к ПО, как обычно, доступна на официальном сайте, загрузить можно как часть Windows Assessment and Deployment Kit. Сам процесс решения проблемы несложен.
Необходимо поставить утилиту, запустить Compatibility Administrator и создать Application Fix в новой или имеющейся базе данных:
Создаем исправление приложения.
Имя и издатель значения не имеют. Имеет значение только расположение файла — тут нужно указать реальный проблемный bnk.exe (где он будет лежать на самом деле — не важно).
Далее необходимо в списке исправлений выбрать RunAsInvoker.
Выбираем нужный фикс.
Все остальное оставляем по умолчанию, сохраняем базу данных. Должно получиться примерно так:
Созданный фикс для bnk.exe.
После этого достаточно будет установить базу данных, щелкнув по ней правой кнопкой и выбрав Install. Теперь пользователи смогут сами грузить классификаторы банков.
Все становится хуже, если приложению действительно нужны права админа. Тогда добавление прав на системные объекты и исправления не помогают.
Казалось бы, самым очевидным решением для запуска нашего странного ПО выглядит использование встроенной утилиты Runas. Документация доступна на сайте Microsoft.
Ну, посмотрим, что из этого выйдет.
Действительно, RunAs запустит 7zip с правами учетной записи «Администратор», спросит пароль и запомнит его. Потом ярлык с такой строкой запуска будет запускать 7zip под Администратором без вопросов.
)
Есть один существенный недостаток: пароль запоминается на уровне системы, и теперь, используя команду Runas, можно будет запускать абсолютно любую программу. Это мало чем отличается от прямого предоставления админских прав сотрудникам, так что использовать это решение не стоит.
Зато runas может быть полезен, когда сотрудник знает пароль администратора, но работает под ограниченной учетной записью (по идее так должен делать каждый системный администратор).
Если мы начали с консольных команд, то перейдем к более высокоуровневым скриптам. Интересное решение было предложено в статье «Планктонная Windows», где упомянутый выше Runas обвязывался js-скриптом и пропускался через обфускатор. У решения есть и очевидный минус — скрипт можно раскодировать.
Чуть более интересным методом в 2к20 являются возможности PowerShell и его работа с паролями. Подробнее можно почитать в материале «Защита и шифрование паролей в скриптах PowerShell».
Если вкратце: в PS работа с паролями производится через специальный тип данных SecureString и объект PSCredential. Например, можно ввести пароль интерактивно:
Затем сохранить пароль в зашифрованном виде в файл:
И теперь использовать этот файл для неинтерактивной работы:
К сожалению, файл этот можно использовать только на том ПК, на котором его создали. Чтобы этого избежать, можно сделать отдельный ключ шифрования. Например так:
Теперь при помощи этого ключа пароль можно зашифровать:
К сожалению, с безопасностью дела обстоят так же печально: утащить пароль не составляет трудностей, если есть доступ к файлу с ключом шифрования и зашифрованным паролем. Да, можно добавить обфускации и скомпилировать скрипт в .exe вместе с нужными файлами. Но нужно понимать, что это — полумеры.
В свое время я использовал для решения подобных задач свой любимый AutoIt, где компилировал скрипт с командой RunAs и радовался… До тех пор, пока не узнал, что AutoIt (особенно старых версий) декомпилируется на раз-два.
Другим интересным вариантом может быть применение назначенных заданий — если создать назначенное задание от админского аккаунта, пользователю для работы будет достаточно его запуска. К сожалению, для интерактивной работы с приложением это решение не подходит.
На свете существует несколько сторонних решений, призванных решить задачу. Остановлюсь на парочке из них.
Пожалуй, одна из самых известных утилит — это AdmiLink, разработанная Алексеем Курякиным для нужд ядерной физики. Программа и принципы ее работы описаны на официальном сайте. Я, как обычно, позволю себе более краткое описание.
Программа состоит из трех модулей. AdmiLink — это графическое окно, где можно создать ярлык на нужное приложение (в принципе, в ряде случаев достаточно только его).
Основное окно программы.
Помимо непосредственно создания ярлыка (и да, запрос UAC тоже можно подавлять), есть и дополнительные функции вроде калькулятора, терминала и удобных настроек политик безопасности. Со всеми возможностями программы читателю предлагается разобраться самостоятельно.
Второй модуль называется AdmiRun и представляет из себя консольную утилиту. Она умеет запускать приложения от имени администратора, получив в качестве одного из параметров строку, созданную через AdmiLink. В строке шифруется имя пользователя и пароль, при этом участвует и путь к программе.
На первый взгляд все выглядит безопасно, но, к сожалению, код программ закрыт, и насколько можно доверять разработчику — вопрос.
Третий модуль — AdmiLaunch — отвечает за запуск окон в разных режимах, и он используется для запуска AdmiRun, если создавать ярлык через AdmiLink.
В целом, решение проверено годами и поколениями отечественных системных администраторов. Но добавлю и альтернативу из-за рубежа.
RunAsRob — довольно интересное ПО за авторством немецкого разработчика Оливера Хессинга (Oliver Hessing). В отличие от AdmiLink, ПО устанавливается как служба, запускаемая под привилегированной учетной записью (администратора или системы). Как следствие, подготовленный ярлык обращается к службе, которая уже в свою очередь запускает заданное ПО.
Особенность программы в том, что есть возможность авторизовать не только программы, но и папки (включая сетевые). А хранение настроек в реестре позволило добавить шаблоны групповых политик, примерно как мы писали в статье «Погружение в шаблоны и приручение GPO Windows». Благодаря этому при необходимости настройки можно применять прямо из Active Directory.
Основное окно программы.
Программа богато документирована на официальном сайте.
У этого автора есть еще и программа RunAsSpc, позволяющая запускать исполняемые файлы под правами другого пользователя, передавая учетные данные через зашифрованный файл.
Мне остается только добавить, что это ПО бесплатно только для личного использования.
Но учтите, что из программы, запущенной под административными правами, можно натворить бед. Например, запустить привилегированную командную консоль через диалог Файл — Открыть.
Запускаем cmd.exe прямо из редактора реестра.
Немного защититься помогут политики запрета контекстного меню и прочих диспетчеров задач, часть из которых может настроить AdmiLink. Но в любом случае следует быть осторожным.
А вам приходилось городить странные костыли? Предлагаю делиться историями в комментариях.
Хочу чтобы при запуске системы автоматически открывался gpu-z, но винда постоянно терроризирует контролем учетных записей, приходится нажимать "да" в том самом окне. Как именно для gpu-z отключить это всплывающее окошко? Windows 10 не подвластна хакам от висты и семерки, хочется сделать это из свойств программы, но включение полного доступа во вкладке "Безопасность" (свойства файла) ничего не дает, все равно каждый раз приходится нажимать "да".
- Вопрос задан более двух лет назад
- 4944 просмотра
Автозапуск приложений с правами, отличными от текущего пользователя, традиционно делают с помощью task scheduller (планировщик заданий). Создаете новое задание, в тригере условиях запуска выбираете 'при входе в систему' или 'при запуске' (второе это если вам нужно приложение до окна авторизации) а на закладки общие включите - запускать с наивысшими правами.
Майкрософт например так всю телеметрию запускает.
Чудесно, спасибо) А реально сделать, чтобы окно еще сворачивалось при запуске? А то все равно приходится в ручную это делать.
хм, ситуация кажется сложная, запущенное приложение от администратора уже не имеет таких прав, поэтому снова запрашивает так? или вы забыли чекбоксик запускать с наивысшими правами отметить?
rPman, это я виноват( мистика какая-то. Мой порядок действий:
1 Получил от вас ответ, сделал все по мануалу: создал задачу, поставил галочку, выбрал файл, перезапустил - работает. НО! Все программы в трее, а эта по середине стола.
2 прописал start.exe и так далее. Перезапускаю.
3 Гпу-з открывается и просит права администратора, но в трей не сворачивается сам.
4 я выключаю задачу. Перезагружаю. А он все равно загружается и просит права.
5 удаляю задачу, перезагружаю, опять сам запускается!
6 его нет ни в автозапуске, ни в задаче, галка снята в самом приложении тоже изначально, запускаю autoruns, листаю, а там только драйвер .sys, а .exe нету.
И он все равно теперь запускается сам и просит права. Это случилось именно после прописания start.exe и тд. Его можно как-то удалить из старта? Мистика полная. Что-то где-то сохранилось и теперь он сам по себе запускается(
Autoruns от sysinternails не умеет задачи из планировщика, ищите в нем самом, там задачи по папкам раскиданы, смотрите где создали
Читайте также: