다음을 통해 공유


가장 수준

가장에 성공하면 클라이언트가 어느 정도 서버가 클라이언트가 되도록 허용하기로 동의했음을 의미합니다. 다양한 수준의 가장을 가장 수준이라고 하며 클라이언트를 가장할 때 서버에 부여되는 권한을 나타냅니다.

현재는 익명, 식별, 가장 및 대리자 등 네 가지 가장 수준이 있습니다. 다음 목록에서는 각 가장 수준에 대해 간략하게 설명합니다.

anonymous(RPC_C_IMP_LEVEL_ANONYMOUS)

클라이언트가 서버에 대해 익명입니다. 서버 프로세스는 클라이언트를 가장할 수 있지만 클라이언트에 대한 정보가 가장 토큰에 포함되지는 않습니다. 이 수준은 로컬 interprocess 통신 전송을 통해서만 지원됩니다. 다른 모든 전송은 이 수준을 자동으로 승격하여 식별합니다.

identify(RPC_C_IMP_LEVEL_IDENTIFY)

시스템 기본 수준입니다. 서버가 클라이언트의 ID를 가져오고 클라이언트를 가장하여 ACL 검사를 수행할 수 있습니다.

impersonate(RPC_C_IMP_LEVEL_IMPERSONATE)

서버가 클라이언트의 보안 컨텍스트를 가장하여 클라이언트 역할을 대신 수행할 수 있으며, 클라이언트로 로컬 리소스에 액세스할 수 있습니다. 서버가 로컬인 경우 클라이언트로 네트워크 리소스에 액세스할 수 있습니다. 서버가 원격인 경우 서버와 동일한 컴퓨터에 있는 리소스에만 액세스할 수 있습니다.

대리자(RPC_C_IMP_LEVEL_DELEGATE)

가장 강력한 가장 수준입니다. 이 수준을 선택하면 로컬인지 원격인지 여부에 관계 없이 서버는 클라이언트의 보안 컨텍스트를 가장하여 클라이언트 역할을 대신 수행할 수 있습니다. 가장하는 동안 클라이언트의 자격 증명(로컬 및 네트워크 모두)을 임의의 수의 컴퓨터에 전달할 수 있습니다.

가장이 대리자 수준에서 작동하려면 다음 요구 사항을 충족해야 합니다.

  • 클라이언트는 가장 수준을 RPC_C_IMP_LEVEL_DELEGATE 설정해야 합니다.
  • 클라이언트 계정은 Active Directory 서비스에서 "계정이 중요하며 위임할 수 없음"으로 표시되어서는 안 됩니다.
  • 서버 계정은 Active Directory Service에서 "위임에 대해 신뢰할 수 있음" 특성으로 표시되어야 합니다.
  • 클라이언트, 서버 및 "다운스트림" 서버를 호스트하는 컴퓨터는 모두 도메인에서 실행 중이어야 합니다.

가장 수준을 선택하면 클라이언트는 클라이언트를 가장하는 데 얼마나 멀리 갈 수 있는지 서버에 알릴 수 있습니다. 클라이언트는 서버와 통신하는 데 사용하는 프록시에서 가장 수준을 설정합니다.

가장 수준 설정

가장 수준을 설정하는 방법에는 두 가지가 있습니다.

  • 클라이언트는 CoInitializeSecurity 호출을 통해 프로세스 전체로 설정할 수 있습니다.
  • 클라이언트는 IClientSecurity::SetBlanket (또는 도우미 함수 CoSetProxyBlanket)에 대한 호출을 통해 원격 개체의 인터페이스에서 프록시 수준 보안을 설정할 수 있습니다.

dwImpLevel 매개 변수를 통해 적절한 RPC_C_IMP_LEVEL_xxx 값을 CoInitializeSecurity 또는 CoSetProxyBlanket에 전달하여 가장 수준을 설정합니다.

다른 인증 서비스는 서로 다른 범위로 대리자 수준 가장을 지원합니다. instance 경우 NTLMSSP는 크로스 스레드 및 크로스 프로세스 대리자 수준 가장을 지원하지만 컴퓨터 간은 지원하지 않습니다. 반면 Kerberos 프로토콜은 컴퓨터 경계에서 대리자 수준 가장을 지원하지만 Schannel은 대리자 수준에서 가장을 지원하지 않습니다. 가장 수준에 프록시가 있고 가장 수준을 위임으로 설정하려는 경우 가장 수준을 제외한 모든 매개 변수에 대한 기본 상수를 사용하여 SetBlanket 을 호출해야 합니다. COM은 로컬로 NTLM 및 Kerberos 프로토콜을 원격으로 선택합니다(Kerberos 프로토콜이 작동하는 경우).

위임 및 가장