네트워크를 통해 Unix 소켓에 액세스할 수 있습니까?

네트워크를 통해 Unix 소켓에 액세스할 수 있습니까?

문서Linux 샌드박스 애플리케이션 Firejail이 말합니다.

X11을 다룰 때마다 새로운 네트워크 네임스페이스도 설치해야 합니다. 이는 이미 컴퓨터에서 실행 중인 기본 X11 서버에서 열린 추상 Unix 소켓에 대한 액세스를 방지하는 유일한 방법입니다.

이는 네트워크 인터페이스를 통해서만 Unix 소켓에 연결할 수 있음을 보여줍니다. 즉, 실제로 파일 시스템에서 파일로 열 수는 없습니다. 나에게는 이것이 이상해 보인다. 이는 Unix 도메인 소켓을 파일로 라이센스하는 목적을 완전히 무효화하지 않습니까? 파일 시스템에 접근하지 않고도 X 서버의 소켓에 접근하는 것이 정말 가능합니까?

답변1

...액세스 차단추상적인유닉스 소켓

일반 UNIX 소켓과 추상 소켓에는 차이가 있습니다. 일반 UNIX 소켓은 파일 시스템의 경로에 바인딩되며 해당 경로의 액세스 권한은 소켓의 액세스 권한을 정의합니다.

대조적으로 추상 UNIX 소켓은 파일 시스템과 독립적입니다. 이러한 소켓의 주소는 자체 공간에 있으며 로컬 컴퓨터의 다른 프로세스에서 액세스할 수 있지만 컴퓨터 외부에서는 액세스할 수 없습니다.

답변2

실제 질문에 답변하겠습니다(Google은 답변을 검색할 때 X11 댓글이 아닌 질문 제목에 링크를 제공합니다).

예 - 네트워크를 통해 UNIX 소켓 파일에 액세스할 수 있습니다. 패키지 관리자를 사용하여 쉽게 설치할 수 있고 거의 모든 인기 배포판(apt-get install socat / yum install socat)에서 사용할 수 있는 socat라는 도구를 사용해야 합니다.

그런 다음 서버에 리스너를 생성해야 합니다.

socat TCP-LISTEN:6644,reuseaddr,fork UNIX-CONNECT:/path/to/socket/file

클라이언트에서는 다음 명령을 사용하여 소켓 파일을 생성해야 합니다.

socat UNIX-LISTEN:/tmp/remote_socket,fork,reuseaddr,unlink-early,user=file_owner,group=file_group,mode=770 TCP:1.2.3.4:6644

이렇게 하면 포트 6644를 사용하여 네트워크를 통해 호스트 1.2.3.4의 소켓 파일에 액세스할 수 있습니다. 새로운 소켓 파일인 remote_socket이 클라이언트에 생성됩니다. 이 소켓 파일에서 쓰거나 읽으면 실제로 네트워크를 사용하여 원격 서버의 소켓 파일과 통신하는 것입니다.

관련 정보