Недавно в гостинице мне понадобилось вывести на печать электронный авиабилет из Internet Explorer (IE) с ноутбука Windows 7. Владелец отеля предложил мне свой принтер и диск с драйвером, от которого я отказался, зная, что мой ноутбук, подключенный к Интернету, сам найдет нужный драйвер в Центре обновления Windows, что он и сделал за считанные секунды. Весь процесс, включая печать, прошел без проблем. Что самое важное, для выполнения установки мне не потребовалось повышать полномочия стандартного пользователя до прав администратора.

Первое, что делают многие системные администраторы при подготовке к работе нового компьютера, особенно ноутбука, — это перемещение учетных записей пользователей домена в локальную группу администраторов и, что еще хуже, выключение контроля учетных записей пользователей (UAC) в Windows Vista и более новых версиях. Это часто делается в случаях, аналогичных описанному выше, когда пользователю необходимо установить драйвер устройства или выполнить другую задачу административного уровня. Однако изменения в реализации UAC и модели безо­пасности в Windows 7 предоставляют обычному пользователю возможность обходиться без прав администратора.

Установка устройств

Параметр реестра DevicePath в Windows существует давно; он позволяет администратору указывать надежные источники, в которых, помимо папки %SystemRoot%\inf по умолчанию, система ищет нужный драйвер при подключении нового устройства. Начиная с Windows 7 стандартные пользователи могут добавлять подписанные драйверы в локальное хранилище драйверов из источников, указанных в значении параметра реестра DevicePath, или из центра обновления Windows.

Если пакеты драйверов хранятся в сети, то можно включить в значение параметра реестра DevicePath соответствующий сетевой путь, чтобы система Windows, помимо хранящихся в памяти компьютера драйверов, просматривала и сетевое хранилище: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows CurrentVersion\DevicePath. Включаемые пути должны отделяться друг от друга точкой с запятой: %SystemRoot%\Inf;\\servername\ drivers.

В Windows 7 сохраняется требование, согласно которому драйверы должны быть подписаны действующим сертификатом, который является доверительным для данного локального компьютера. Кроме того, 64-разрядные версии Windows предусматривают специальные требования к драйверам режима ядра, которые должны быть подписаны сертификатом издателя программного обеспечения из составленного Microsoft списка утвержденных удостоверяющих центров (CA). Ознакомиться со списком можно по ссылке www.microsoft.com/whdc/winlogo/drvsign/crosscert.mspx. Хотя в Windows 7 большинство существующих устройств могут быть установлены без административных прав, набор драйверов Windows включает средства, необходимые для подписания драйверов устройств (www.microsoft.com/whdc/devtools/wdk/wdkpkg.mspx).

В Windows 7 и Vista существует программа pnputil.exe, которую можно использовать для регистрации драйверов в локальном хранилище. Будучи помещенным в локальное хранилище, драйвер считается доверительным и устанавливается при подключении пользователем соответствующего устройства. Регистрация драйверов с помощью pnputil.exe может быть необязательной, но обеспечивает безотказность взаимодействия системы с пользователем при подключении ранее удаленного устройства. Драйверы, уже добавленные в локальное хранилище, могут быть пронумерованы с использованием pnputil.exe и с указанием ключа -e.

Параметры групповой политики в Windows 7 и Vista позволяют указывать устройства, которые могут быть установлены обычным пользователем, по идентификатору GUID. В Windows Server 2008 и более поздних версиях в Computer Configuration\Policies\Administrative Templates\System\Driver Installation имеется параметр групповой политики «Разрешить пользователям, которые не являются администраторами, устанавливать драйверы для этих классов установки устройств». Для стандартных пользователей возможны следующие сценарии установки драйверов устройств:

  • в Windows уже включен драйвер, поддерживающий подключаемое устройство;
  • драйвер устройства зарегистрирован администратором в локальном хранилище драйверов с помощью pnputil.exe или dism.exe;
  • драйвер, подписанный с использованием действующего сертификата и являющийся доверительным для данного локального компьютера, имеется в центре обновления Windows или в источнике, указанном в значении DevicePath системного реестра (только Windows 7);
  • имеется драйвер, подписанный с использованием действующего сертификата и являющийся доверительным для данного локального компьютера, а идентификатор GUID соответствующего устройства указан в списке параметра политики «Разрешить пользователям, которые не являются администраторами, устанавливать драйверы для этих классов установки устройств» (Vista и последующие версии).

Сетевые принтеры

Само по себе развертывание и управление принтерами — не слишком тяжелая работа, но введение учетных записей обычных пользователей на рабочих станциях может оказаться сложной задачей. Возможность для обычного пользователя устанавливать драйверы для сетевых принтеров порождает проблемы. Одно из преимуществ использования серверов печати Windows в сети состоит в том, что в большинстве случаев для установки сетевых принтеров под управлением Windows Server пользователям не требуется административных прав. Если драйвер принтера, установленный на сервере печати, является собственным драйвером Windows (то есть включен в установку Windows по умолчанию) либо входит в пакет подписанных драйверов принтера, то для его установки права администратора не требуются. Кроме того, может быть использована групповая политика для развертывания принтеров через консоль управления печатью без необходимости административных полномочий.

Однако многие организации желают избежать затрат, связанных с использованием сервера печати Windows, поэтому существуют обходные пути обеспечения возможности установки сетевых принтеров стандартными пользователями. Основная проблема при обслуживании сетевых принтеров, не управляемых сервером печати Windows, — необходимость настройки локального порта TCP/IP на каждом клиенте для их развертывания, что требует наличия прав администратора.

Для развертывания принтеров TCP/IP для стандартных пользователей можно применять предпочтения групповой политики, однако в этом случае при первоначальном развертывании требуется установка принтера на сервере печати Windows для распределения драйвера. После установки принтера на всех нужных устройствах сервер печати Windows можно выключить и направлять задания печати непосредственно на устройство. На практике использование предпочтений групповой политики для развертывания принтеров TCP/IP для обычных пользователей имеет ряд недостатков.

  • Необходимость развертывания клиентских расширений предпочтений групповой политики на компьютерах под управлением других операционных систем (не Windows 7).
  • Если используются предпочтения конфигурации компьютера для развертывания принтеров TCP/IP — необходимость выключения параметра «Ограничения указания и печати» групповой политики в Computer Configuration\Administrative Templates\Printers, чтобы отключить выдачу предупреждений или запросов на повышение прав во время установки.
  • Предпочтения групповой политики поддерживают развертывание принтеров, только если выбран процессор печати WinPrint при установке для развертывания на сервере печати Windows. При другом варианте выбора данный процессор печати должен быть уже установлен на устройствах, где будет развертываться принтер. WinPrint может не поддерживать расширенные функции принтера.

Нежелательные запросы UAC на повышение прав

Некоторые приложения без достаточных оснований требуют наличия прав администратора при запуске. Пользователь, вошедший в систему под стандартной учетной записью, при запуске такого приложения получает запрос UAC на ввод пароля учетной записи администратора. Если не ввести пароль и ответить «Нет» на вопрос «Разрешить следующей программе внести изменения на этом компьютере?», приложение не запускается.

На первый взгляд может показаться, что есть только два решения: запустить приложение с правами администратора или выключить UAC, причем оба варианта нежелательны. Каждый исполняемый файл в системе может сопровождаться манифестом приложения, представляющим собой файл. xml с параметрами, определяющими характер взаимодействия приложения с UAC. Обычно манифест приложения внедрен в исполняемый файл, но иногда он может быть самостоятельным файлом в каталоге приложения.

Для решения проблемы в состав инфраструктуры совместимости приложения включена оболочка совместимости RunAsInvoker, позволяющая запускать приложение без полномочий, связанных с процессом создания, и без необходимости повышения прав. По возможности, однако, предпочтительно изменять манифест исполняемого файла.

Компания Heaven Tools предлагает программу Resource Tuner (www.heaventools.com/resource-tuner.htm), позволяющую администратору изменять манифесты приложений, внедренные в предварительно скомпилированные исполняемые файлы. Запуск этой программы и изменение кода. xml чрезвычайно просты. Все, что нужно, — найти папку Manifest в обозревателе ресурсов и сменить значение requestedExecutionLevel с requireAdministrator на asInvoker, а затем сохранить изменения в исполняемом файле. Ниже приведен пример для тега «security» в файле манифеста приложения:

 
 
 
 
 

При работе с Visual Studio (VS) можно задействовать файл mt.exe для добавления или изменения манифеста приложения. Это часть пакета средств разработки Windows SDK.

Если изменение манифеста приложения невозможно, загрузите набор средств для обеспечения совместимости приложений — Application Compatibility Toolkit (ACT) 5.5, доступный для бесплатной загрузки с сайта Microsoft, и используйте Compatibility Administrator для создания исправления совместимости с помощью оболочки RunAsInvoker, а затем разверните полученную в результате базу данных на рабочих станциях. Для этого нужно сделать следующее.

  1. Войдите в систему Windows 7 как администратор и установите ACT.
  2. В меню «Пуск» откройте папку Application Compatibility Toolkit 5.5 и под заголовком Custom Databases на левой панели выберите New Database и нажмите Ctrl+R.
  3. Введите имя новой базы данных и нажмите «Ввод».
  4. Нажмите Ctrl+P для создания нового исправления приложения. В диалоговом окне Create New Application Fix введите имя исправляемой программы.
  5. Нажмите кнопку Browse, найдите исполняемый файл, к которому необходимо применить исправление, и нажмите Open. Для продолжения щелкните Next.
  6. На вкладке Compatibility Modes в Operating Systems выберите None и нажмите Next. На экране Compatibility Fixes прокрутите вниз меню и выберите исправление RunAsInvoker (экран 1).
  7. На данном этапе можно выбрать пробный запуск Test Run, чтобы убедиться в реализации желаемого эффекта созданного исправления на приложение. Для продолжения нажмите Next.
  8. В экране Matching Information можно выполнить точную настройку, регулирующую процесс определения исполняемого файла обработчиком совместимости. Оставляем установки по умолчанию и нажимаем кнопку Finish.
  9. Щелчком на значке Save в верхней части окна администратора совместимости (экран 2) сохраняем базу данных на диск C локального компьютера.
  10. В меню File выбираем Install и нажатием на OK подтверждаем установку базы данных. После этого становится возможным запуск целевого приложения без повышения прав.

Экран 1. Страница создания исправлений совместимости с выбором RunAsInvoker

Экран 2. Окно администратора совместимости

После основательного тестирования исправления совместимости можно осуществить его распространение. Для этого воспользуйтесь групповой политикой и пакетным файлом с командой sdbinst.exe.

UAC как периметр безопасности

По заявлению Microsoft, UAC — это функция безопасности, а не периметр безопасности. Хотя регистрация в системе под защищенной учетной записью администратора не обеспечивает периметр безопасности, учетная запись стандартного пользователя с включенной службой UAC предусматривает определенную защиту. Конфигурация UAC по умолчанию предусматривает включение так называемого повышения прав внутри сеанса пользователя, по типу over-the-shoulder (OTS). Если запуск UAC инициирован установщиком приложения либо если манифест приложения требует запуска исполняемого файла с правами администратора, система выдает запрос на ввод пароля администратора для продолжения. Этот процесс предусматривает переход в безопасный рабочий стол (изолированный от рабочего стола пользователя сеанс) для исключения вмешательства вредоносных программ. Защита представляется надежной, не правда ли?

Проблема OTS-повышения прав состоит в том, что вредоносные программы сами могут инициировать безопасный рабочий стол и украсть пароль администратора, вводимый ничего не подозревающим пользователем. Поэтому Microsoft рекомендует выключать повышение прав по типу OTS для учетных записей стандартных пользователей в групповой политике для снижения уязвимости в корпоративных средах.

Отключение повышения прав типа OTS означает также отключение возможности щелчком правой кнопки на исполняемом файле открывать меню и выбирать пункт «Запуск от имени администратора». Техническому персоналу это может показаться недостатком, однако остается возможность, удерживая Shift, щелкнуть правой кнопкой, открыть меню и выбрать пункт «Запуск от имени другого пользователя».

Альтернатива отключению повышения прав OTS — включение специального сочетания клавиш Secure Attention Sequence (SAS) в настройках групповой политики. При этом переход в безопасный рабочий стол происходит не автоматически, а путем ввода комбинации Ctrl+Alt+Del. Поскольку эмуляция специального сочетания клавиш исключается, а возможен лишь физический ввод указанной комбинации, пользователь может быть уверен, что безопасный рабочий стол — настоящий. Включение SAS можно выполнить с использованием параметра групповой политики «Требовать достоверный путь для регистрации с учетной записью» в Computer Configuration\Policies\Administrative Templates\Windows Components\Credential User Interface. Следует, однако, иметь в виду, что SAS представляет значительное неудобство, если повышение прав требуется регулярно.

Безопасность — не утопия

Windows 7, как никогда, облегчает работу пользователя. Однако увеличение числа пользователей, входящих в систему без прав администратора, повышает вероятность развития вредоносных программ, избирающих мишенью такие сеансы. Различные технологии, такие как политики ограниченного использования программ Software Restriction Policies, реализованные в Vista и более ранних версиях, и компонент AppLocker, имеющийся в Windows Server 2008 R2 и в некоторых выпусках Windows 7, могут применяться для составления белых списков приложений, что будет иметь важное значение для предотвращения воздействия вредоносных программ такого типа.

Рассел Смит (rms@russell-smith.net) — независимый ИТ-консультант, специализируется на управлении системами