Представляем следующую редакцию средств PowerToy для запуска с повышением прав для Windows Vista. Я обратил на них внимание в июньском номере TechNet Magazine за 2007 год. Теперь, через год, я покажу вам, как мне удалось расширить функциональность запуска от имени администратора для некоторых из моих любимых средств работы со сценариями от сторонних поставщиков; продемонстрирую, чем можно заменить полезное свойство Windows® XP, отсутствующее в Windows Vista®; познакомлю вас с некоторыми полезными средствами в составе средств PowerToy для запуска с повышением прав.
Одной из тем, которые я обсуждал в предыдущей статье (доступной на technet.microsoft.com/magazine/cc162321.aspx), была возможность применения пункта меню «Запустить от имени администратора» для собственных средств работы со сценариями Windows. Для этой статьи я сделал несколько средств PowerToy «Запуск от имени администратора», которые можно использовать для средств работы со сценариями от сторонних поставщиков:
Код для каждой из этих программ включен в комплект загружаемых файлов для этой статьи, находящийся по адресу technetmagazine.com. Файлы называются, соответственно, ElevateAutoIt3.inf, ElevateAutoHotKey.inf, ElevatePerlScript.inf и ElevateKiXtart.inf. Установка AutoIt v3, AutoHotkey и ActivePerl довольно проста: загрузите соответствующее приложение и установите его в каталог по умолчанию. Когда интересующие вас приложения установлены, для каждого из них можно будет установить соответствующее средство PowerToy «Запуск от имени администратора».
К сожалению, к программе KiXtart 2010 нет установщика. Для того, чтобы установить KiXtart в каталог по умолчанию, что позволит нормально работать средству PowerToy, я добавил INF-файл, который установит installKiXtart 2010 (v 4.60) в каталог Program Files\KiXtart и зарегистрирует расширение имени KIX.
Загрузите файл KiX2010_460.zip с www.kixtart.org/?p=downloads и разархивируйте его в какой-нибудь каталог. Скопируйте файл Install_KiXtart.inf (он входит в состав комплекта загружаемых файлов к этой статье) в тот же каталог. Затем щелкните правой кнопкой мыши файл Install_KiXtart.inf и выберите «Установить». После этого установите средство PowerToy ElevateKiXtart.inf.
Контроль учетных записей (UAC) был разработан для того, чтобы снизить уязвимость операционной системы от вредоносных программ. Это достигается тем, что все пользователи, включая администраторов, запускают большинство программ только со стандартными правами. Для выполнения задач по администрированию и некоторых других функций приложений предусмотрена возможность повышения прав. Эта возможность реализуется выбором пункта «запуск от имени администратора» в контекстном меню, которое можно вызвать, щелкнув исполняемый файл правой кнопкой мыши. Средства PowerToy для запуска с повышенными правами, которые обсуждались в июньском номере за 2007 год, позволяют использовать эту возможность для других типов объектов и файлов.
Встроенная в Windows Vista функциональность довольно неплохо работает для большинства задач по администрированию. Однако один важный вариант использования не был реализован в Windows Vista. Во многих подразделениях ИТ существует практика, когда сетевые администраторы используют одну учетную запись для своих каждодневных задач (вроде чтения почты и составления документов) и другую учетную запись для администрирования сети или локального компьютера.
В результате снижается риск того, что администратор случайно запустит вредоносную программу во время обычной работы и тем самым нарушит безопасность всей системы или домена, в котором он находится. В Windows XP в меню, вызываемом щелчком правой кнопки мыши, был пункт «Запустить от имени…». Но в Windows Vista этот пункт меню заменен пунктом «Запустить от имени администратора».
Однако средство командной строки «runas» в Windows Vista осталось. К сожалению, его нельзя использовать для основной задачи второй учетной записи: для запуска оснасток консоли управления (MMC). Предположим, что вам поручены какие-то задачи по управлению учетными записями в службе каталогов Active Directory®. Над своими каждодневными задачами вы работаете как обычный пользователь, а для задач администрирования у вас есть учетная запись, входящая в группу локальных администраторов компьютера (так что вы можете устанавливать на компьютер необходимые средства управления сетью). Компьютер работает под управлением Windows Vista со включенным контролем учетных записей . Чтобы запустить модуль «Active Directory – пользователи и компьютеры» (ADU&C) от имени администратора службы каталогов Active Directory, вы могли бы попробовать команду runas, как показано ниже:
runas /user:mydomain\admin "mmc.exe %windir%\system32\dsa.msc"
К сожалению, ADU&C так не запустится. Вместо этого вы увидите такую ошибку программы runas: «Для выполнения операции требуется повышение прав». Что же происходит? Дело в том, что исполняемые файлы MMC помечены как требующие наивысшего уровня прав. Поскольку наивысший возможный уровень прав для учетный записи, используемой для администрирования, это администратор, для запуска ADU&C требуется повышение прав. Поскольку runas не запрашивает повышения прав, происходит ошибка.
Таким образом, описанный вариант работы в Windows Vista затруднен, потому что в контекстном меню нет пункта «Запустить от имени…». Кроме того, отсутствуют встроенные средства запуска приложения, требующего повышения прав, от имени другого пользователя.
Если бы я не привел здесь решения этой проблемы, у меня получилась бы довольно грустная статья. К счастью, одно из моих исходных средств повышения прав PowerToy предоставляет ключ к разрешению второй проблемы, и мне удалось довести другое до решения первой. (Хотел бы я, чтобы решение проблемы повышения прав принадлежало мне, но увы, его нашел Гов Махарадж (Gov Maharaj) из группы изучения совместимости приложений с Windows).
Получилось, что при помощи команды runas можно использовать средство PowerToy «команда Elevate». Если выполнение предыдущей команды не приводит к запросу повышения прав, то эта работает нормально:
runas /user:mydomain\admin "elevate mmc.exe%windir%\system32\dsa.msc"
Этой командой runas запускает elevate.cmd (технически это тот же cmd.exe) от имени другого пользователя, а уже интерпретатор команд с повышенными правами запускает mmc.exe.
В конце концов, я скомбинировал этот прием с сопоставлениями для файлов EXE and MSC и, добавив к этому пользовательский интерфейс, написанный в виде приложения HTML, получил средство PowerToy, создающее пункт «Запустить от имени другого пользователя» в меню, доступном по щелчку правой кнопкой мыши. При выборе этого пункта меню вызывается приложение HTML, как показано на рис. 1.
Рис. 1 Средство «Запуск программ от имени другого пользователя»
Введите имя пользователя и домен; если учетная запись расположена на локальном компьютере, установите флажок «Использовать локальную учетную запись». Затем нажмите кнопку «Запустить», чтобы запустить приложение от имени обычного пользователя, или «Запустить как администратор», чтобы запустить приложение с повышенными правами. После нажатия одной из этих кнопок запустится runas.exe и запросит пароль или ПИН-код смарт-карты.
Поскольку это средство PowerToy использует средство PowerToy «команда Elevate», сначала нужно установить его. Для этого щелкните правой кнопкой мыши файл RunAs.inf, выберите «Установить» и подтвердите повышение прав. Для удаления этого средства используйте пункт панели управления «Программы и компоненты».
Некоторые из ярлыков файлов MSC из папки «Администрирование» (например «Управление компьютером») будут работать с этим средством PowerToy. Однако имейте в виду, что ярлыки, создаваемые при установке средств администрирования Windows Server® 2003 с использованием adminpak.msi, – это не стандартные ярлыки файлов MSC, а ярлыки установщика Windows Installer. Из-за этого «Проводник» не показывает пункт «Запустить от имени другого пользователя» в меню этих ярлыков.
Для таких ярлыков придется искать настоящие файлы MSC и щелкать их правой кнопкой мыши или создавать новые ярлыки для файлов MSC. Кроме того, runas не работает с Internet Explorer®, потому что Internet Explorer в Windows Vista был перепроектирован для работы в режиме повышенной безопасности (дополнительная информация по этому вопросу
находится на support.microsoft.com/?id=922980).
Обратите внимание: после создания мною этих средств PowerToy, но до выхода в свет этой статьи, группа Windows Sysinternals выпустила новое средство с функциями, очень похожими на средство PowerToy «Запуск от имени другого пользователя». Оно называется ShellRunas и находится на веб-узле Windows Systernals: technet.microsoft.com/sysinternals/cc300361.
Поскольку ребята из Sysinternals всю жизнь пишут настоящий код, то, быть может, лучше использовать их средство. Я решил оставить свою версию в этой статье для того, чтобы на его примере показать, как можно решить данную задачу и вообще расширить функции оболочки с помощью сценариев и приложений HTML.
Иногда необходимо запускать программы в контексте системной учетной записи. Например, многие средства распространения программного обеспечения, такие как System Center Configuration Manager (SCCM), используют клиентский агент, который для выполнения своих задач запускается от имени системной учетной записи.
Чтобы протестировать поведение установщика программного обеспечения, работающего от имени системной учетной записи, перед тем как начинать распространять программу с помощью, например SCCM, было бы полезно запустить установщик из интерпретатора команд, работающего от имени системной учетной записи. Так я решил сделать собственные средства PowerToy для запуска интерпретаторов команд CMD и PowerShell в данной папке от имени системной учетной записи.
В Windows XP я привык реал
@echo off sc create CmdAsSystem type= own type= interact binPath= "cmd /c start cmd /k (cd c:\ ^& color ec ^& title ***** SYSTEM *****)" net start CmdAsSystem sc delete CmdAsSystem
Однако если попытаться выполнить этот сценарий из командной строки с повышенными полномочиями в Windows Vista, появится сообщение об ошибке, показанное ниже, а запрос командной строки от имени системной учетной записи не появится.:
ВНИМАНИЕ! Служба CmdAsSystem настроена как интерактивная, ее поддержка отключена. Служба может не работать должным образом. Проблема в том, что этот сценарий пробует создать и запустить интерактивную службу. В Windows Vista из-за изоляции сеанса 0 интерактивные службы не работают нормально. (Что такое «изоляция сеанса 0», можно узнать в техническом документе «Службы в Windows Vista», находящемся по адресу microsoft.com/whdc/system/vista/Vista_Services.mspx.)
Чтобы обойти это ограничение, я воспользовался средством Psexec, разработанным командой Sysinternals (см. technet.microsoft.com/sysinternals/bb897553.aspx). Это средство позволяет запускать процессы от имени системной учетной записи. К сожалению, большинство средств Sysinternals не содержат установщиков. Поэтому я написал файл INF (который можно загрузить вместе с остальным кодом), который устанавливает весь пакет Sysinternals (в том числе и Psexec) в каталог Program Files\Sysinternals Suite. В качестве дополнительного сюрприза этот файл INF создает в меню «Пуск» ярлыки для всех графических средств пакета.
Чтобы установить пакет, сначала загрузите SysinternalsSuite.zip с technet.microsoft.com/ sysinternals/bb842062.aspx и распакуйте его в папку. Скопируйте в ту же папку мой файл INF (Install_SysinternalsSuite.inf), щелкните его правой кнопкой мыши и выберите «Установить». Поскольку это новое средство PowerToy использует средство PowerToy « команда Elevate», потом установите и его. После этого можно будет установить CmdHereAsSystem.inf и PowerShellHereAsSystem.inf. Когда установятся эти средства PowerToy, пункты CMD Prompt Here as System и PowerShell Prompt Here as System появятся в меню, вызываемом в «Проводнике» для папок и устройств щелчком правой кнопки мыши, как показано на рис. 2.
Рис. 2 Параметры средств CMD Prompt Here и PowerShell Prompt Here от имени системной учетной записи
На рис. 3 показано окно интерпретатора команд CMD, работающее от имени системной учетной записи. Я выбрал яркий цвет как напоминание о том, что командная строка работает от имени системной учетной записи и, если будет введена неправильная команда, то с системой могут произойти непредвиденные (и опасные для ее целостности) вещи.
Рис. 3 Осторожно и ответственно используйте окно интерпретатора команд CMD от имени системной учетной записи
И последнее. Эти средства PowerToy добавляют команды к системе, так что их можно запустить из командной строки или из диалога «Пуск». Например, в результате исполнения следующей команды из диалога «Пуск» будет запущено окно интерпретатора команд CMD от имени системной учетной записи в папке Windows:
cmdassystem "c:\windows"
Соответствующая команда для интерпретатора команд Windows PowerShellTM — psassystem. Обратите внимание, что я также изменил средства PowerToy для запуска интерпретаторолв команд CMD и PowerShell в данной папке от имени администратора, чтобы установить соответствующие команды — соответственно, cmdasadmin и psasadmin.
Большинство моих средств PowerToy требуют щелчка правой кнопкой мыши. Однако в это обновление я включил и кое-что более занятное в качестве сюрприза. Это мини-приложение для боковой панели Windows, которое я назвал мини-приложением для повышения прав (показано на рис. 4). Это цель для операции перетаскивания. Просто перетащите исполняемый файл или сценарий, у которого в проводнике Windows определено действие runas, и он запустится с повышенными правами.
рис. 4 Мини-приложение для повышения прав
Если у вас установлена предыдущая версия моих средств PowerToy для повышения прав, то мини-приложение будет работать для сервера сценариев Windows, сценариев интерпретатора команд Windows PowerShell, приложений HTML, а также для пакетов и исправлений установщика Windows (так же, как и для исполняемых файлов и сценариев командной строки, у которых действие runas определено в Windows Vista по умолчанию). И, конечно же, можно перетаскивать несколько элементов вместе. (Попробуйте перетащить папку на мини-приложение и посмотрите, что получится).
Чтобы установить мини-приложение, дважды щелкните мини-приложение для повышения прав (находится в пакете загрузки кода). Если вам интересно посмотреть на код мини-приложения, добавьте к имени файла расширение CAB Затем извлеките содержимое из файла CAB.
Комплект загружаемых файлов к этой статье содержит как новые средства PowerToy, так и старые, из исходной статьи. В некоторые из старых средств я внес небольшие изменения. Например, исходные версии и средства запуска интерпретатора команд Windows PowerShell в данной папке от имени администратора, и сценариев WSH с повышенными правами устанавливали свои собственные копии файлов elevate.cmd и elevate.vbs. Поскольку нескольким новым средствам PowerToy также нужны эти файлы, я поменял эти средства так, что для их установки должна быть установлено средство PowerToy «команда Elevate» (тогда все средства совместно используют эту копию файлов). Чтобы определить, требуется ли установка командной строки с повышенными правами, проверьте заголовок файла INF.
В некоторых исходных PowerToy также есть мелкие изменения, не влияющие на функциональность. Перед установкой новых средств PowerToy всегда удаляйте старую версию. Поскольку этот набор разросся до 17 инструментов, я добавил сценарии интерпретатора команд для установки и удаления всего набора (соответственно, InstallAllPowerToys.cmd и UninstallAllPowerToys.cmd). Этот файл можно поменять, чтобы устанавливать и удалять только нужные инструменты.
Имейте в виду, что InstallAllPowerToys.cmd по умолчанию не устанавливает средство запуска от имени администратора сценариев от сторонних разработчиков. Этот сценарий можно поменять так, чтобы он устанавливал средства PowerToy только для того программного обеспечения, которое уже установлено. При запуске любого их этих сценариев он перезапускает себя с повышенными правами. UninstallAllPowerToys.cmd также удаляет все старые версии средств PowerToy.
Как и все мои средства PowerToy, они не поддерживаются: это средства для использования «на свой страх и риск». Это не официальные продукты корпорации Майкрософт, а мои собственные программы. Они были протестированы мной и несколькими другими добровольцами на 32-разрядной версии Windows Vista с языком по умолчанию US English. Наконец, любое из этих средств может перестать работать при выходе обновлений, пакетов обновлений или новых версий операционной системы Windows.
Иcточник: TechNet Magazine
Tags: domain, Windows Vista, Windows XP