네트워크로 연결되지 않은 Unix 도메인 소켓이란 무엇입니까?

네트워크로 연결되지 않은 Unix 도메인 소켓이란 무엇입니까?

내가 읽고있다보안되지 않은 도커 데몬 공개

그것은 말한다

Docker daemon creates a non-networked Unix domain socket at /var/run/docker.sock 

네트워크로 연결되지 않은 Unix 도메인 소켓은 무엇을 의미합니까?

답변1

주소가 다음과 같은 소켓입니다.파일 시스템 경로어떤 형태의 네트워크 주소가 아닌 예를 들어, 와 같은 IP 주소:포트에 연결하는 대신 127.0.0.1:4567프로그램은 특수 파일에 "연결"합니다 /var/run/docker.sock.

(그러나 실제 API는 IP와 Unix 소켓 사이에서 거의 동일합니다. 프로그램은 두 유형 모두에 대해 동일한 소켓(), 바인드(), 연결() 호출을 사용합니다. 일반적인 API AF_UNIX대신 (또는 AF_LOCAL) 만 지정하면 됩니다. AF_INET[6]소켓 유형으로 인해 내부 통신에 매우 일반적으로 사용됩니다.최대Linux 시스템의 프로그램은 이러한 방식으로 통신합니다.)

소켓은 로컬로 실행되는 프로세스에만 액세스할 수 있기 때문에 "비네트워크"입니다. (NFS나 SSHFS를 통해서는 사용할 수 없습니다.) localhost에 바인딩할 수 있는 "IP 도메인" 소켓과 달리또는모든 주소(예: 포트 2375에서 외부에서 액세스할 수 있는 IP 소켓에 대해 설명하는 링크된 기사)에서 "Unix 도메인" 소켓은 로컬 전용이 보장됩니다.

(또한 Unix 소켓은 파일 권한을 사용하여 소켓에 대한 액세스를 제한할 수 있습니다(예: 'docker' 그룹의 구성원에게만). 데몬은 연결하는 모든 클라이언트의 UID를 알고 있습니다. 마지막으로 소켓에는 적절한 권한이 있습니다.이름따라서 동일한 포트를 두고 서로 다른 두 프로그램이 싸우는 일은 없을 것입니다…)

'도메인'이라는 용어는 인터넷의 '도메인 이름 시스템'과 아무 관련이 없으며 '영역' 또는 '영역'의 일반적인 의미로만 사용됩니다. 제가 아는 한 '유닉스 도메인'은 단순히 '영역'을 의미하는 것으로 여겨졌습니다. 로컬로 실행되는 OS"("인터넷에 연결된 모든 시스템"과 반대), 이 메커니즘이 있기 때문에소켓 API의 일부로실제로 원래 Unix 기능이었습니다. 더 나은 이름은 "로컬 소켓", 즉 AF_LOCAL이겠지만 그것은 지속되지 않았습니다.

Windows에는 "명명된 파이프"라는 매우 유사한 기능이 있습니다 \\.\pipe\docker_engine. Windows 명명된 파이프는 실제로 Unix 파이프보다 Unix 소켓과 더 유사하게 작동합니다. 그러나 Windows에서 명명된 파이프를 사용하려면 프로그램은 소켓을 사용하는 것과 비교하여 완전히 다른 API를 사용해야 하며(Win10에는 AF_UNIX 소켓도 있지만) 여전히 액세스가 가능합니다. SMB를 통한 보안되지 않은 파이프.

답변2

컨텍스트에 따르면 이는 호스트 외부(예: 로컬 및 외부 네트워크)에서 docker에 액세스할 수 없다는 의미입니다."루트 권한 또는 Docker 그룹 멤버십이 있는 [동일한 시스템의] 프로세스만 액세스할 수 있습니다."

관련 정보