Запустить браузер от имени другого пользователя
В этой статье я подробно расскажу о проблемах, с которыми столкнётся каждый системный администратор, использующий в своей работе возможность запуска программ от имени другого пользователя, в большинстве случаев от имени администратора. Если вы — тот самый сисадмин, прочитайте её внимательно, скорее всего вам требуется срочная смена своего пароля.
Самое важное, что должен уяснить администратор — из запущенной программы с повышенными правами не должно быть возможности запустить другую произвольную программу, поскольку права автоматически наследуются. Прежде чем вообще планировать создавать ярлык для запуска, следует самостоятельно убедиться, что в программе нет окон открытия других файлов или запуска справки с собственной программой обработки, где дополнительно можно вызвать диалог открытия других файлов справки, и тому подобные в данном случае уязвимости, которые позволят пользователю запустить произвольную программу с правами администратора. Ещё пример — программа при определённых или редких обстоятельствах открывает логи в блокноте, а уже там есть диалог открытия других файлов, вот и готовая уязвимость. То есть целевая программа должна быть изучена администратором вдоль и поперёк (а ещё лучше — написана самостоятельно), чтобы пользоваться ей было действительно безопасно.
RunAs из коробки
В системе есть родная утилита runas, позволяющая выполнять задачу запуска от другого имени, однако пользоваться ей нужно осторожно и в целях безопасности её нельзя применять для запуска программ с повышенными привилегиями, но можно наоборот — администратору запускать программы с правами обычного пользователя, хотя технически возможны оба варианта. Почему так? Параметр /savecred позволяет сохранить пароль для пользователя, от имени которого запускается программа, в профиле пользователя, который запускает программу. Однако этот же сохранённый пароль RunAs использует и для запуска любых других программ, запуск которых может инициировать пользователь, у которого сохранён пароль.
Рассмотрим это на примере: у нас есть Admin с правами администратора, User1 с необходимостью запуска программы от имени администратора, и все остальные пользователи, которые эту программу запускать не должны, назовём их условно User2, а тестовая программа — калькулятор (calc). Когда администратор хочет запустить программу от имени пользователя для проверки или из планировщика, он может сохранить пароль User1 в своём профиле, выполнив команду «runas /savecred /user:User1 calc», ввести пароль User1 и в дальнейшем для этой команды пароль запрашиваться не будет, но также он не будет запрашиваться и для других программ, помимо калькулятора. При этом User2, который выполнит у себя эту же команду, столкнётся с необходимостью ввода пароля для User1, поскольку в его профиле этот пароль заранее не сохранён. Такой сценарий допустим и безопасен, ведь администратор и так имеет полные права. Однако если мы выполним команду «runas /savecred /user:Admin calc» от имени User1 и введём пароль администратора, User1 сможет запускать любые программы от имени администратора, что полностью разрушает модель безопасности.
Вывод — использовать родной runas в составе системы для повышения прав на постоянной основе (с сохранением пароля) категорически нельзя, эта уязвимость должна быть очевидна каждому сисадмину. Да и без сохранения пароля вводить пароль администратора под ограниченным пользовательским сеансом не рекомендуется, если там заранее не были предприняты меры предосторожности, которые не позволяют запускать произвольные программы (SRP, AppLocker), иначе пользователь может запросто перехватить пароль. А мы переходим к неочевидным уязвимостям.
AdmiLink и его армия
Попыток преодолеть небезопасность стандартного runas предпринято множество, тысячи их. Самые известные — AdmiLink, CPAU, Encrypted RunAs и другие. Всех их объединяет конечный способ запуска, который мы разберём далее. В целом алгоритм работы этих программ такой: берём имя и пароль пользователя, от имени которого будет выполняться запуск целевой программы (как правило с правами администратора), добавляем к нему путь и контрольную сумму исполняемого файла (чтобы его нельзя было подменить на произвольный), и всю эту информацию дико шифруем, чтобы расшифровать могла только авторская программа, и желательно только на том же компьютере. Проблема в том, что вся эта защита не имеет никакого смысла, поскольку имя и пароль администратора можно перехватить тогда, когда он уже будет расшифрован. Дополнительная проблема в том, что авторы этих программ об этом не подозревают и убеждают системных администраторов в безопасности своих разработок:
Как работает RunAs и аналоги
Этот момент хорошо разобрал Mick Grove в своей статье Capturing credentials from ‘Encrypted RunAs’ software ещё в 2013 году. Он заметил, что любой подобный софт не изобретает велосипед, а использует для запуска программ от имени другого пользователя стандартную функцию CreateProcessWithLogonW, которой в качестве параметров нужно передавать логин и пароль в открытом виде. А это в свою очередь означает, что запросы к функциям можно перехватить и просто прочитать их параметры, получив на руки логин и пароль администратора. Для мониторинга здесь использовалась бесплатная программа API Monitor, и что самое важное, для её запуска не нужны права администратора, она отлично работает в пользовательском пространстве, поскольку обращение к функции CreateProcessWithLogonW происходит именно в контексте пользователя, а уже сама функция осуществляет запуск процесса с заданными учётными данными, что и следует из её названия.
Получение учётных данных администратора происходит по следующей цепочке:
Пользователь с ограниченными правами запускает ярлык, в котором хорошо зашифрованы данные для запуска программы.
RunAs или его аналоги проверяют корректность шифра и целостность программы, затем извлекают данные и в открытом виде передают их функции CreateProcessWithLogonW.
В это же время API-мониторинг перехватывает данные, переданные функции в качестве параметров, чем делает бессмысленным шифрование пароля и полностью компрометирует учётные данные администратора.
Всё пропало?
Какие меры нужно принять, если на вашем сервере использовался такой способ запуска программ для пользователей? В первую очередь нужно поменять пароли администраторов и провести аудит системы, не было ли взлома с использованием этой уязвимости. Если у вас был запрещён запуск всех посторонних программ, это слегка снижает градус проблемы, но только слегка — нужно убедиться, что пользователям не были доступны для записи те папки, из которых им был разрешён запуск программ, а добраться до них можно разными способами: кроме проводника, где доступ к ФС можно ограничить твиками, как минимум в систему встроены командная строка и PowerShell, запретить их запуск ограниченным пользователям тоже нужно было заранее. Имея же учётные данные администратора на руках, пользователь уже не ограничен ничем и все данные на таком сервере следует считать скомпрометированными. Помните, что безопасность сервера это комплексная мера, и она достигается суммой правильно настроенных параметров, многие из которых здесь не упомянуты.
Есть ли альтернативы?
Они как бы и есть, и их как бы нет. На данный момент мне известно об одной — RunAsRob, которая использует другой метод: вместо запуска программы от имени другого пользователя она по заранее сформированному списку разрешённых программ временно выдаёт права администратора запускаемой программе посредством службы, работающей от имени системы. Благодаря такому подходу исключается утечка учётных данных, а разграничивать доступ к целевым программам нужно NTFS-правами. На данный момент я не могу её рекомендовать, так как она платная и глючная, однако за неимением других в крайнем случае можно использовать эту. Для неинтерактивных программ однозначно лучше использовать планировщик с вызовом по событию в журнале.
В вышеупомянутой статье дополнительно указывается Just Enough Administration (JEA), однако моё исследование этого инструмента показало, что им не получится пользоваться полноценно для интерактивного запуска приложений с окнами — так как процессы запускаются от имени другого виртуального администратора, то окна программ не будут видны для текущего пользователя. JEA может помочь в организации запуска автоматических скриптов и просмотра вывода результатов консольных программ, это определённо информативнее планировщика, но для работы с оконными приложениями не годится.
Можно ли запретить в системе мониторинг API для ограниченных пользователей и этим решить проблему перехвата системных функций — на данный момент мне не известно. Если вам есть что добавить к этой статье, оставьте свой комментарий.
P. S. RestAdmin — концепция безопасного Run As Admin (решение было разработано после этой статьи).
Может возникнуть ситуация, когда необходимо запустить какую-нибудь программу от имени другой учетной записи существующей в компьютере. Причин этого может быть множество, например программа требует для работы прав администратора компьютера или любые другие, главное научиться запускать программы от имени другого пользователя компьютера.
Способов добиться этого существует множество, давайте рассмотрим некоторые штатные возможности операционной системы Windows. Проще всего, если требуется запустить программу от имени администратора, достаточно щелкнуть по запускаемому файлу или ярлыку правой кнопкой мыши и выбрать пункт «Запуск от имени администратора». Ввести пароль и нажать кнопку «OK», программа запуститься от имени администратора.
Чтобы запустить программу от имени другого пользователя системы, нужно с нажатой клавишей Shift на клавиатуре щелкнуть правой кнопкой мыши на нужном файле и выбрать в контекстном меню пункт «Запуск от имени другого пользователя», ввести его логин и пароль.
Есть правда пара особенностей, чтобы запустить программу от имени другой учетной записи, она должна иметь пароль. Учетная записи пользователя имеет имя и может быть указано еще полное имя, работать будет только при указании имени.
Бывает, программа запускается только от имени администратора, а вы пользуетесь обычной учетной записью, тогда можно сократить запуск программы на одно действие, достаточно зайти в свойства ярлыка и на вкладке «Совместимость» отметить галочку «Выполнять эту программу от имени администратора». Теперь двойной клик левой кнопкой мыши по этому ярлыку сразу будет требовать ввода пароля администратора.
Команда Runas для запуска программ от имени другого пользователя
Для часто запускаемых программ от имени другого пользователя, неудобно каждый раз нажимать Shift и щелкать правой кнопкой мыши, проще воспользоваться специальной встроенной командой Runas. Для этого создадим ярлык, который будет запускать нужную программу от имени другого пользователя компьютера. Как создать ярлык можно прочитать здесь. В поле «Объект» напишем следующую команду:
пользователь — учетная запись, от имени которой требуется запустить программу, записывается в виде имя_учетной_записи@имя_компьютера или имя_компьютера\имя_учетной_записи , хотя просто имя_учетной_записи тоже работает.
программа — имя исполняемого файла, который мы хотим запустить. Если исполняемый файл находится не в системных переменных окружения, необходимо указывать полный путь до него.
В случае если имя пользователя или путь программы содержат пробелы, нужно взять их в двойные кавычки по отдельности.
Сохраняем ярлык, теперь при его запуске будет появляться черное окно с просьбой ввести пароль. Внимание, при вводе пароля ничего не происходит, просто вводите его и нажимаете клавишу Enter .
Все хорошо работает, но вводить постоянно пароль быстро надоедает. На этот случай, команда Runas имеет специальный ключ /savecred . В случае его использования, пароль вводится только один раз при первом запуске, он сохраняется в недрах Windows и при последующих запусках подставляется автоматически. Вся команда выглядит следующим образом:
Внимание! Ключ /savecred не работает в Домашних версиях Windows.
Кажется вот оно счастье, однако есть определенные неудобства. Например, какая-либо программа отказывается запускаться в простой учетной записи. Вы запускаете ее вышеописанным способом, все замечательно. Теперь та же ситуация чуть под другим углом. Вы администратор компьютера, а например у вашего ребенка простая учетная запись и игра отказывается запускать под ним. Давать ему пароль администратора вы не намерены, поэтому вы создаете ярлык, прописываете ключ /savecred , вводите пароль первый раз и довольный потираете руки.
Дальнейшие события зависят от степени продвинутости человека, которому вы сделали такой ярлык. Если пользователь чайник в компьютерах, то можете спать спокойно, в противном случае, в один прекрасный день, он может додуматься поменять в ярлыке путь к исполняемому файлу на другой и сможет запускать другие программы от имени администратора.
Так же он получит доступ ко всем файлам на жестком диске компьютера, даже если доступ к ним запрещен его учетной записи, включая папки «Мои документы» других пользователей компьютера. Согласитесь, довольно серьезная дыра в безопасности компьютера при использовании команды Runas с ключом /savecred.
У команды Runas есть ограничения на запуск некоторых системных программ от имени администратора компьютера, в том числе проводника. В Windows XP это обходится использованием ключа /separate: runas /savecred /user:Андрей "explorer.exe /separate"
В более поздних версия операционной системы Windows он не работает, но можно воспользоваться любым другим файловым менеджером и получить доступ к файлам от имени админа.
Выходом в данном случае будет сделать такие настройки безопасности, чтобы нужная программа запускалась от имени простого пользователя или использовать сторонние программы для запуска от имени администратора.
В случае если эти способы не устраивают, можно попытаться максимально затруднить возможность несанкционированного запуска пользователем других программ от имени другого пользователя компьютера. Для этого требуется выполнить несколько дополнительных действий.
Во-первых, и самое главное, не говорить ему, что программа запускается от имени другого пользователя. Правда он может сам узнать об этом в диспетчере задач.
Во-вторых, сделать запуск с помощью пакетного (batch) файла. Открываете текстовый редактор, например блокнот и пишете там строчку, которую писали в поле «Объект» ярлыка. Сохраняете его с расширение .bat. Теперь при запуске этого пакетного файла, точно так же выполнится команда, написанная в нем. Однако этого не достаточно, так как его содержимое можно посмотреть и изменить в простом текстовом редакторе.
Если в имени пользователя или пути к файлу есть русские буквы, то его нужно сохранить в кодировке DOS 866 или в начало bat файла на отдельной строке необходимо вставить chcp 1251.
В-третьих, сделать bat файл не читаемым, чтобы затруднить пользователю анализ, каким образом запускается программа. Для этого сконвертируем наш bat файл в привычный exe. Можно воспользоваться одной из программ конвертеров, например бесплатной программой «Bat To Exe Converter» или любой другой на ваш вкус. Запускаете программу и в поле «Batch file» указываете ваш bat файл. В поле «Save as» куда и под каким именем сохранить результат. Дополнительно для большей конспирации можно на вкладке «Versioninformations» в поле «Icon file» указать значок для нашего будущего exe-шника в формате ico. Остальные параметры можно не трогать. Когда все будет готово, нажимаете кнопку «Compile» и получаете свой exe файл.
Теперь открывать его в текстовом редакторе бесполезно. Копируете его в папку с запускаемой программой, называете как-нибудь похоже на название программы и делаете на него обычный ярлык на рабочем столе.
В-четвертых, последний штрих, выдающий в нем командный файл, это на секунду появляющееся черное окно на рабочем столе. Избавиться от него совсем простым способом не получится, но можно достаточно просто свести его заметность к минимуму. Достаточно в свойствах ярлыка на вкладке «Ярлык» выбрать пункт «Свернутое в значок», теперь только на панели задач будет появляться на мгновение окно командной строки.
Все, теперь если человек от которого вы хотите скрыть админский пароль является чайником или обычным среднестатистическим пользователем можете спать спокойно. Конечно, грамотный человек сможет узнать содержимое созданного нами exe-шника, но по большому счету это не требуется. Достаточно догадаться, что используется команда runas и просто создать свой ярлык для запуска нужной программы так что, несмотря на все ухищрения это поможет только от начинающего пользователя.
Как удалить сохраненный пароль в команде Runas
Сохранив единожды пароль от учетной записи в команде runas, вы можете в дальнейшем запускать программы, не вводя его снова. Однако вам может потребоваться заблокировать возможность запускать программы от имени другой учетной записи пользователя компьютера с использованием сохраненного пароля в runas.
Чтобы удалить сохраненный пароль, выполните «Пуск» ⇒ «Панель управления» ⇒ «Учетные записи пользователей и семейная безопасность» ⇒ «Диспетчер учетных данных».
В разделе «Учетные данные Windows» (интерактивный вход в систему) удаляете не нужные больше записи из хранилища.
03.08.2020
itpro
Windows 10, Windows Server 2016
комментария 42
Любой пользователь Windows может запустить в своей сессии программы от имени другого пользователя (Run As). Благодаря этому можно выполнить скрипт (.bat, .cmd, .vbs, .ps1), исполняемый .exe файл или запустить установку приложения (.msi, .cab) с полномочиями другого, как правило привилегированного, пользователя .
Например, вы можете использовать RunAs для установки программ или запуска MMC оснасток с правами администратора непосредственно в сессии непривилегированного пользователя. Также возможность запуска программ “от имени” может быть полезна, когда приложение настроено под другим пользователем (и соответственно хранит свои настройки в чужом профиле, к которому у данного пользователя нет прав доступа), а его нужно запустить с теми же настройками в сессии другого пользователя.
За возможность запуска программ от имени другого пользователя в Windows отвечает служба Вторичный вход в систему (Secondary Log-on). Если эта служба остановлена все описанные методы runas работать не будут. ВЫ можете проверить, что служба запущена с помощью следующей команды PowerShell:
В Windows 10 есть несколько способов запустить программу или процесс от имени другого пользователя.
Запуск программы от имени другого пользователя из Проводника Windows (File Explorer)
Самый простой способ запустить программу из-под другого пользователя – воспользоваться графическим интерфейсом Проводника Windows (File Explorer). Просто найдите нужно приложение (или ярлык), зажмите клавишу Shift и щелкните по нему правой кнопкой мыши. Выберите пункт контекстного меню «Запуск от имени другого пользователя» (Run as different user).
Примечание. Если пункт меню «Запуск от имени другого пользователя» отсутствует, см. следующий раздел.
В появившемся окне нужно указать имя и пароль пользователя, под чьей учетной записью нужно запустить программу и нажать кнопку ОК.
Примечание. Если нужно указать доменного пользователя, используется один из следующий форматов имени: UserName@DomainName или DomainName\UserName .
Важно. Запуск программ от имени другого пользователя возможен, если для него задан пароль. Использовать Runas для пользователя с пустым паролем не получится.
Откройте Диспетчер задач и убедитесь, что приложение запущенно под указанным пользователем.
Включить пункт “Запуск от имени другого пользователя” в контекстном меню проводника Windows
Если в контекстном меню проводника Windows отсутствует пункт Запуск от имени другого пользователя (Run as different user), откройте редактор локальных групповых политик (gpedit.msc) и убедитесь, что в разделе Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Пользовательский интерфейс учетных данных (Computer Configuration -> Administrative Templates -> Windows Components -> Credential User Interface) отключена (Не задана) политика Запрашивать достоверный путь для входа в учетную запись (Require trusted path for credential entry)
Команда Runas – запуск программ от имени другого пользователя из командной строки
В Windows есть консольная утилита runas.exe, которая используется для запуска приложений от имени другого пользователя из командной строки. Также команда runas позволяет сохранить пароль пользователя в Windows Credential Manager, чтобы его не приходилось набирать каждый раз.
Откройте командную строку (или окно Выполнить, нажав сочетание клавиш Win+R). Для запуска Блокнота с правами учетной записи admininstrator выполните команду:
runas /user:administrator “C:\Windows\cmd.exe”
runas /user:”user test” notepad.exe
В отрывшемся окне появится приглашение «Введите пароль для admin», где нужно набрать пароль и нажать Enter.
Должно открыться ваше приложение. В моем случае это cmd. В заголовке окна указано Запущено от имени CompName\username :
Можно, например, открыть панель управления под другим пользователем:
runas /user:admin control
Для запуска программы из-под доменного пользователя нужно использовать формат имени UserName@DomainName или DomainName\UserName . Например, чтобы с помощью блокнота открыть текстовый файл от имени пользователя домена CORP, используйте команду:
runas /user:corp\server_admin “C:\Windows\notepad.exe C:\tmp\2871997x64.txt”
Иногда нужно запустить программу от имени доменного пользователя с компьютера, который не добавлен в домен AD. В этом случае нужно использовать такую команду (при условии, что в сетевых настройках вашего компьютера указан DNS сервер, который может отрезолвить этот домен):
runas /netonly /user:contoso\aaivanov cmd.exe
Если для запуска программы от другого пользователя не нужно загружать его профиль, используйте параметр /noprofile . При этом приложение запускается намного быстрее, но может вызвать некорректную работу программ, которые хранят данные в профиле пользователя.
Запуск программ от имени другого пользователя без ввода пароля
Вы можете сохранить пароль пользователя, который вы вводите. Для этого используется параметр /savecred.
runas /user:admin /savecred “C:\Windows\notepad.exe”
После указания пароля он сохранится в диспетчере паролей Windows.
При следующем запуске команды runas под этим же пользователем с ключом /savecred Windows автоматически получит сохраненный пароль из Credential Manager, а не будет запрашивать его повторно.
Чтобы вывести список всех пользователей, для которых сохранены пароли, используется команда:
Однако использование параметра /savecred не безопасно, т.к. пользователь, в чьем профиле сохранен чужой пароль может использовать его для запуска любой команды под данными привилегиями, или даже сменить чужой пароль. Кроме того, сохраненные пароли из Credential Manager можно легко украсть, поэтом лучше запретить использование сохраненных паролей (а тем более нельзя сохранять пароль привилегированной административной учетной записи).
Ярлык с запуском программы от имени другого пользователя
Можно создать на рабочем столе ярлык, позволяющий запустить программу от имени другого пользователя. Просто создайте новый ярлык, в окне с адресом объекта которого укажите команду runas с нужными параметрами.
При запуске такого ярлыка будет запрашиваться пароль пользователя.
Если дополнительно указать в ярлыке runas параметр /savecred , то пароль будет запрошен только один раз. После этого пароль будет сохранен в Credential Manager и автоматически подставляться при запуске ярлыка от имени другого пользователя без запроса пароля.
Такие ярлыки довольно часто используются для запуска программ, которые требуют прав администратора для запуска. Однако есть более безопасные способы запуска программы без прав администратора, или отключения запроса UAC для определенного приложения.
Запуск оснастки MMC консоли от имени другого пользователя
В некоторых случаях от имени другого пользователя нужно запустить одну из управляющих оснасток Windows. К примеру, если под другим пользователем нужно запустить оснастку Active Directory Users and Computers из набора инструментов администрирования RSAT, можно воспользоваться такой командой.
runas.exe /user:DOMAINname\USER “cmd /c start \”\” mmc %SystemRoot%\system32\dsa.msc”
Аналогичным образом можно запустить любую другую оснастку (главное знать ее имя).
Как добавить пункт “Запуск от имени” для программ в меню Пуск?
По-умолчанию в Windows 10 у элементов меню Пуск (начального экрана) отсутствует возможность запуска приложений от имени другого пользователя. Чтобы добавить в контекстное меню пункт “Запуск от имени другого пользователя”, нужно включить политику Показывать команду «Запуск от имени другого пользователя» при запуске (Show “Run as different user” command onStart) в разделе редактора групповых политик (консоль gpedit.msc) Конфигурация пользователя ->Административные шаблоны -> Меню Пуск и панель задач (User Configuration -> Administrative Templates -> Start Menu and Taskbar).
Либо, если редактор gpedit.msc отсутствует, создать в ветке реестра HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Explorer ключ типа DWORD с именем ShowRunasDifferentuserinStart и значением 1.
New-ItemProperty -Path "HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\Explorer" -Name ShowRunasDifferentuserinStart -Value 1 -PropertyType DWORD -Force
Осталось обновить групповые политики (gpupdate /force) и убедиться, что у программ в меню Пуск появится новое контекстное меню Дополнительно -> Запуск от имени другого пользователя.
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 и убедитесь, что программа использует внешний файл манифеста, в котором указано, что нужно запускаться без прав администратора.
Как всегда запускать программу от имени другого пользователя
Всем известно, что для того, чтобы запустить программу от имени администратора нужно нажать на ярлык программы (или на сам файл) правой кнопкой мыши, и в появившемся контекстном меню выбрать Запуск от имени администратора. Также, ни для кого уже не секрет, что если перед тем как нажать на файле правой кнопкой мышки зажать Shift, то в контекстном меню появится пункт Запуск от имени другого пользователя.
В обоих случаях далее нужно будет ввести соответствующие учётные данные. Это хорошо работает, когда программу нужно запускать от имени другого пользователя не часто.
Если же программу приходится запускать каждый раз от имени другого пользователя, такой способ запуска становится, мягко говоря, немного неудобным.
Для того, чтобы не вводить каждый раз альтернативные учётные данные при запуске программы, можно создать особый ярлык, в котором прописать, что запускаемую по данному ярлыку программу, нужно запускать от имени другого пользователя.
Точнее ярлык создаётся самый обыкновенный, но в нём нужно кое-что изменить.
Например, мы хотим, чтобы Notepad++ всегда запускался от имени другого пользователя (не важно администратора, или нет).
Переходим на вкладку Ярлык и в поле Объект перед тем, что там есть (перед путём в к exe-файлу) вставляем следующий текст:
где вместо domain\user нужно подставить имя своего пользователя (и если нужно – домена), от имени которого нужно запускать программу.
Т.е., например, для запуска Notepad++, (установленного в каталог по умолчанию) строка запуска будет иметь следующий вид:
Сохраняем внесённые изменения (нажимаем ОК).
Теперь, при первом запуске программы, откроется окошко, в котором нужно будет ввести пароль от указанного в ярлыке пользователя (в этом окне при вводе не отображается, ни пароль, ни звёздочки). В результате программа запустится от имени указанного пользователя.
Далее, при запуске программы через этот ярлык, она всегда будет запускаться от имени этого пользователя, не спрашивая пароль.
При желании/необходимости можно создать несколько ярлыков для запуска одной и той же программы от имени разных пользователей.
Читайте также: