В
Windows Vista контроль учетных записей стал чуть ли не ругательным
словом, и многие пользователи отключали его первым делом. В Windows 7
ситуация изменилась к лучшему, и хотя с запросами UAC вы будете
сталкиваться, их количество во многом зависит от вашего подхода к
настройке системы и набора программ, установленных в ней. В этой статье
мы поговорим о работе с административными и ограниченными правами, а
также о том, как эффективно работать с включенным контролем учетных
записей.
С какими правами работать?
В Windows основная опасность работы с учетной записью администратора
заключается в том, что вредоносная программа, проникнув в систему,
выполняется с полными правами, что позволяет ей перехватить управление и
лишить пользователя контроля над системой. В Windows XP перейти к
работе с обычной учетной записью было не так просто, поскольку многие
настройки системы и, что даже важнее, приложения были рассчитаны только
на работу с правами администратора.
Назначение контроля учетных записей
Создавая контроль учетных записей в Windows Vista, Microsoft в первую
очередь стремилась к тому, чтобы разработчики программ начали создавать
их с оглядкой на права обычного пользователя. Главная идея состоит в
том, чтобы программы во время работы не требовали прав на запись в
системные папки и разделы реестра, ограничиваясь хранением данных в
профиле пользователя и доступных ему разделах реестра (HKCU). Намек был
понят, и за три с лишним года, прошедших с момента выхода Windows Vista,
стало видно, что большинство современных программ уже следует такой
практике. И это совершенно неудивительно, потому что программы тоже
нужно продавать, и делать это намного легче, если они полностью
совместимы с новыми операционными системами Microsoft.
Если программе не нужны административные права для работы, в
организации несложно реализовать ее установку – можно включить
программу в образ системы, либо развертывать любым подходящим способом.
Некоторые разработчики идут еще дальше, создавая приложения, которые
можно устанавливать без прав администратора. Например, я сейчас имею
отношение к выпуску огромной информационной системы, в которой
предусмотрена работа с ограниченными правами, т.е. у обычного
пользователя программный пакет целиком устанавливается в профиль, после
чего является полностью работоспособным.
Таким образом, UAC служит мостиком к переходу от повседневной работы с
учетной записью администратора к выполнению всех задач с ограниченными
правами, что обеспечивает более безопасную среду. ИТ-отдел организации
не будет без необходимости наделять пользователей правами
администратора, однако в домашних условиях дела обстоят иначе.
Администратор или пользователь?
Многие эксперты по безопасности рекомендуют выполнять повседневную
работу в системе с правами обычного пользователя, да и Microsoft в
справке Windows предлагает поступать именно так. Для корпоративной среды
этот совет абсолютно оправдан и находит широкое применение. Но в
домашних условиях ему следуют лишь те же эксперты, да пользователи, для
которых безопасность возведена в высшую степень. Архитектура Windows
такова, что при установке системы мы обязательно создаем
административную учетную запись, иначе в дальнейшем системой невозможно
будет управлять.
Рисунок 1 — При установке Windows создается административная учетная запись
А дальше мы входим в систему с этой учетной записью и начинаем
работу. И административные задачи приходится выполнять самостоятельно,
поскольку дома нет вездесущего сисадмина, как на работе. Конечно, можно
создать учетную запись с обычными правами и работать с ней, но Windows
устроена так, что удобнее постоянно иметь права администратора. Этот
комфорт в конечном итоге оказывается решающим фактором для большинства
пользователей. Контроль учетных записей как раз и предлагает компромисс
между работой обычным пользователем и неограниченным администратором.
Когда UAC работает, для получения полных прав необходимо запускать
программу от имени администратора, даже если вы работаете с
административной учетной записью.
Рисунок 2 — Запуск командной строки от имени администратора из контекстного меню
Это обусловлено тем, что при включенном контроле учетных записей
администратор и пользователь поставляются «в одном флаконе». У
административной учетной записи есть все необходимые права, но когда UAC
включен, абсолютно все задачи запускаются с правами обычного
пользователя. И происходит это до тех пор, пока для продолжения работы
не потребуются полные права администратора. Именно в этот момент и
появляется запрос контроля учетных записей, который служит сигналом о
том, что программе необходимы административные полномочия. Когда UAC
включен, вся разница между работой администратором и обычным
пользователем сводится к тому, что в первом случае для продолжения
работы вам достаточно нажать кнопку «Да», а во втором – потребуется
ввести пароль любого имеющегося в системе администратора.
Рисунок 3 — Командую строку от имени администратора запускают: администратор (слева) и обычный пользователь (справа)
Мимо контроля учетных записей, выдающего предупреждения, не проскочит
ни одна программа, требующая полных прав, а предупрежден – значит
вооружен, в чем и состоит информационная задача уведомлений UAC. При
повседневных же действиях нажать кнопку «Да», конечно, быстрее, чем
вводить пароль каждый раз, поэтому постоянная работа с ограниченными
правами менее комфортна и при этом не обладает значительными
преимуществами с точки зрения безопасности.
Администратор или встроенная учетная запись «Администратор»?
Регулярно читая форумы Windows Vista и Windows 7, я обратил внимание,
что некоторые пользователи мотивируют отключение контроля учетных
записей тем, что хотят быть полными хозяевами своей системы. Другими
словами, им претит тот факт, что запись в корень системного диска или
папку Windows сопряжена с дополнительными действиями, а запросы контроля
учетных записей вызывают страшную аллергию. На одну полку с ними можно
поставить поклонников популярной мифологии о всемогуществе встроенной
учетной записи «Администратор», чье единственное отличие от остальных
администраторов в том, что на нее по умолчанию не распространяется UAC. В
реальности отключение контроля учетных записей в панели управления
уравнивает всех администраторов
Интереснее же то, что с помощью групповой политики или реестра
несложно включить контроль даже для встроенного администратора. Это
может пригодиться, если вы, побыв какое-то время «богом», решили
спуститься с небес на землю и поработать с включенным UAC, не теряя при
этом уже настроенной пользовательской среды. Но при стандартных
параметрах системы работа с единственной учетной записью
«Администратор», конечно, эквивалента отключению UAC. Дальше мы
посмотрим, почему лучше этого не делать, и как эффективно работать с
включенным контролем учетных записей.
Резюме
Появление контроля учетных записей подтолкнуло разработчиков к
созданию программ, рассчитанных на работу с ограниченными правами.
Однако в домашних условиях мы самостоятельно выполняем административные
задачи, и в Windows 7 все-таки удобнее работать с правами
администратора. Отключение UAC или использование встроенной учетной
записью «Администратор» с точки зрения прав эквивалентно работе в
Windows XP и сопряжено с риском потери контроля над системой в случае
заражения. На мой взгляд, лучшее соотношение «безопасность / комфорт» в
Windows 7 достигается при работе администратором с включенным контролем
учетных записей.
Повышение прав с запросом UAC и без него
В Windows Vista я честно пытался работать с включенным контролем
учетных записей, и по большому счету в моих задачах он не особо докучал.
Но поскольку я регулярно отвечаю в технических форумах конференции
OSZone, мне постоянно приходится открывать различные элементы панели
управления, оснастки MMC и другие системные компоненты, чтобы посмотреть
настройки или просто дать точный путь к нужному элементу. В Windows
Vista большинство этих действий сопровождалось запросом UAC, что изрядно
напрягало, но в Windows 7 ситуация сильно изменилась.
Компоненты Windows 7
В Windows 7 контроль учетных записей был переработан, причем особое
внимание уделялось тем действиям, которые пользователи по статистике все
равно одобряли в подавляющем большинстве случаев. Новый стандартный
уровень контроля учетных записей позволяет настроить систему и выполнять
многие административные задачи без запроса. Это не означает, что UAC
для этих задач отключен, просто для компонентов Windows создан особый
уровень контроля, чтобы повышение прав происходило тихо, без диалогового
окна. Проще всего это продемонстрировать на примере панели управления.
Рисунок 4 — Запрос UAC не выводится, когда администратор переходит по ссылке со щитом в панели управления
В панели управления Windows 7 рядом с некоторыми ссылками и на
кнопках в окнах вы увидите щит, который в Windows Vista однозначно
свидетельствовал о том, что при нажатии последует запрос. Теперь его
нет, если вы работаете с правами администратора, но при работе с правами
обычного пользователя диалоговое окно, конечно, появится.
Отмечу, впрочем, что кое-где разработчики схитрили, спрятав
ненавистный запрос, но оставив дополнительный шаг. Примером может
служить настройка запроса пароля при пробуждении системы.
Рисунок 5 — Чтобы настроить недоступные параметры, придется нажать ссылку со щитом
Однако такие «хитрости» в панели управления встречаются нечасто, что
позволяет администратору беспрепятственно настроить множество параметров
системы.
Современные приложения
У Microsoft есть рекомендации не только для пользователей, но и для
разработчиков программ. Применительно к UAC один из главных советов –
это хранение настроек программы и предпочтений пользователя только в
расположениях, где для записи не требуются права администратора. В таком
случае они нужны только при установке программы, если производится
запись в системные папки (например, Program Files) и регистрация
компонентов в системе. Конечно, при этом выводится запрос контроля
учетных записей. Но в дальнейшем все пользовательские данные и параметры
программы хранятся в профиле, в папке %userprofile%\appdata. Там вы
найдете папки с данными установленных у вас программ, которые не требуют
прав администратора для работы.
Рисунок 6 – Современные приложения хранят пользовательские данные только в вашем профиле
Наличие трех папок объясняется так:
Roaming – в корпоративной среде данные из этой папки следуют за пользователем при использовании перемещаемых профилей;
Local – данные, объем которых слишком велик, чтобы перемещать их вместе с профилем;
LocalLow – данные, записанные процессами с низким уровнем целостности,
т.е. возможности которых по внесению изменений в систему максимально
ограничены.
Как я говорил выше, с момента выхода Windows Vista множество
приложений уже учитывает контроль учетных записей, и для работы им не
требуются полные права администратора. На самом деле, многим приложениям
они не нужны даже для установки, и в этом случае разработчикам нет
особого смысла требовать прав на запись в папку Program Files. Я думаю,
что некоторые авторы программ делают это просто по инерции, в то время
как другие уже перестроились.
Рисунок 7 – Поскольку для установки приложения не требуются права администратора, сразу предлагается поместить его в профиль
С новыми программами все довольно просто, но нередко в арсенале
обнаруживаются приложения, не вполне приспособленные для работы с
контролем учетных записей. Дальше я расскажу, что для решения этой
проблемы сделали в Microsoft, и что можете сделать вы.
Старые приложения
Старые приложения – это не только те, что давно не обновлялись, но и
те, что подразумевают наличие у пользователя прав на беспрепятственную
запись в системные папки и разделы реестра. Как это ни странно звучит,
при включенном контроле учетных записей совместимость старых приложений с
Windows 7 и Windows Vista улучшается. Это происходит потому, что UAC
позволяет компенсировать недостаток прав на запись в системные
расположения при работе администратором и обычным пользователем.
Виртуализация файлов и реестра
Разработчики UAC сразу понимали, что старые приложения уже не
научатся хранить данные в профиле, а будут пытаться записывать их в
папки Program Files или Windows (хотя последнее было дурным тоном еще в
ХР). Как я говорил выше, при включенном UAC даже у администратора
приложения запускаются с обычными правами, что означает отсутствие
разрешений на запись в системные расположения. Решение было придумано
оригинальное – система делает вид, что программе разрешена запись, а на
самом деле перенаправляет файлы в профиль, либо записывает параметры
реестра в специальный раздел. В дальнейшем программа продолжает
обращаться к этим данным, даже не подозревая об их реальном
расположении. Так в Windows Vista появилась виртуализация папок и
системного реестра, которую унаследовала и Windows 7.
Несмотря на недетский возраст этой технологии, о ней слышали
немногие. Это мы выяснили в конкурсе на знание Windows 7, который
проходил в конце 2009 года на OSZone.net. Там был задан вопрос о кнопке
«Файлы совместимости» в проводнике, и подавляющее большинство участников
ответило, что такой кнопки в Windows 7 не существует. Между тем, именно
с помощью этой кнопки вы можете увидеть папки, в которые программы
пытались записать данные, не имея на то разрешения. Это может вам
пригодиться, если вы захотите вручную сделать резервную копию настроек
программы или данных, которые она сохранила.
Рисунок 8 — Кнопка «Файлы совместимости» ведет в виртуальное хранилище
У меня эту кнопку проводник отображает уже в корне системного диска, а
нажав ее, я вижу папки с названиями Windows и Program Files, а также
какой-то архив. Обратите внимание на адресную строку проводника – я
перешел в уже знакомую папку AppData, а точнее – в виртуальное хранилище
(Virtual Store). Названия программ в папке Program Files мне знакомы –
это и есть старые приложения, работа которых не нарушилась благодаря
виртуализации файлов.
Давайте посмотрим, как это работает на практике (UAC не забудьте
включить). Откройте блокнот и попытайтесь сохранить текстовый файл в
корне системного диска или папке Windows. Вы сразу увидите сообщение о
недостатке прав и предложение сохранить в файл в профиле.
Рисунок 9 – Чтобы сохранять или изменять файлы в системных папках, «Блокнот» нужно запускать от имени администратора
Собственные программы Microsoft, конечно, спроектированы для работы
обычным пользователем, поэтому они знают, что делать при отсутствии
прав. Теперь возьмите, скажем, текстовый редактор Akelpad, в котором не
предусмотрено такое сообщение, и попробуйте сделать то же самое. Вместо
корня диска файл будет сохранен в виртуальном хранилище, и в дальнейшем
«обманутый» Akelpad будет видеть его именно в корне диска (а блокнот –
нет, ведь он туда ничего не записывал).
Рисунок 10 — Akelpad открывает «свой» файл из корня системного диска
(слева), хотя он расположен в виртуальном хранилище (справа)
Теперь понятно, откуда взялся Archive.zip в корне виртуального
хранилища. Я создал его в корне системного диска архиватором 7-zip,
причем неважно, из контекстного меню, либо просто запустив программу с
обычными правами. Система позволила выполнить операцию, но сохранила
файлы в профиль.
Виртуализация реестра происходит аналогично. Например, при попытке
записи в HKEY_LOCAL_MACHINE\Software\ProgramName происходит
перенаправление в раздел
HKEY_USERS\_Classes\VirtualStore\Machine\Software\ ProgramName, где
User_SID обозначает идентификатор пользователя, от чьего имени
выполняется действие. Кроме того, перенаправляются все попытки записи в
разделы, куда администратор имеет доступ, а обычный пользователь – нет.
Виртуализация файлов и реестра распространяется только на
32-разрядные приложения с графическим интерфейсом, т.е. службы не
виртуализируются.
При чем тут UAC?
С помощью виртуализации файлов и реестра обеспечивается совместимость
со старыми приложениями, и в первую очередь она нацелена на работу с
правами обычного пользователя. Если UAC отключен, администратор не
заметит разницы, поскольку права на запись в Program Files у него есть. А
вот обычных пользователей старая программа может огорчить очень быстро,
ведь прав на запись в системные расположения нет (хоть с UAC, хоть без
него), а перенаправить данные уже некому. Программа «ломается», т.е.
скорее всего, выводит сообщение из разряда «отказано в доступе».
При чем тут безопасность?
Представьте, что вредоносная программа скрытно пытается осуществить
запись в системную папку или раздел реестра. Раз она это делает,
безопасность вашей системы уже отчасти скомпрометирована – программа
проникла на компьютер, а антивирус на нее до сих пор не среагировал.
Благодаря виртуализации, ущерб не простирается дальше прав обычного
пользователя. Другими словами, действие вредоносного кода ограничивается
профилем, т.е. не распространяется на системные файлы и параметры.
Аналогично работает и защищенный режим в Internet Explorer, о котором
речь шла в третьей статье серии. И хотя виртуализация UAC не
задействуется для этого режима, ему необходим включенный контроль
учетных записей.
Таким образом, контроль учетных записей повышает не безопасность, а
устойчивость системы к заражению. Главное — вы не теряете над ней
контроль, а в этом случае намного проще устранить любую проблему.
Установка в профиль или получение полных прав на папку программы
Виртуализация файлов и реестра помогает в тех случаях, когда
приложение запускается с обычными правами (т.е. без запроса UAC), но в
процессе работы нуждается в правах администратора и при этом не умеет их
запрашивать. Существуют программы, которые уже при запуске проверяют
наличие прав на запись в собственную папку. Когда они установлены в
Program Files, права на запись отсутствуют, поэтому при запуске
появляется запрос UAC. В этом случае можно попробовать заставить
программу идти в ногу со временем, установив ее в профиль.
Альтернативный вариант – это получение полных прав на папку программы,
что может оказаться быстрее переустановки в профиль.
Кстати, все свои портативные приложения, которые по своей природе
хранят настройки в собственной папке, я держу именно в профиле. Причем
это даже удобнее, чем класть их в Program Files, поскольку не
задействуется виртуализация, отделяющая настройки программ от их
расположения.
Впрочем, иногда у программ, старых и новых, есть совершенно
оправданные причины для доступа к системным файлам и параметрам, поэтому
ни виртуализация, ни наличие полных прав на папку программы не поможет
избежать запроса. Дальше речь пойдет о программах для изменения
системных параметров.
Системные утилиты
Есть особая категория программ, назначение которых как раз в том,
чтобы отображать или изменять системные параметры, поэтому им
обязательно нужны полные права. И если вы любите «поковырять» систему, с
запросом UAC будете сталкиваться довольно часто. В зависимости от цели
программы, вы будете видеть запрос контроля учетных записей при каждом
ее запуске, либо только при выполнении действий, которые требуют наличия
полных прав.
На примере утилит Sysinternals Марка Руссиновича это легко
продемонстрировать. Process Explorer отображает массу информации о
системных процессах, но для ее сбора, очевидно, нужны полные права,
поэтому запрос выводится сразу. Утилита Autoruns, которая знает все об
автозагрузке системы, запускается с обычными правами, а запрос выводит
только в случае, когда вы изменяете параметры, требующие
административных полномочий.
Рисунок 11 – Утилите Autoruns нужны полные права для внесения изменений в системный раздел реестра
Когда с помощью Autoruns вы изменяете пользовательские параметры
(раздел HKCU), запрос не выводится, а при настройке системных параметров
на самом деле получается два запроса. Один выводит программа (рис. 11),
после чего требуется ее перезапуск, что ведет уже к появлению запроса
UAC (аналогично ведут себя сторонние файловые менеджеры при попытке
копирования файлов в системные папки). Это неудобно (лучше уж однажды
при запуске), но вполне решаемо, как мы увидим это чуть позже.
Командная строка и скрипты
Со встроенными программами Windows 7 тоже получается по-разному. При
открытии редактора реестра запрос появится сразу, даже если вы хотите
просто проверить наличие какого-нибудь параметра. Командная строка же
запускается с обычными правами, а при попытке выполнить в ней команду,
требующую полных прав администратора, выводится соответствующее
сообщение (рис. 12 слева).
Рисунок 12 – Из заголовка командой строки понятно, с какими правами
она запущена (слева с обычными правами, справа – от имени
администратора)
К сожалению, заранее не всегда известно, что для выполнения команды
нужны права администратора, и тогда приходится перезапускать командную
строку и заново вводить команду, а это — лишние действия. Можно немного
схитрить, разместив в системной папке утилиту elevate, которая позволяет
запросить повышение прав для программ из командной строки, которая
запущена с обычными правами.
Рисунок 13 – С помощью утилиты elevate для команды запрашивается повышение прав
Запрос контроля учетных записей при этом все равно появится, но время
все-таки экономится, т.к. не надо запускать новую командную строку от
имени администратора и повторно вводить команду. Достаточно нажать
стрелку вверх (повтор команды), затем клавишу Home (переход к началу
строки) и ввести elevate /k. Конечно, это полумера, но если вы часто
работаете с командной строкой, эту утилиту стоит иметь в арсенале.
И раз уж речь зашла о командной строке, нельзя обойти вниманием
скрипты, которые также часто приходится запускать с повышенными правами.
В контекстном меню Windows 7 возможность запуска от имени
администратора предусмотрена только для скриптов командного
интерпретатора, т.е. для bat и cmd. Однако с помощью набора утилит
Elevation PowerToys можно расширить список, добавив туда WSH и
PowerShell, а также возможность запуска скриптов от имени другого
пользователя, включая систему.
Наконец, существует способ, который позволяет сразу запускать с
полными правами не только командную строку, но и любую программу без
всякого запроса UAC.
Запуск программ без запроса UAC
Достаточно поработать с контролем учетных записей пару недель, чтобы
определить список приложений, при запуске которых появляется диалоговое
окно UAC. Для каждого из них можно создать ярлык, который будет
запускать программу без всякого запроса. Можно также создать ярлык для
командной строки и/или диалогового окна «Выполнить», откуда любые задачи
уже будут выполняться с полными правами администратора.
Это реализуется с помощью планировщика задач, который позволяет
запускать задания с наивысшими правами, которыми наделен пользователь.
Когда программу запускает администратор, она сразу получает полные
права, поэтому запрос не выводится (потолком обычного пользователя
остаются ограниченные права, конечно). Данный способ во всех
подробностях описан здесь моим коллегой, и там даже есть утилита, с
помощью которой можно создавать такие ярлыки перетаскиванием обычных
ярлыков программ. Конечно, можно выполнять приложения и автоматически
при запуске системы, если сразу указать это в планировщике или поместить
созданный ярлык в автозагрузку.
Заключение
Как видите, можно организовать свою повседневную работу в Windows 7
так, что контроль учетных записей будет почти незаметен, даже если вы
любите повозиться с системой. При ее настройке из панели управления
контроль UAC практически не докучает, благодаря изменениям, произошедшим
в Windows 7. В помощь любителям командной строки есть утилиты,
упрощающие запуск команд и скриптов от имени администратора, а запуск
любых программ без запроса можно настроить с помощью планировщика задач.