среда, 20 мая 2015 г.

Запуск приложения из под ограниченной учетной записи или "точечное отключение UAC"

Когда у пользователя нет прав на запуск того или иного, стороннего приложения, а у пользователя не должно быть таких прав! ;) То периодически, возникает необходимость дать ему (пользователю) такую возможность, т.е. беспрепятственно запускать какую-то рабочую программу. О возможностях предоставления такого доступа, я и хочу написать.



Как совсем недавно, мне было нужно дать доступ, на запуск установленного Bandicam. Волею судеб, эта программа просит права администратора.
Тестировал различные методы, но обо всем по-порядку.
Система, на которой проводились опыты: Windows 8.1 Pro (x64). Это примечание я сделал потому, что в предлагаемых вариантах, в сети, способы больше подходят для Win 7 или для x32 систем.
Итак, существующие варианты:

  • RunAs
  • ExecAS
  • AdmiLink
  • Microsoft Application Compatibility Toolkit

Золото будет в конце, а начнем с простого, но неудачного варианта: RunAs


Как можно видеть на скрине, утилита позволяет выполнять различные программы с указанными разрешениями. Самый банальный пример отражен на скрине (по выводу runas /?) После ввода команды runas /noprofile /user:domen.local\admin cmd (где domen.local - имя вашего компьютера или имя домена, а admin - логин учетной записи, имеющий права доступа администратора)программа попросит ввести пароль (который не будет отображаться!) и при успехе - откроет вам Командную строку с правами Администратора. Использовать утилиту можно под любой учетной записью, вызвав из командной строке или в окне "Выполнить" (горячие клавиши: Windows+R). Таким образом мы можем создать ярлык для приложения. Написав эту же команду с этими же параметрами в поле "Расположение объекта" и введя имя для ярлыка, на следующем шаге - мы получим ярлык, при запуске которого у нас спросят пароль и при успешном вводе - мы увидим нужную программу, с правами администратора. 
Таким образом мы можем создать отдельную(локальную) учетную запись Администратора, сделать ярлык с такой командой и отдать пароль пользователю, на растерзание. 
Но этого ДЕЛАТЬ НЕ НУЖНО! Потому-что этот метод - полон абсурда. 
В свойствах данного ярлычка - четко видно, какой пользователь используется, для запуска. Т.е. легко узнать логин учетной записи Администратора (пусть даже локального). Пароль имеется у пользователя. Второй абсурд - у RunAs имеется ключ /savecred который позволяет сохранить права доступа, для следующих запусков. Т.е. Прописав: runas /savecred /noprofile /user:domen.local\admin cmd и запустив такой ярлык - вас попросят ввести пароль, НО! при повторных запусках - такого запроса не будет. А это значит то, что изменив запускаемое приложение (в данном примере cmd.exe) на любой другой исполняемый файл (например format_komputer_steret_vse_nahren.bat) - ярлык позволит выполнить его так-же с правами Администратора, при том не спрашивая пароль. Ощущаете горечь на языке? :) 
Итог: RunAs - мы пользоваться НЕ БУДЕМ!!!!


ExecAS - легко и просто, да не нужно

Утилита бесплатная. Имеет неплохие возможности, которые нам интересны, НО! не работает на Windows 8.1 x64 (мои тестовые реалии). Фактически, используя утилиту, с другим "направленным софтом" можно заблокировать на компьютере работу с любыми ресурсами, ограничив лишь использование тех программ, которые мы пропишем в ExecAS.
Из минусов: не умеет работать с доменными учетными записями. Но это легко решается созданием отдельной локальной учетной записи с правами администратора. При запуске - вводим данные учетной записи администратора, указываем исполняемый файл и по большому счету - все готово. При следующем запуске ExecAS - автоматически откроется прописанная нами программа. Можно создавать отдельные ярлычки под множество таких программ. Описывать это не буду, можно посмотреть тут: в оригинальном источнике там же ее можно и скачать. 


AdmiLink - интересная, простая, функциональная, но не везде рабочая...

AdmiLink - программа, так называемая "возможность создания ярлыка программы, с правами Администратора, всего за 12 шагов". Да, это действительно так. Всего 3 страницы опций, расписанных по-порядку. Более того, программа имеет еще ряд полезных и интересных функций. А именно: AdmiCalc; AdmiCrypt; AdmiTerm; AdmiGuard - весь этот список уже включен в программу и дополнительно качать ничего не нужно. За счет последнего (AdmiGuard) - пользователя можно лишить запуска практически всего, наиболее опасного\ненужного например: диспетчер задач, редактор реестра, ограничить доступ к дискам и т д. Обо всех возможностях и подробностях можно ознакомиться на офф. сайте. Там же есть детальное описание того, как это работает и что можно улучшить. В целом - утилита хорошо защищена. И ярлыки, которые она создает не могут быть модифицированы. Т.к. в случаи изменения свойств ярлыка - он сразу-же сообщит о том, что изначальная целостность нарушена. 
Программа имеет 2 языковых интерфейса, которые переключаются налету. RUS и ENG очень комфортно. Да и вообще, она очень дружелюбная! Жаль только, что на Windows 8.1 x64 она так и не создала необходимый ярлык.... жаль... жаль... жаль... Но вам ее попробовать стоит. Может-быть у вас будет другая атмосфера и программа будет работать как часы. Потому как она очень и очень комфортная. 
Напоминаю: Ознакомиться с возможностями и скачать можно: на официальном сайте


Ну и наконец лидер в решении задачи! Microsoft Application Compatibility Toolkit

То самое ЗОЛОТО, о котором я говорил в самом начале статьи. Именно этот способ помог мне решить поставленную задачу. Тут я конечно напишу подробный инструктаж. 
Для начала качаем Toolkit ориентируясь на вашу Windows. Запросив в поисковике: Microsoft Application Compatibility Toolkit Windows 8.1 - я получил линк на сайт Microsoft: https://www.microsoft.com/ru-RU/download/details.aspx?id=39982 с которого скачивается adksetup.exe Запускаем установку. 
На втором шаге будет предложен выбор компонентов. ПО большому счету, из всего списка - вам требуется лишь 1 пункт: Application Compatibility Toolkit (ACT). Дожидаемся окончания установки и запускаем Compatibility Administrator (xx-bit). Найти это можно в меню "Пуск". 


Битность выбирается в зависимости от того, с каким приложением мы будем работать. Например: если мне необходимо использовать bandicam - то учитывая, что это 32-х битное приложение, то и Compatibility Administrator (32-bit) мне необходимо запускать той-же разрядности, несмотря на тот факт, что у меня установлена система x64. По большому счету, запустив не то приложение - страшного ничего не случится, но при попытке работать с тем-же Bandicam - ToolKit предупредит Вас, что вы используете не ту версию.  


Итак, будем надеяться, что у вас не возникло сложностей с выбор запускаемой версии. В главном окне программы находим "New Database(1) [Untitled_1]" и жмем правой кнопкой. Из контекстного меню выбираем: Create New -> Application Fix


В открывшемся окне прописываем Имя приложения, его производителя (не обязательно верно) и указываем путь к необходимой программе. 


Жмем "Далее". Если программе необходим режим совместимости - в соответствующем меню, можно выбрать систему совместимости. Однако из всего большого списка возможностей - нас интересует лишь пункт: RunAsInvoker - его то и отметим галочкой. После отметки - можно сразу протестировать запуск приложения, при наличии кнопки Test Run... (версии Toolkit отличаются, поэтому у вас ее может не быть) Если кнопка имеется - приложение должно успешно запуститься. Но этот тест - не обязательный. 


В следующем окне - ничего не меняем и просто жмем "Далее"


В следующем окне - мы можем выбрать те опции, которые будут подтверждать подлинность исполняемого файла, дабы избежать подмен и прочего. Впрочем, того, что выбрано по умолчанию достаточно, но можно добавить галочку напротив "CHECKSUM" или "SIZE" так как в моем случае ни то, ни другое - гарантировано не измениться. (если только моя программа не обновится) 


Теперь у нас все "Готово". Жмем кнопку и видим, что вид основного окна изменен, и в нем добавилась новая сущность, которую мы только что создали. 


Теперь нам осталось лишь сохранить свою работу (базу данных). Выбираем меню File -> SaveAs... и напишем короткое имя и после нажатия ОК - откроется окно, в котором выберем папку, для сохранения и вновь напишем имя. Рекомендую выбирать "короткий путь от начала диска" Например C:\1\сюда сохраняем файл


Мы все подготовили. Теперь нам необходимо применить те изменения для приложения, которые мы указали на ранних шагах. Открываем командную строку с правами Администратора и прописываем следующую команду: sdbinst C:\1\bandi.sdb (где C:\1\bandi.sdb - путь к вашей сохраненной базе данных) Жмем Enter. Возможно что-то фоново моргнет, но в командной строке вы не увидите никакого ответа. И тем ни менее - все готово! 


Теперь ваше приложение не требует прав администратора! Вы можете скопировать ярлык приложения - на рабочий стол пользователю и все будут счастливы! 

p.s. если вам потребовалось удалить внесенные изменения в приложение, то необходимо ввести ту-же команду, только с ключем -u  Т.е.: sdbinst C:\1\bandi.sdb -u

Спасибо, за внимание! ;)