Уровни олицетворения (авторизация)
Перечисление 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 поток может указать, использует ли функция маркер олицетворения или основной маркер, чтобы определить, следует ли предоставить запрошенный доступ.