![是否可以通过网络访问 Unix 套接字?](https://linux22.com/image/200126/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E7%BD%91%E7%BB%9C%E8%AE%BF%E9%97%AE%20Unix%20%E5%A5%97%E6%8E%A5%E5%AD%97%EF%BC%9F.png)
文档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。当您写入/读取此套接字文件时,您实际上将使用网络与远程服务器上的套接字文件进行通信。