Привилегии

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

  • Привилегии управляют доступом к системным ресурсам и задачам, связанным с системой, в то время как права доступа управляют доступом к защищаемым объектам.
  • Системный администратор назначает привилегии учетным записям пользователей и групп, в то время как система предоставляет или запрещает доступ к защищаемому объекту на основе прав доступа, предоставленных в ACE в списке DACL объекта.

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

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

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

API Windows определяет набор строковых констант, таких как SE_ASSIGNPRIMARYTOKEN_NAME, для определения различных привилегий. Эти константы одинаковы во всех системах и определены в Winnt.h. Таблицу привилегий, определенных Windows, см. в разделе Константы привилегий. Однако функции, которые получают и корректируют привилегии в маркере доступа, используют тип LUID для идентификации привилегий. Значения LUID для привилегии могут отличаться на разных компьютерах и от одной загрузки к другому на том же компьютере. Чтобы получить текущий LUID , соответствующий одной из строковых констант, используйте функцию LookupPrivilegeValue . Используйте функцию LookupPrivilegeName для преобразования LUID в соответствующую строковую константу.

Система предоставляет набор отображаемых имен, описывающих каждый из привилегий. Они полезны, если необходимо отобразить описание привилегии для пользователя. Используйте функцию LookupPrivilegeDisplayName , чтобы получить строку описания, соответствующую строковой константе для привилегии. Например, в системах, использующих английский язык (США), отображаемое имя привилегии SE_SYSTEMTIME_NAME — "Изменить системное время".

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

Системный администратор может использовать средства администрирования, такие как Диспетчер пользователей, для добавления или удаления привилегий для учетных записей пользователей и групп. Администраторы могут программно использовать функции локального центра безопасности (LSA) для работы с привилегиями. Функции LsaAddAccountRights и LsaRemoveAccountRights добавляют или удаляют привилегии из учетной записи. Функция LsaEnumerateAccountRights перечисляет привилегии, предоставляемые указанной учетной записью. Функция LsaEnumerateAccountsWithUserRight перечисляет учетные записи с указанными привилегиями.

Константы авторизации

Включение и отключение привилегий в C++