Поделиться через


Уровни олицетворения (авторизация)

Перечисление SECURITY_IMPERSONATION_LEVEL определяет четыре уровня олицетворения, определяющие операции, которые сервер может выполнять в контексте клиента.

Уровень олицетворения Описание
SecurityAnonymous Сервер не может олицетворить или определить клиента.
SecurityIdentification Сервер может получить удостоверение и привилегии клиента, но не может олицетворить клиента.
SecurityImpersonation Сервер может олицетворить контекст безопасности клиента в локальной системе.
SecurityDelegation Сервер может олицетворить контекст безопасности клиента в удаленных системах.

 

Клиент именованного канала, RPC или DDE-соединения может управлять уровнем олицетворения. Например, клиент именованного канала может вызвать функцию CreateFile , чтобы открыть дескриптор именованного канала и указать уровень олицетворения сервера.

При удаленном подключении именованного канала, RPC или DDE флаги, передаваемые в CreateFile, чтобы задать уровень олицетворения, игнорируются. В этом случае уровень олицетворения клиента определяется уровнями олицетворения, включенными сервером, который устанавливается флагом учетной записи сервера в службе каталогов. Например, если сервер включен для делегирования, уровень олицетворения клиента также будет иметь значение делегирования, даже если флаги, переданные в CreateFile укажите уровень олицетворения идентификации.

Клиенты DDE используют функцию DdeSetQualityOfService со структурой SECURITY_QUALITY_OF_SERVICE для указания уровня олицетворения. Уровень securityImpersonation — это уровень по умолчанию для именованных каналов, RPC и DDE-серверов. Функции ImpersonateSelf, DuplicateTokenи функции DuplicateTokenEx позволяют вызывающему объекту указать уровень олицетворения. Используйте функцию GetTokenInformation, чтобы получить уровень олицетворения маркера доступа.

На уровне securityImpersonation большинство действий потока происходят в контексте безопасности маркера олицетворения потока, а не в основном маркере процесса , который владеет потоком. Например, если олицетворение потока открывает защищаемый объект, система использует маркер олицетворения для проверки доступа потока. Аналогичным образом, если олицетворение потока создает новый объект, например путем вызова функции createFile, владелец нового объекта является владельцем по умолчанию из маркера доступа клиента.

Однако система использует основной маркер процесса, а не маркер олицетворения вызывающего потока в следующих ситуациях:

  • Если олицетворение потока вызывает функцию CreateProcess, новый процесс всегда наследует основной маркер процесса.
  • Для функций, требующих привилегий SE_TCB_NAME, таких как функция LogonUser, система всегда проверяет привилегию в основном маркере процесса.
  • Для функций, требующих привилегий SE_AUDIT_NAME, таких как функция ObjectOpenAuditAlarm, система всегда проверяет привилегию в основном маркере процесса.
  • При вызове функции OpenThreadToken поток может указать, использует ли функция маркер олицетворения или первичный маркер, чтобы определить, следует ли предоставлять запрошенный доступ.