Вадим Стеркин. Так ли страшен контроль учетных записей (UAC)?

Эта статья меня заинтересовала вот такими словами: "Как это ни странно звучит, при включенном контроле учетных записей совместимость старых приложений с Windows 7 и Windows Vista улучшается.".

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

Блочная цитата:

Современные программы

У Microsoft есть рекомендации не только для пользователей, но и для разработчиков программ. Применительно к UAC» один из главных советов – это хранение настроек программы и предпочтений пользователя только в расположениях, где для записи не требуются права администратора. В таком случае они нужны только при установке программы, если производится запись в системные папки (например, Program Files) и регистрация компонентов в системе. Конечно, при этом выводится запрос контроля учетных записей.

Но в дальнейшем все пользовательские данные и параметры программы хранятся в профиле, в папке %userprofile%\appdata. Там вы найдете папки с данными установленных у вас программ, которые не требуют прав администратора для работы.

Наличие трех папок объясняется так:

•Roaming – в корпоративной среде данные из этой папки следуют за пользователем при использовании перемещаемых профилей;

•Local – данные, объем которых слишком велик, чтобы перемещать их вместе с профилем;

•LocalLow – данные, записанные процессами с низким уровнем целостности, т.е. возможности которых по внесению изменений в систему максимально ограничены.

Как я говорил выше, с момента выхода Windows Vista множество приложений уже учитывает контроль учетных записей, и для работы им не требуются полные права администратора. На самом деле, многим приложениям они не нужны даже для установки, и в этом случае разработчикам нет особого смысла требовать прав на запись в папку Program» Files. Я думаю, что некоторые авторы программ делают это просто по инерции, в то время как другие уже перестроились.

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

Старые приложения

Старые приложения – это не только те, что давно не обновлялись, но и те, что подразумевают наличие у пользователя прав на беспрепятственную запись в системные папки и разделы реестра. Как это ни странно звучит, при включенном контроле учетных записей совместимость старых приложений с Windows 7 и Windows Vista улучшается. Это происходит потому, что UAC позволяет компенсировать недостаток прав на запись в системные расположения при работе администратором и обычным пользователем.

Виртуализация файлов и реестра

Разработчики UAC сразу понимали, что старые приложения уже не научатся хранить данные в профиле, а будут пытаться записывать их в папки Program» Files или Windows (хотя последнее было дурным тоном еще в ХР). Как я говорил выше, при включенном UAC даже у администратора приложения запускаются с обычными правами, что означает отсутствие разрешений на запись в системные расположения.

Решение было придумано оригинальное – система делает вид, что программе разрешена запись, а на самом деле перенаправляет файлы в профиль, либо записывает параметры реестра в специальный раздел.

В дальнейшем программа продолжает обращаться к этим данным, даже не подозревая об их реальном расположении. Так в Windows Vista появилась виртуализация папок и системного реестра, которую унаследовала и Windows 7.

Несмотря на недетский возраст этой технологии, о ней слышали немногие. Это мы выяснили в конкурсе на знание Windows 7, который проходил в конце 2009 года на OSZone.net. Там был задан вопрос о кнопке «Файлы совместимости» в проводнике, и подавляющее большинство участников ответило, что такой кнопки в Windows 7 не существует.

Между тем, именно с помощью этой кнопки вы можете увидеть папки, в которые программы пытались записать данные, не имея на то разрешения. Это может вам пригодиться, если вы захотите вручную сделать резервную копию настроек программы или данных, которые она сохранила.

Давайте посмотрим, как это работает на практике (UAC не забудьте включить). Откройте блокнот и попытайтесь сохранить текстовый файл в папке Windows. Вы сразу увидите сообщение о недостатке прав и предложение сохранить в файл в профиле.

Собственные программы Microsoft, конечно, спроектированы для работы обычным пользователем, поэтому они знают, что делать при отсутствии прав. Теперь возьмите, скажем, текстовый редактор Akelpad, в котором не предусмотрено такое сообщение, и попробуйте сделать то же самое. Вместо папки Windows файл будет сохранен в виртуальном хранилище, и в дальнейшем «обманутый» Akelpad будет видеть его именно в папке Windows (а блокнот – нет, ведь он туда ничего не записывал).

Теперь понятно, откуда взялся Archive.zip в корне виртуального хранилища. Я создал его в корне системного диска архиватором 7-zip, причем неважно, из контекстного меню, либо просто запустив программу с обычными правами. Система позволила выполнить операцию, но сохранила файлы в профиль.

Виртуализация реестра происходит аналогично. Например, при попытке записи в HKEY_LOCAL_MACHINE\Software\ProgramName происходит перенаправление в раздел HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software\ ProgramName, где User_SID обозначает идентификатор пользователя, от чьего имени выполняется действие. Кроме того, перенаправляются все попытки записи в разделы, куда администратор имеет доступ, а обычный пользователь – нет.

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

При чем тут UAC?

С помощью виртуализации файлов и реестра обеспечивается совместимость со старыми приложениями, и в первую очередь она нацелена на работу с правами обычного пользователя. Если UAC отключен, администратор не заметит разницы, поскольку права на запись в Program» Files у него есть. А вот обычных пользователей старая программа может огорчить очень быстро, ведь прав на запись в системные расположения нет (хоть с UAC, хоть без него), а перенаправить данные уже некому. Программа «ломается», т.е. скорее всего, выводит сообщение из разряда «отказано в доступе».

При чем тут безопасность?

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

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

Аналогично работает и защищенный режим в Internet Explorer, о котором речь шла в третьей статье серии. И хотя виртуализация UAC не задействуется для этого режима, ему необходим включенный контроль учетных записей.

Таким образом, контроль учетных записей повышает не безопасность, а устойчивость системы к заражению. Главное — вы не теряете над ней контроль, а в этом случае намного проще устранить любую проблему.

Установка в профиль или получение полных прав на папку программы

Виртуализация файлов и реестра помогает в тех случаях, когда приложение запускается с обычными правами (т.е. без запроса UAC), но в процессе работы нуждается в правах администратора и при этом не умеет их запрашивать. Существуют программы, которые уже при запуске проверяют наличие прав на запись в собственную папку.

Когда они установлены в Program» Files, права на запись отсутствуют, поэтому при запуске появляется запрос UAC. В этом случае можно попробовать заставить программу идти в ногу со временем, установив ее в профиль. Альтернативный вариант – это получение полных прав на папку программы, что может оказаться быстрее переустановки в профиль.

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

И раз уж речь зашла о командной строке, нельзя обойти вниманием скрипты, которые также часто приходится запускать с повышенными правами. В контекстном меню Windows 7 возможность запуска от имени администратора предусмотрена только для скриптов командного интерпретатора, т.е. для bat и cmd. Однако с помощью набора утилит Elevation PowerToys можно расширить список, добавив туда WSH и PowerShell, а также возможность запуска скриптов от имени другого пользователя, включая систему.

Наконец, существует способ, который позволяет сразу запускать с полными правами не только командную строку, но и любую программу без всякого запроса UAC.

Запуск программ без запроса UAC

Достаточно поработать с контролем учетных записей пару недель, чтобы определить список приложений, при запуске которых появляется диалоговое окно UAC. Для каждого из них можно создать ярлык, который будет запускать программу без всякого запроса. Можно также создать ярлык для командной строки и/или диалогового окна «Выполнить», откуда любые задачи уже будут выполняться с полными правами администратора.

Это реализуется с помощью планировщика задач, который позволяет запускать задания с наивысшими правами, которыми наделен пользователь. Когда программу запускает администратор, она сразу получает полные права, поэтому запрос не выводится (потолком обычного пользователя остаются ограниченные права, конечно). Данный способ во всех подробностях описан здесь моим коллегой, и там даже есть утилита, с помощью которой можно создавать такие ярлыки перетаскиванием обычных ярлыков программ. Конечно, можно выполнять приложения и автоматически при запуске системы, если сразу указать это в планировщике или поместить созданный ярлык в автозагрузку.

Конец блочной цитаты.

Полный текст статьи можно прочитать тут:

http://www.outsidethebox.ms/10034/

P.S. Всё это написано было для Windows7. А теперь попробуйте представить себе всяческие ограничения, которыми обвесили Windows10. Так стоит ли отключать контроль учётных записей, чтобы натыкаться на непонятные проблемы в дополнение к ухудшению контроля безопасности системы?

Для использующих чтецы экрана Microsoft рекомендует устанавливать UAC 66%. С таким уровнем контроля можно доверить защиту от вирусов встроенному Защитнику.