서비스 및 RPC/TCP

Windows Vista부터 SCM(서비스 제어 관리자)은 RPC/TCP(Transmission Control Protocol) 및 명명된 파이프(RPC/NP)에 대한 원격 프로시저 호출을 지원합니다. 클라이언트 쪽 SCM 함수는 기본적으로 RPC/TCP를 사용합니다.

RPC/TCP는 원격 관리 또는 모니터링 도구와 같은 SCM 함수를 원격으로 사용하는 대부분의 애플리케이션에 적합합니다. 그러나 호환성 및 성능을 위해 일부 애플리케이션은 이 항목에 설명된 레지스트리 값을 설정하여 RPC/TCP를 사용하지 않도록 설정해야 할 수 있습니다.

서비스가 원격 SCM 함수를 호출할 때 클라이언트 쪽 SCM은 먼저 RPC/TCP를 사용하여 서버 쪽 SCM과 통신하려고 시도합니다. 서버가 RPC/TCP를 지원하고 RPC/TCP 트래픽을 허용하는 Windows 버전을 실행하는 경우 RPC/TCPP 연결이 성공합니다. 서버가 RPC/TCP를 지원하지 않거나 RPC/TCP를 지원하지만 명명된 파이프 트래픽만 허용하는 방화벽 뒤에서 작동하는 Windows 버전을 실행하는 경우 RPC/TCP 연결 시간이 초과되고 SCM이 RPC/NP와의 연결을 다시 시도합니다. 결국 성공하지만 시간이 다소 걸릴 수 있으며(일반적으로 20초 이상) OpenSCManager 함수가 차단된 것처럼 보일 수 있습니다.

TCP는 net use 명령으로 지정된 사용자 자격 증명을 전달하지 않습니다. 따라서 RPC/TCP를 사용하도록 설정하고 지정된 서비스에 액세스하는 데 sc.exe 사용하는 경우 액세스가 거부된 상태에서 명령이 실패할 수 있습니다. 클라이언트 쪽에서 RPC/TCP를 사용하지 않도록 설정하면 sc.exe 명령이 사용자 자격 증명을 전달하는 명명된 파이프를 사용하므로 명령이 성공합니다. sc.exe 대한 자세한 내용은 SC를 사용하여 서비스 제어를 참조하세요.

참고

이러한 자격 증명이 실수로 서비스 경계 외부에서 공유될 수 있으므로 서비스는 net use 명령에 명시적 자격 증명을 제공하지 않아야 합니다. 대신 서비스는 클라이언트 가장 을 사용하여 사용자를 가장해야 합니다.

 

RPC/TCP 레지스트리 값

RPC/TCP는 SCMApiConnectionParam, DisableRPCOverTCPDisableRemoteScmEndpoints 레지스트리 값에 의해 제어되며, 모두 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\제어 키 아래에 있습니다. 이러한 모든 값에는 REG_DWORD 데이터 형식이 있습니다. 다음 절차에서는 이러한 레지스트리 값을 사용하여 RPC/TCP를 제어하는 방법을 보여 줍니다.

다음 절차에서는 클라이언트 쪽에서 RPC/TCP를 사용하지 않도록 설정하는 방법을 설명합니다.

클라이언트 쪽에서 RPC/TCP를 사용하지 않도록 설정하려면

  1. SCMApiConnectionParam 레지스트리 값을 0x80000000 마스크 값과 결합합니다.
  2. OpenSCManager 함수를 호출하는 애플리케이션을 다시 시작합니다.

다음 절차에서는 서버 쪽에서 TCP를 사용하지 않도록 설정하는 방법을 설명합니다.

서버 쪽에서 TCP를 사용하지 않도록 설정하려면

  1. DisableRPCOverTCP 레지스트리 값을 1로 설정합니다.
  2. 서버를 다시 시작합니다.

다음 절차에서는 서버에서 RPC/TCP 및 RPC/NP를 모두 사용하지 않도록 설정하는 방법을 설명합니다(예: 공격 표면을 줄이기 위해).

서버에서 RPC/TCP 및 RPC/NP를 모두 사용하지 않도록 설정하려면

  1. DisableRemoteScmEndpoints 레지스트리 값을 1로 설정합니다.
  2. 서버를 다시 시작합니다.

SCMApiConnectionParam 레지스트리 값을 사용하여 RPC/TCP 제한 시간 간격(밀리초)을 지정할 수도 있습니다. 예를 들어 값 30,000은 30초의 제한 시간 간격을 지정합니다. 기본값은 21,000(21초)입니다.