запуск cms без прав администратора
Запуск программы без прав администратора и подавлением запроса UAC
Многие программы при запуске требуют повышения прав (значок щита у иконки), однако на самом деле для их нормальной работы права администратора не требуется (например, вы можете вручную предоставить необходимые права пользователям на каталог программы в ProgramFiles и ветки реестра, которые используются программой). Соответственно, если на компьютере включен контроль учетных записей, то при запуске такой программы из-под непривилегированного пользователя появится запрос UAC и Windows потребует от пользователя ввести пароль администратора. Чтобы обойти этот механизм многие просто отключают UAC или предоставляют пользователю права администратора на компьютере, добавляя его в группу локальных администраторов. Microsoft не рекомендует использовать такие методы, т.к. это снижает безопасность компьютера.
Зачем обычному приложению могут понадобится права администратора?
Права администратора могут потребоваться программе для модификации некоторых файлов (логи, файлы конфигурации и т.д.) в собственной папке в C:\Program Files (x86)\SomeApp). По умолчанию у пользователей нет прав на редактирование данного каталога, соответственно, для нормальной работы такой программы нужны права администратора. Чтобы решить эту проблему, нужно войти на компьютер под администратором и вручную предоставить пользователю (или встроенной группе Users) права на изменение/запись для этого каталога на уровне файловой системы NTFS.
Запуск программы, требующей права администратора, от обычного пользователя
Ранее мы уже описывали, как можно с помощью параметра RunAsInvoker отключить запрос UAC для конкретной программы. Однако этот метод недостаточно гибкий.
Также можно воспользоваться RunAs с сохранением пароля админа /SAVECRED в диспетчере паролей Windows (Credentials Manager). Это также небезопасно, т.к. пользователь может использовать сохранённый пароль учетной записи администратора для запуска других программ.
Рассмотрим более простой способ принудительного запуска любой программы без прав администратора (и без ввода пароля админа) при включенном UAC (4,3 или 2 уровень ползунка UAC).
Для примера возьмем утилиту редактирования реестра — regedit.exe (она находится в каталоге C:\windows\). Обратите внимание на щит UAC у иконки. Данный значок означает, что для запуска этой программы будет запрошено повышение привилегий через UAC.
Попробуем обойти запрос 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 в переменной окружения __COMPAT_LAYER
Переменная окружения __COMPAT_LAYER позволяет устанавливать различные уровни совместимости для приложений (вкладка Совместимость в свойствах exe файла). С помощью этой переменной можно указать настройки совместимости, с которыми нужно запускать программу. Например, для запуска приложения в режиме совместимости с Windows 7 и разрешением 640×480, установите:
set __COMPAT_LAYER=Win7RTM 640×480
Из интересных нам опций переменной __COMPAT_LAYER можно выделить следующие параметры:
Следующий код включает режим 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 и вы можете запустить ее без запроса прав администратора с привилегиями текущего пользователя.
В этом случае можно заставить программу использовать внешний файл манифеста. Создайте в каталоге с ехе файлом текстовый файл 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 и убедитесь, что программа использует внешний файл манифеста, в котором указано, что нужно запускаться без прав администратора.
[Конспект админа] Что делать, если программа хочет прав администратора, а вы нет
К сожалению, в работе сисадмина нет-нет да и приходится разрешать пользователям запускать всякий софт с админскими правами. Чаще всего это какие-нибудь странные китайские программы для работы с оборудованием. Но бывают и другие ситуации вроде небезызвестного bnk.exe.
Выдавать пользователю права администратора, чтобы решить проблему быстро и просто, противоречит нормам инфобезопасности. Можно, конечно, дать ему отдельный компьютер и поместить в изолированную сеть, но — это дорого и вообще…
Попробуем разобрать решения, которые позволят и программу запустить, и безопасника с финансистом не обозлить.
Ну, и зачем тебе права?
Программа может запрашивать права администратора условно в двух случаях:
С первым случаем все понятно: берем в руки замечательную программу Марка Руссиновича Process Monitor, смотрим, что происходит, и куда программа пытается залезть:
Куда это лезет этот 7Zip?
И по результатам исследования выдаем права пользователю на нужный каталог или ветку реестра.
Сложнее, если случай клинический, и так просто выдать права не получится: например, программа требует сильного вмешательства в работу системы вроде установки драйверов. Тогда придется придумывать всякий колхоз, про который речь пойдет в последнем разделе статьи. Пока подробнее освещу второй случай — когда стоит флажок.
Если сильно упростить, то в специальном манифесте программы (к слову, установщики — это тоже программы) могут быть три варианта запуска:
Если разработчик твердо решил требовать права администратора, даже если они не нужны, то обойти это можно малой кровью.
Нет, не будет тебе прав
В системе Windows, начиная с Vista, появилась служба UAC, которая помимо прочего отвечает за запросы программ на повышение прав. Не все программы «переваривали» работу с этой службой. Поэтому в системе был доработан механизм совместимости приложений, позволяющий прямо задать программе ее поведение — запрашивать права или нет.
Простейшим вариантом работы с этим механизмом будет использование переменных среды.
Рассмотрим пример с редактором реестра. Действительно, запуская regedit.exe под администратором, мы получаем запрос на повышение прав:
Запрос повышение прав.
Если же мы запустим редактор реестра из консоли, предварительно поменяв значение переменной среды __COMPAT_LAYER на:
То запроса UAC не будет, как и административных прав у приложения:
Бесправный редактор реестра.
Этим можно пользоваться, запуская программы батниками или добавляя контекстное меню через реестр. Подробнее читайте в материале How to Run Program without Admin Privileges and to Bypass UAC Prompt?
С конкретным примером такой неприятной программы можно столкнуться при загрузке классификаторов банков из 1С с сайта РБК по ссылке http://cbrates.rbc.ru/bnk/bnk.exe. Если обновление классификаторов отдается на откуп самим пользователям и нет возможности поменять загрузку на bnk.zip (а современные 1С это поддерживают), то приходится придумывать костыли. Ведь bnk.exe — самораспаковывающийся архив, в котором зачем-то прописано «Требовать права администратора».
Поскольку ярлычками тут обойтись не выйдет, ведь 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. Например, можно ввести пароль интерактивно:
Затем сохранить пароль в зашифрованном виде в файл:
И теперь использовать этот файл для неинтерактивной работы:
К сожалению, файл этот можно использовать только на том ПК, на котором его создали. Чтобы этого избежать, можно сделать отдельный ключ шифрования. Например так:
Теперь при помощи этого ключа пароль можно зашифровать:
В свое время я использовал для решения подобных задач свой любимый AutoIt, где компилировал скрипт с командой RunAs и радовался… До тех пор, пока не узнал, что AutoIt (особенно старых версий) декомпилируется на раз-два.
Другим интересным вариантом может быть применение назначенных заданий — если создать назначенное задание от админского аккаунта, пользователю для работы будет достаточно его запуска. К сожалению, для интерактивной работы с приложением это решение не подходит.
На свете существует несколько сторонних решений, призванных решить задачу. Остановлюсь на парочке из них.
Пожалуй, одна из самых известных утилит — это AdmiLink, разработанная Алексеем Курякиным для нужд ядерной физики. Программа и принципы ее работы описаны на официальном сайте. Я, как обычно, позволю себе более краткое описание.
Программа состоит из трех модулей. AdmiLink — это графическое окно, где можно создать ярлык на нужное приложение (в принципе, в ряде случаев достаточно только его).
Основное окно программы.
Помимо непосредственно создания ярлыка (и да, запрос UAC тоже можно подавлять), есть и дополнительные функции вроде калькулятора, терминала и удобных настроек политик безопасности. Со всеми возможностями программы читателю предлагается разобраться самостоятельно.
Второй модуль называется AdmiRun и представляет из себя консольную утилиту. Она умеет запускать приложения от имени администратора, получив в качестве одного из параметров строку, созданную через AdmiLink. В строке шифруется имя пользователя и пароль, при этом участвует и путь к программе.
На первый взгляд все выглядит безопасно, но, к сожалению, код программ закрыт, и насколько можно доверять разработчику — вопрос.
Третий модуль — AdmiLaunch — отвечает за запуск окон в разных режимах, и он используется для запуска AdmiRun, если создавать ярлык через AdmiLink.
В целом, решение проверено годами и поколениями отечественных системных администраторов. Но добавлю и альтернативу из-за рубежа.
RunAsRob — довольно интересное ПО за авторством немецкого разработчика Оливера Хессинга (Oliver Hessing). В отличие от AdmiLink, ПО устанавливается как служба, запускаемая под привилегированной учетной записью (администратора или системы). Как следствие, подготовленный ярлык обращается к службе, которая уже в свою очередь запускает заданное ПО.
Особенность программы в том, что есть возможность авторизовать не только программы, но и папки (включая сетевые). А хранение настроек в реестре позволило добавить шаблоны групповых политик, примерно как мы писали в статье «Погружение в шаблоны и приручение GPO Windows». Благодаря этому при необходимости настройки можно применять прямо из Active Directory.
Основное окно программы.
Программа богато документирована на официальном сайте.
У этого автора есть еще и программа RunAsSpc, позволяющая запускать исполняемые файлы под правами другого пользователя, передавая учетные данные через зашифрованный файл.
Мне остается только добавить, что это ПО бесплатно только для личного использования.
Но учтите, что из программы, запущенной под административными правами, можно натворить бед. Например, запустить привилегированную командную консоль через диалог Файл — Открыть.
Запускаем cmd.exe прямо из редактора реестра.
Немного защититься помогут политики запрета контекстного меню и прочих диспетчеров задач, часть из которых может настроить AdmiLink. Но в любом случае следует быть осторожным.
А вам приходилось городить странные костыли? Предлагаю делиться историями в комментариях.
Запуск cms без прав администратора
Комп ОС — Win81
Использовал CMS 12.09.2014 г., программа вылетала с ошибкой «Fatal Error».
Установил новую версию CMS 11.05.2015 г.
Теперь другая проблема: запуск CMS из учётной записи с ограниченными правами требует прав администратора.
Вопрос: как запустить CMS в учётной записи с ограниченными правами?
З.Ы. Что делал:
1. установил права «Полный доступ» на папку с CMS для пользователя с ограниченными правами.
2. пробовал запускать программу CMS в режиме совместимости.
Не помогло.
infomodx Редактировать Ответить Добрый день!
Для пользователя с ограниченными правами необходимо создать кучу правил в политике безопасности, фактически давать полный доступ.
Можно попробовать установить ПО в папку с общими документами пользователя.
pawell06 Ответить
Цитата |
---|
Support пишет: В Win 8, активируйте запись Администратора, она по умолчанию выключена, так же как и на 7ке по умолчанию вы работаете под учеткой пользователя с расширенными админскими правами, этого не достаточно для работы многих программ, которые лезут на системный диск активируйте учетку и аминь! Для тех у кого стоит 8ка домашняя и иже с ним, таких проблем не испытывают, так как локальная политика безопасности другая. |
pawell06 Ответить Добрый день!
Есть альтернативное решение: Macroscop, Линия, видеосервера Domination, но обычно после того как пользователь узнаёт его цену, то БЕСПЛАТНОЕ ПО CMS становится великолепным .
P.S.: на замену CMS скоро выйдет новое ПО, в котором будут учитываться все недостатки.
Вы должны авторизоваться, чтобы оставлять комментарии.
Запуск программ в Windows без прав администратора при помощи RunWithRestrictedRights
Задавались ли вы вопросом, безопасно ли запускать очередное скачанное приложение?
Задавались ли вы вопросом, безопасно ли запускать очередное скачанное приложение? В этой статье мы рассмотрим этот вопрос. Одно из наилучших решений – запуск программы в песочнице (например, в Sandboxie) или на виртуальной машине, поскольку в этом случае права доступа у приложения будут серьезно ограничены.
Мне всегда было интересно, почему приложениям нужны расширенные права. Например, в случае утилит для усиления безопасности системы или управления функциями в Windows, такой запрос правомерен, но в других ситуациях всё не так очевидно. Программы, после запуска которых появляются всплывающие окна от UAC (User Account Control; Контроль учётных записей пользователей), могут не запуститься вовсе, если вы не разрешите.
Рисунок 1: Описание и параметры приложения RunWithRestrictedRights
С другой стороны, было бы неплохо использовать эту возможность в принудительном режиме. И здесь нам на помощь приходит RunWithRestrictedRights. Эта утилита, управляемая из командной строки, использует Windows Integrity Mechanism для ограничения прав приложений, чтобы не нанести вред системе (лучше, чем PSExec).
Когда я впервые запустил RunWithRestrictedRights, возникла ошибка «a required privilege is not held by the client» (у клиента нет необходимых привилегий). Для решения этой проблемы у учетной записи должны быть следующие права, используемые RunWithRestrictedRights при управлении другими приложениями:
Настройка квот памяти для процесса (Adjust memory quotas for a process).
Замена маркера уровня процесса (Replace a process level token).
Более подробно об этих правах можно узнать в официальной документации. Права добавляются в разделе Control Panel (Панель управления) > Administrative Tools (Администрирование) > Local Security Policy (Локальная политика безопасности) > User Rights Assignment (Назначение прав пользователя). Следует убедиться, что в вышеуказанные разрешения добавлена группа «Администраторы». После внесения изменения необходимо перезагрузить компьютер.
Примечание: мне нужно было настроить только права, связанные с заменой маркера уровня процесса.
Как использовать RunWithRestrictedRights
Запустите командную строку с административными правами (этот шаг очень важен).
Введите команду, используя следующий шаблон: C:\RunWithRestrictedRights.exe «application».
Необходимо указать местонахождение директории с файлом RunWithRestrictedRights.exe. Я использую папку H:\Downloads\. Слово «application» нужно заменить на приложение, которое выходите запустить (Notepad, MSPaint и так далее).
Таким образом, итоговая команда должна выглядеть так: H:\Downloads\RunWithRestrictedRights.exe notepad. Для удобства можно привязать переменную окружения к местонахождению приложения.
Рисунок 2: Пример запуска приложения с ограниченными правами
Если всё сделано правильно, приложение с ограниченными привилегиями должно запуститься. В командной строке вы также увидите новое сообщение, что «notepad» запущен на уровне Medium Integrity с идентификатором процесса – aaaa, где aaaa – четырехзначный номер.
Попробуем запустить приложение, не являющее частью операционной системы и требующее UAC (например, Kingston SSD Manager).
Я запустил команду C:\Windows\system32>H:\Downloads\RunWithRestrictedRights.exe «C:\Program Files (x86)\Kingston_SSD_Manager\KSM.exe».
Рисунок 3: Пример запуска приложения от стороннего разработчика
Приложение запустилось с ограниченными правами и, что более важно, не было сообщения от UAC. Вы можете сделать то же самое при запуске других программ, однако если эти приложения зависят от системных ресурсов, то могут работать некорректно.
Как проверить, что приложение запущено с ограниченными правами? Разработчик рекомендует использовать Process Explorer. Зайдите в свойства процесса и посмотрите флаги BUILTIN\Administrators, Mandatory Label и Local account and member of Administrators group (см. рисунок ниже).
Рисунок 4: Свойства процесса KSM.exe
Аргумент –w запустит приложение с ограничениями сразу же, но возврата к командной строке не произойдет, пока программа не закроется. Например, H:\Downloads\RunWithRestrictedRights.exe «notepad» –w.
В общем, довольно простое приложение, позволяющее повысить уровень безопасности.
Заключение
RunWithRestrictedRights – портативное приложение, которое работает, начиная с Windows 7 и выше (хотя разработчики утверждают, что в Windows XP тоже работает). Утилита также поддерживает Windows Server 2003 и более поздние версии. Программа разработана компанией Core Technologies, которая также разрабатывает Service Trigger Editor, рассмотренным нами недавно.
RunWithRestrictedRights можно использовать в разных ситуациях. Например, для запуска с ограниченными правами при условии, что в расширенных привилегиях нет необходимости. К сожалению, проверить работоспособность приложения можно только после запуска.
С учетом вышесказанного, для выполнения ежедневных обязанностей хорошей идеей будет использование аккаунтов обычных пользователей, а административных – только в случае крайней необходимости. В 2017 году компания Microsoft сообщила, что пользователи могут защититься от 94% критических уязвимостей в Windows, если будут использовать неадминистративные учетные записи.