пятница, 19 августа 2016 г.

У ползунка UAC в действительности есть только две осмысленные позиции

Это перевод There are really only two effectively distinct settings for the UAC slider. Автор: Реймонд Чен.

В Панели управления вы можете указать как часто вы хотите получать уведомления от UAC. Сейчас у вас на выбор есть четыре уровня:
  • Всегда уведомлять
  • Уведомлять только при попытках приложений внести изменения на компьютер (затемнять рабочий стол)
  • Уведомлять только при попытках приложений внести изменения на компьютер (не затемнять рабочий стол)
  • Никогда не уведомлять
И хотя, на первый взгляд, может показаться, что эта опция имеет четыре позиции - на самом деле, тут всего два варианта:
  • Всегда уведомлять
  • А, плевать
Причина, по которой последние три варианта сворачиваются в "плевать", состоит в том, что все эти опции могут быть обмануты приложением, которое внедряется и выполняется в Проводнике Windows. Поскольку Проводник Windows является доверенным приложением и позволяет менять настройки системы скрытно (без показа диалога), то это означает, что вы также можете выполнить скрытую элевацию из любого потока, у которого есть права на внедрение кода в Проводник (а это - любой поток любой программы, выполняющейся со средним уровнем целостности, medium integrity level, или выше).

Другими словами, опция "Уведомлять только при попытках приложений внести изменения на компьютер" - на самом деле, является опцией "проткни дырку в герметичном шлюзе".

Но если промежуточные варианты фактически эквивалентны последнему, то почему они вообще были добавлены?

Потому что добавить их нас попросили наши пользователи.

Изначально UAC в Windows Vista имел только две позиции: "Всегда уведомлять" (включено по умолчанию) и "Никогда не уведомлять" (отключено) - ровно потому что только эти две позиции имеют смысл. Но люди начали невероятно громко жаловаться, что вариант "Всегда уведомлять" показывает диалог слишком часто¹ В результате уже в Windows 7 мы добавили два промежуточных уровня запросов, даже хотя они эквивалентны "Никогда не уведомлять", поскольку уведомление можно легко обойти из любого приложения.

Как заметил Ларри Остерман, UAC не является функцией безопасности. Это функция обучения разработчиков программ, которая заставляет разработчиков программ писать грамотные приложения с учётом разделения прав (прим. пер.: а пользователю - даёт удобство переключения между учётками).

Я помню, что тогда, в 2009, было много шума на тему "дыры в безопасности" в UAC, поскольку система позволяла вам изменить настройки UAC без показа диалога, если старая настройка была установлена в "Уведомлять только при попытках приложений внести изменения на компьютер".

Ну, ещё бы!

Вы же сами указали UAC, что ему следует показывать диалог только если какое-то приложение пытается поменять настройки системы (а не сама система). После этого вы используете Панель управления (aka систему) для изменения настройки. Ну и откуда тут взяться диалогу?

Т.е. люди продолжили возмущаться тем, что они хотели видеть больше диалогов, чем добавили разработчики системы. Мы думали, что пользователям не понравилось, что система показывала слишком много диалогов, поэтому мы добавили возможность показывать меньше диалогов, но теперь пользователи просят больше диалогов?! Вы уж как-бы решите что-то...

¹ Лично меня это не очень беспокоило. Ведь я же не провожу весь день меняя настройки системы. Фактически, моя основная учётная запись вообще не входит в группу администраторов. Поэтому, меня не только спрашивают каждый раз для элевации, но и когда я элевируюсь, то работаю не из под своей учётной записи, а из под локального администратора. Это также означает, что элевированный код не имеет доступа к сети домена (потому что доступ к домену есть только у моей учётной записи, но не у учётной записи локального администратора), и, наоборот, доменный аккаунт не имеет администраторского доступа². Это "разделение прав" сильно помогает сузить вред от любых моих идиотских ошибок, которые я мог бы совершить - любая команда, запущенная под администратором, не имеет доступа к сетевым ресурсам, поэтому испортить она может только мою личную машину.

² Удивительно, сколько программ впадают в ступор при виде такой дихотомии.

Прим. пер.: справедливости ради, следует сказать, что когда Vista только появилась, для неё не было программ. А программы для предыдущих версий Windows молчаливо полагали что они работают под администраторами. Иными словами, пока разработчики программ не переделали свои программы, показ диалога UAC был, действительно, очень частой операцией - в отличие от сегодняшнего дня, когда свою функцию обучения разработчиков программ UAC уже выполнил, так что программы показывают диалог UAC только действительно в самых необходимых ситуациях, но не более.

2 комментария:

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.