Обзор контроля учетных записей
Контроль учетных записей (UAC) — это функция безопасности Windows, предназначенная для защиты операционной системы от несанкционированных изменений. Если для внесения изменений в систему требуется разрешение на уровне администратора, контроль учетных записей уведомляет пользователя, предоставляя возможность утвердить или отклонить изменение. Контроль учетных записей повышает безопасность устройств с Windows, ограничивая возможности доступа вредоносного кода с целью исполнения прав администратора. Контроль учетных записей позволяет пользователям принимать обоснованные решения о действиях, которые могут повлиять на стабильность и безопасность устройства.
Если вы не отключили контроль учетных записей, вредоносные программы не могут отключать параметры контроля учетных записей или вмешиваться в их работу. Контроль учетных записей включен по умолчанию, и его можно настроить, если у вас есть права администратора.
Преимущества контроля учетных записей
UAC позволяет всем пользователям входить в свои устройства, используя учетную запись обычного пользователя. Процессы, запущенные с использованием токена обычного пользователя, могут выполнять разные задачи, используя предоставленные обычному пользователю права доступа. К примеру, проводник Windows автоматически наследует разрешения уровня обычного пользователя. Любые приложения, которые запускаются с использованием проводника Windows (например, путем открытия ярлыка), также выполняются со стандартным набором разрешений пользователя. Большинство приложений, включая содержащиеся в операционной системе, предназначены для работы с использованием этого способа.
Для успешной работы других приложений, например таких, которые не учитывают параметры безопасности, могут потребоваться дополнительные разрешения. Такие приложения называются устаревшими.
Когда пользователь пытается выполнить действие, требующее прав администратора, контроль учетных записей активирует запрос на согласие. Запрос уведомляет пользователя о том, что произойдет изменение, и просит предоставить разрешение на продолжение:
- Если пользователь утверждает изменение, действие выполняется с наивысшим доступным уровнем прав
- Если пользователь не утверждает изменение, действие не выполняется и приложение, запросившее это изменение, не будет запущено
Если для запуска приложения требуются повышенные права по сравнению с правами обычного пользователя, контроль учетных записей позволяет пользователям запускать приложения с токеном администратора (то есть с правами и разрешениями администратора) вместо стандартного токена обычного пользователя. Пользователи продолжают работать в контексте безопасности обычного пользователя, позволяя при необходимости запускать определенные приложения с повышенными правами.
Требования к выпуску и лицензированию Windows
В следующей таблице перечислены выпуски Windows, поддерживающие контроль учетных записей (UAC).
Windows Pro | Windows Корпоративная | Windows Pro для образовательных учреждений/SE | Windows для образовательных учреждений |
---|---|---|---|
Да | Да | Да | Да |
Права на лицензии контроля учетных записей (UAC) предоставляются следующими лицензиями.
Windows Pro/Pro для образовательных учреждений/SE | Windows Корпоративная E3 | Windows Корпоративная E5 | Windows для образовательных учреждений A3 | Windows для образовательных учреждений A5 |
---|---|---|---|---|
Да | Да | Да | Да | Да |
Дополнительные сведения о лицензировании Windows см. в статье Обзор лицензирования Windows.
Дальнейшие действия
- Как работает контроль учетных записей
- Параметры и конфигурация контроля учетных записей
UAC, давай дружить!
Технология UAC — не лишний компонент безопасности ОС Windows последних версий и пользователи приходят к этой мысли, борясь с malware и вирусами. Программистам, в свою очередь, стоит грамотно подходить к написанию приложений и принимать во внимание наличие такого «обстоятельства».
На хабре и вообще в сети много статей на тему «Как отключить UAC», «Как обойти UAC» и др. Но зачем отключать, функция ведь полезная? Зачем обходить, мы ведь не злоумышленники?
Ниже я расскажу как это делать в Вашем приложении.
Манифест
Для начала рассмотрим самый простой и некрасивый, по моему мнению, вариант — редактирование манифеста. Чем он плох? Тем, что подходит только для тех приложений, которым всегда нужно иметь привелегии администратора. Как это будет выглядеть? Пользователь при запуске вашего приложения получить знакомое окошко, в котором ему нужно будет подтвердить разрешение на выполнение программой действий с привилегиями администратора. И так каждый раз при запуске программы. В принципе, вариант приемлим для программ, которые запускаются нечасто и в одном экземпляре.
Сразу нужно сказать, что в автозапуск (не уверен, что всеми способами, но по крайней мере, через реестр) такие приложения помещать нельзя. Windows их просто прихлопнет на старте, не показав никакого окна UAC. Может быть, в этом случае есть смысл использовать технологии служб Windows.
Итак, реализация (взято отсюда)
- asInvoker — уровень прав текущего пользователя (процесса-родителя). Этот вариант устанавливается по-умолчанию.
- highestAvailable — наивысший уровень прав для текущего пользователя. Т.е. администратор получит полные права после подтверждения юзером кнопкой в окошке, обычный же пользователь ничего не получит.
- requireAdministrator — самый интересный вариант. Всегда запрашивает разрешение или ввод авторизационных данных администратора.
Другие решения
Проверка на наличе прав
В первую очередь после запуска приложения или в тех местах, где это требуется, нужно проверить не запущены ли мы уже с правами администратора (вдруг юзер уже отключил UAC). Если это так, то большинства последующих манипуляций можно будет избежать. Проверка делается просто (да, кстати, код здесь и дальше на C#):
public static bool IsAdmin()
Запуск процесса с запросом прав
Допустим, нет у нас прав. Что же дальше? Приложение, запущенное с какими-либо правами, не может их изменить в процессе своей работы. Для выполнения действий с повышенными привилегиями необходимо запускать новый процесс с запросом прав. Как вообще это сделать:
public static void RunAsAdmin(string aFileName, string anArguments) < System.Diagnostics.ProcessStartInfo processInfo = new System.Diagnostics.ProcessStartInfo(); processInfo.FileName = aFileName; processInfo.Arguments = anArguments; processInfo.UseShellExecute = true; processInfo.Verb = "runas"; // здесь вся соль System.Diagnostics.Process.Start(processInfo); >
Но какое же приложение запускать? Здесь могут быть варианты:
1. Запуск системного приложения с параметрами. Например, вам нужно стартануть службу или изменить значение в реестре. Можно воспользоватся WinAPI или его оберткой в классах .NET, но если ваше приложение не имеет привилегий, то ничего не получится. Для запуска службы DHCP Client, к примеру, можно воспользоватся командной строкой
sc.exe start dhcp
Это самый простой и приятный вариант для выполнения служебных действий с системой, но не всегда все так просто.
2. Запуск собственного дополнительного приложения с параметрами. Допустим, вам ну очень нравится использовать WinAPI и не хочется разбиратся с системными утилитами или ваша задача не столь банальна, как приведенная выше. В таком случае вы можете написать маленькую консольную утилиту, которая будет выполнять нужные вам действия. Но это и лишние затраты времени, и необходимость поддержки дополнительной утилиты, интерфейсов взаимодействия и т.д.
2а. Дополнительное приложение может запускатся только один раз и продолжать висеть в памяти. Организовав общение с ним из основного приложения, вы можете выполнять нужные вам административные задачи без последующих запросов прав. Но это еще более сложный вариант. Опять же таки, в этом случае есть смысл посмотреть в сторону служб Windows в качетсве дополнительного приложения, которые по-умолчанию запускаются с привилегиями администратора.
3. Запуск еще одного экземпляра основного приложения с параметрами. Допустим, у вас есть пять простых действий, которые нужно выполнять с правами администратора. Забейте для них параметры командной строки вашего же приложения и на запуске проверяйте их наличие. Получив какой-либо из этих параметров, выполните соответствующее действие и завершите работу. Данный вариант, судя по StackOverflow является самым распространенным, по скольку код остается в рамках одного приложения, да и реализуется все просто.
4. Введение двух режимов работы приложения. Если приложению права администратора необходимы редко, то стоит ввести два режима работы: обычный и привилегированый. В обычном режиме (а мы это определяем с помощью указанной выше функции IsAdmin()) операции, требующие права администратора, остаются заблокированными, но у пользователя появляется возможность перезапустить приложение с правами админа и получить доступ к забокированному функционалу. В привилегированном режиме (IsAdmin() возвращает true) мы не блокируем функционал.
Таким образом, запрос появляется перед пользователем только один раз и в процессе подальшей работы с приложением больше не будет отвлекать. Если же пользователь отключил UAC, то об «обычном» режиме он даже не узнает.
Данный подход требует немного усилий на начальном этапе, но дальше позволяет писать приложение без каких-либо ограничений и вынесений кода в другие программы и блоки. Небольшой пример будет рассмотрен ниже.
Оформление приложений
Всем нам хочется писать стильные и красивые оконные приложения и в вопросах использования UAC без фирменного щитка на контролах ну никак не обойтись.
Такой щит размещается на кнопках, link-label’ах или других элементах управления, после нажатия на которые пользователь увидит запрос от UAC. К счастью, нам не придется таскать повсюду картинку, поскольку в системе, как ни странно, она уже есть и ее можно получить.
Для WinForms-приложений можно указать системе разместить иконку щита на кнопке.
[DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern IntPtr SendMessage(HandleRef hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); public static void SetButtonShield(Button btn, bool showShield) < // BCM_SETSHIELD = 0x0000160C btn.FlatStyle = FlatStyle.System; SendMessage(new HandleRef(btn, btn.Handle), 0x160C, IntPtr.Zero, showShield ? new IntPtr(1) : IntPtr.Zero); >
Для тех, кто уже отказался от WinForms и перешел к разработке приложений с помощью WPF, также есть решение. Для того, чтобы получить ImageSource иконки и указать ее в каком-либо контроле, можно использовать следующий код.
System.Drawing.Icon img = System.Drawing.SystemIcons.Shield; System.Drawing.Bitmap bitmap = img.ToBitmap(); IntPtr hBitmap = bitmap.GetHbitmap(); ImageSource wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
Пример
Рассмотрим теперь маленький пример, реализующий изложенные выше принципы.
В приложении имеется кнопка, которая должна выполнять действия с правами администратора (у меня она просто отображает MessageBox). Если приложение уже запущено с правами, то мы оставляем ее доступной. Если же нет, кнопку блокируем и отображаем панельку с предупреждением и другой кнопкой, позволяющей перезапустить приложение в привилегированном режиме. На кнопке отображаем православную иконку щита.
Кроме того, окно приложения после перезапуска отображается в том же месте и с теми же размерами благодаря передаче контекста через командную строку.
Конечно, пример простейший, но он в общих чертах демонстрирует самый близкий мне подход к решению проблемы взаимодействия с UAC. Код примера на github.
Буду рад услышать ваши замечания, коментарии и пожелания.
Включение, настройка и отключение User Account Control (UAC)
В современных версиях Windows существует много инструментов, которые предназначены для обеспечения безопасности. Один из них — User Account Control, что в переводе означает «Контроль учётных записей». Он выдаёт окно с предупреждением, если какая-то программа или процесс пытается внести несанкционированные изменения в систему. И надо либо разрешить запуск утилиты, либо отменить его. Разберитесь, для чего нужен UAC Windows 7, как отключить его, как активировать и как настроить.
В этой статье мы расскажем, как включить UAC в Виндовс
Что такое UAC и зачем он нужен?
Многих пользователей раздражают такие уведомления. Ведь приходится каждый раз подтверждать, что вы согласны на установку нового приложения. Но контроль учётных записей служит для защиты от вредоносного ПО: вирусов, шпионов, рекламщиков. Он не заменит антивирус, сетевой экран или firewall. Но без этой функции Windows будет уязвима.
Если отключить UAC, компьютер окажется под угрозой. Не стоит деактивировать Account Control без причин. Иначе абсолютно любая программа сможет менять настройки системы, устанавливать свои дистрибутивы и запускать их. И всё это без ведома пользователя.
Контроль учётных записей можно настроить, чтобы он не был таким «надоедливым», и оповещение не выскакивало при запуске любой программы. Но рекомендуется оставить эту функцию в активном состоянии, чтобы защитить ПК.
Панель управления
Отключение UAC Windows 7 выглядит так:
- Пуск — Панель управления.
- «Учётные записи пользователей».
- «Изменение параметров учётных записей».
- Откроется окно с описаниями и ползунком. Передвигайте его, чтобы задать желаемые настройки. С правой стороны будет пояснение к выбранной опции.
- Там есть четыре отметки. Верхняя «Всегда уведомлять» означает, что диалоговое окно-предупреждение будет всплывать при запуске абсолютно любой программы.
- Если вам нужно полностью отключить UAC, передвиньте «каретку» на нижнее деление «Никогда не уведомлять». Но тогда риск заражения вирусными программами увеличится, и Windows будет под угрозой.
- Лучше оставить ползунок где-то посередине. Чтобы контроль учётных записей уведомлял вас, только когда приложение пытается что-то поменять в системе. Если поставите прямоугольник на третью позицию, при появлении сообщения картинка на мониторе будет темнеть. Если поставите на второе деление, дисплей темнеть не будет.
Настройте, в каких случаях показывать уведомления
Войти в это меню и отключить UAC можно и быстрее.
- Нажмите «Пуск».
- Кликните на изображение вашей учётной записи наверху.
В Windows Vista такого ползунка нет. Соответственно, детальная настройка функции невозможна. Доступно только включение и отключение режима.
Групповые политики
Ещё один метод взаимодействия с Account Control — редактор групповой политики. Этот способ подойдёт не для всех версий операционной системы. Только для Профессиональной, Максимальной и Корпоративной Windows.
Чтобы отключить UAC:
- Перейдите в «Пуск — Выполнить» или нажмите Win+R.
- Напишите в поле для ввода «secpol.msc» без кавычек и кликните на «OK».
- Раскройте иерархию «Локальные политики — Параметры безопасности».
- В списке справа найдите пункты «Контроль учётных записей». Там их несколько.
- Вам нужен тот, который заканчивается словами «Все администраторы работают в режиме одобрения». Дважды щёлкните по нему.
- На вкладке «Параметры безопасности» поставьте маркер рядом с пунктом «Отключение».
- Нажмите «Применить», закройте редактор и перезагрузите компьютер.
Запустите редактор групповой политики
Снова включить Account Control можно в том же меню.
Редактор реестра
Перед тем как что-то менять в реестре, надо сделать его резервную копию. Чтобы в случае возникновения неполадок его быстро восстановить.
- Перейдите в «Пуск — Выполнить» или нажмите Win+R.
- Введите «regedit» и нажмите «OK».
- В появившемся окне откройте «Файл — Экспорт».
- Укажите путь к папке, в которой надо сохранить бэкап.
Вот как в Windows 7 отключить контроль учётных записей UAC:
- В редакторе реестра откройте «Правка — Найти».
- Запустите поиск по запросу «EnableLUA».
- В результатах выберите строчку с таким же названием. Дважды кликните по ней.
- В поле «Значение» напишите цифру «0» (ноль), чтобы остановить работу службы.
- Чтобы снова включить UAC, поменяйте «0» на «1» (единицу).
- Нажмите «OK» и перезапустите ПК.
Командная строка
Отключение Account Control при помощи команд:
- Пуск — Программы — Стандартные.
- Кликните правой кнопкой мыши по «Командная строка».
- Выберите «От имени администратора». Откроется окно с чёрным фоном и белым шрифтом.
- Скопируйте в него команду «%windir%\System32\cmd.exe /k %windir%\System32\reg.exe ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f» и нажмите
- Она меняет параметры реестра. Через него можно вновь активировать режим.
Account Control — это необходимая мера безопасности. Отключайте её только в крайнем случае.
Расскажите, а у вас работает UAC, или вы обходитесь без него?
При подготовке материала использовались источники:
https://learn.microsoft.com/ru-ru/windows/security/application-security/application-control/user-account-control/
https://habr.com/ru/articles/185264/
https://nastroyvse.ru/opersys/win/kak-vklyuchit-uac-v-windows.html