명명된 파이프 보안 및 액세스 권한

Windows 보안을 사용하면 명명된 파이프에 대한 액세스를 제어할 수 있습니다. 보안에 대한 자세한 내용은 Access-Control 모델을 참조하세요.

CreateNamedPipe 함수를 호출할 때 명명된 파이프에 대한 보안 설명자를 지정할 수 있습니다. 보안 설명자는 명명된 파이프의 클라이언트 및 서버 끝 둘 다에 대한 액세스를 제어합니다. NULL을 지정하는 경우 명명된 파이프는 기본 보안 설명자를 가져옵니다. 명명된 파이프에 대한 기본 보안 설명자의 ACL은 LocalSystem 계정, 관리자 및 작성자 소유자에게 모든 권한을 부여합니다. 또한 모든 사용자 그룹 및 익명 계정의 구성원에게 읽기 권한을 부여합니다.

명명된 파이프의 보안 설명자를 검색하려면 GetSecurityInfo 함수를 호출합니다. 명명된 파이프의 보안 설명자를 변경하려면 SetSecurityInfo 함수를 호출합니다.

스레드가 CreateNamedPipe를 호출하여 기존 명명된 파이프의 서버 끝에 대한 핸들을 열면 시스템은 핸들을 반환하기 전에 액세스 검사 수행합니다. 액세스 검사 스레드의 액세스 토큰과 요청된 액세스 권한을 명명된 파이프의 보안 설명자의 DACL과 비교합니다. 요청된 액세스 권한 외에도 DACL은 호출 스레드 FILE_CREATE_PIPE_INSTANCE 명명된 파이프에 대한 액세스를 허용해야 합니다.

마찬가지로 클라이언트가 CreateFile 또는 CallNamedPipe 함수를 호출하여 명명된 파이프의 클라이언트 끝에 연결하는 경우 시스템은 클라이언트에 대한 액세스 권한을 부여하기 전에 액세스 검사 수행합니다.

CreateNamedPipe 함수에서 반환되는 핸들에는 항상 SYNCHRONIZE 액세스 권한이 있습니다. 또한 파이프의 열린 모드에 따라 GENERIC_READ, GENERIC_WRITE 또는 둘 다 있습니다. 다음은 각 열린 모드에 대한 액세스 권한입니다.

열기 모드 액세스 권한
PIPE_ACCESS_DUPLEX(0x00000003) FILE_GENERIC_READ, FILE_GENERIC_WRITE 및 SYNCHRONIZE
PIPE_ACCESS_INBOUND(0x00000001) FILE_GENERIC_READ 및 SYNCHRONIZE
PIPE_ACCESS_OUTBOUND(0x00000002) FILE_GENERIC_WRITE 및 SYNCHRONIZE

 

명명된 파이프에 대한 FILE_GENERIC_READ 액세스는 파이프에서 데이터를 읽고, 파이프 특성을 읽고, 확장 특성을 읽고, 파이프의 DACL을 읽을 수 있는 권한을 결합합니다.

명명된 파이프에 대한 FILE_GENERIC_WRITE 액세스는 파이프에 데이터를 쓰고, 데이터를 추가하고, 파이프 특성을 작성하고, 확장 특성을 작성하고, 파이프의 DACL을 읽을 수 있는 권한을 결합합니다. FILE_APPEND_DATA 및 FILE_CREATE_PIPE_INSTANCE 정의가 같으므로 FILE_GENERIC_WRITE 파이프를 만들 수 있는 권한이 있습니다. 이 문제를 방지하려면 FILE_GENERIC_WRITE 사용하는 대신 개별 권한을 사용합니다.

개체의 SACL을 읽거나 쓰려는 경우 명명된 파이프 개체에 대한 ACCESS_SYSTEM_SECURITY 액세스 권한을 요청할 수 있습니다. 자세한 내용은 ACL(액세스 제어 목록)SACL 액세스 권한을 참조하세요.

다른 터미널 서비스 세션의 원격 사용자 또는 사용자가 명명된 파이프에 액세스하지 못하도록 하려면 파이프에 대한 DACL의 로그온 SID를 사용합니다. 로그온 SID는 실행 로그온에도 사용됩니다. 세션별 개체 네임스페이스를 보호하는 데 사용되는 SID입니다. 자세한 내용은 C++에서 로그온 SID 가져오기를 참조하세요.