是否可以通过网络访问 Unix 套接字?

是否可以通过网络访问 Unix 套接字?

文档Linux 沙盒应用程序 firejail 说

每当我们处理 X11 时,我们还需要安装一个新的网络命名空间。这是阻止访问由已在您的机器上运行的主 X11 服务器打开的抽象 Unix 套接字的唯一方法

这表明可以仅通过网络接口连接到 Unix 套接字,即实际上无法将其作为文件系统上的文件打开。这对我来说似乎很奇怪。这不是完全违背了将 Unix 域套接字作为文件进行许可的目的吗?是否真的可以在无法访问文件系统的情况下访问 X 服务器的套接字?

答案1

...阻止访问抽象的Unix套接字

普通 UNIX 套接字和抽象套接字之间是有区别的。普通的UNIX套接字绑定到文件系统中的一个路径,该路径的访问权限定义了套接字的访问权限。

相反,抽象 UNIX 套接字独立于文件系统。这些套接字的地址位于它们自己的空间中,可以从本地计算机上的其他进程访问,但不能从计算机外部访问。

答案2

我将回答实际问题(谷歌在搜索答案时给出链接的标题中的问题,而不是您的 X11 评论)。

是的 - 可以通过网络访问 UNIX 套接字文件。您需要使用名为 socat 的工具,它可以使用包管理器轻松安装,并且在几乎所有流行的发行版上都可用(apt-get install socat / yum install 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

这将使主机 1.2.3.4 上的套接字文件可通过网络使用端口 6644 访问。将在客户端上创建新的套接字文件remote_socket。当您写入/读取此套接字文件时,您实际上将使用网络与远程服务器上的套接字文件进行通信。

相关内容