가장 수준(권한 부여)
SECURITY_IMPERSONATION_LEVEL 열거형은 서버가 클라이언트 컨텍스트에서 수행할 수 있는 작업을 결정하는 네 가지 가장 수준을 정의합니다.
가장 수준 | Description |
---|---|
SecurityAnonymous | 서버는 클라이언트를 가장하거나 식별할 수 없습니다. |
SecurityIdentification | 서버는 클라이언트의 ID 및 권한을 가져올 수 있지만 클라이언트를 가장할 수는 없습니다. |
SecurityImpersonation | 서버는 로컬 시스템에서 클라이언트의 보안 컨텍스트를 가장할 수 있습니다. |
SecurityDelegation | 서버는 원격 시스템에서 클라이언트의 보안 컨텍스트를 가장할 수 있습니다. |
명명된 파이프, RPC 또는 DDE 연결의 클라이언트는 가장 수준을 제어할 수 있습니다. 예를 들어 명명된 파이프 클라이언트는 CreateFile 함수를 호출하여 명명된 파이프에 대한 핸들을 열고 서버의 가장 수준을 지정할 수 있습니다.
명명된 파이프, RPC 또는 DDE 연결이 원격인 경우 가장 수준을 설정하기 위해 CreateFile 에 전달된 플래그는 무시됩니다. 이 경우 클라이언트의 가장 수준은 서버에서 사용하도록 설정된 가장 수준에 따라 결정됩니다. 이 가장 수준은 디렉터리 서비스의 서버 계정에 있는 플래그에 의해 설정됩니다. 예를 들어 서버가 위임에 사용하도록 설정된 경우 CreateFile 에 전달된 플래그가 식별 가장 수준을 지정하더라도 클라이언트의 가장 수준도 위임으로 설정됩니다.
DDE 클라이언트는 SECURITY_QUALITY_OF_SERVICE 구조와 함께 DdeSetQualityOfService 함수를 사용하여 가장 수준을 지정합니다. SecurityImpersonation 수준은 명명된 파이프, RPC 및 DDE 서버의 기본값입니다. ImpersonateSelf, DuplicateToken 및 DuplicateTokenEx 함수를 사용하면 호출자가 가장 수준을 지정할 수 있습니다. GetTokenInformation 함수를 사용하여 액세스 토큰의 가장 수준을 검색합니다.
SecurityImpersonation 수준에서 대부분의 스레드 작업은 스레드를 소유하는 프로세스의 기본 토큰이 아닌 스레드의 가장 토큰의 보안 컨텍스트에서 발생합니다. 예를 들어 가장 스레드가 보안 개체를 여는 경우 시스템은 가장 토큰을 사용하여 스레드의 액세스를 검사. 마찬가지로 가장 스레드가 CreateFile 함수를 호출하여 새 개체를 만드는 경우 새 개체의 소유자는 클라이언트의 액세스 토큰에서 기본 소유자입니다.
그러나 시스템은 다음과 같은 상황에서 호출 스레드의 가장 토큰이 아닌 프로세스의 기본 토큰을 사용합니다.
- 가장 스레드가 CreateProcess 함수를 호출하는 경우 새 프로세스는 항상 프로세스의 기본 토큰을 상속합니다.
- LogonUser 함수와 같이 SE_TCB_NAME 권한이 필요한 함수의 경우 시스템은 항상 프로세스의 기본 토큰에서 권한을 확인합니다.
- ObjectOpenAuditAlarm 함수와 같이 SE_AUDIT_NAME 권한이 필요한 함수의 경우 시스템은 항상 프로세스의 기본 토큰에서 권한을 확인합니다.
- OpenThreadToken 함수 호출에서 스레드는 함수가 가장 토큰을 사용하는지 또는 기본 토큰을 사용하여 요청된 액세스 권한을 부여할지 여부를 결정할 수 있습니다.