Tom Ellis Asked: 2021-12-24 12:01:02 +0800 CST2021-12-24 12:01:02 +0800 CST 2021-12-24 12:01:02 +0800 CST 是否可以通过网络访问 Unix 套接字? 772 Linux沙盒应用程序firejail的文档说 每当我们处理 X11 时,我们还需要安装一个新的网络命名空间。这是阻止访问已在您的机器上运行的主 X11 服务器打开的抽象 Unix 套接字的唯一方法 这表明只能通过网络接口连接到 Unix 套接字,即实际上不能将其作为文件系统上的文件打开。这对我来说似乎很奇怪。它不是完全违背了将 Unix 域套接字作为文件许可的目的吗?真的有可能在无法访问文件系统的情况下访问 X 服务器的套接字吗? x11 socket 2 个回答 Voted Best Answer Steffen Ullrich 2021-12-24T12:33:17+08:002021-12-24T12:33:17+08:00 ... 阻止对抽象Unix 套接字的访问 普通的 UNIX 套接字和抽象的套接字是有区别的。普通的 UNIX 套接字绑定到文件系统中的一个路径,该路径的访问权限定义了套接字的访问权限。 相反,抽象的 UNIX 套接字独立于文件系统。这些套接字的地址位于它们自己的空间中,可以从本地机器上的其他进程访问,但不能从机器外部访问。 Petr 2022-08-19T00:50:18+08:002022-08-19T00:50:18+08:00 我将回答实际问题(谷歌在搜索答案时提供链接的标题中的问题,而不是您的 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 将在客户端上创建。当您写入/读取此套接字文件时,您实际上将使用网络与远程服务器上的套接字文件交谈。
普通的 UNIX 套接字和抽象的套接字是有区别的。普通的 UNIX 套接字绑定到文件系统中的一个路径,该路径的访问权限定义了套接字的访问权限。
相反,抽象的 UNIX 套接字独立于文件系统。这些套接字的地址位于它们自己的空间中,可以从本地机器上的其他进程访问,但不能从机器外部访问。
我将回答实际问题(谷歌在搜索答案时提供链接的标题中的问题,而不是您的 X11 评论)。
是的 - 可以通过网络访问 UNIX 套接字文件。您需要使用名为 socat 的工具,它可以使用包管理器轻松安装,并且在几乎所有流行的发行版上都可用(apt-get install socat / yum install socat)。
然后你需要在服务器上创建一个监听器:
在客户端,您需要使用以下命令创建套接字文件:
这将使主机 1.2.3.4 上的套接字文件可以使用端口 6644 通过网络使用。新的套接字文件 remote_socket 将在客户端上创建。当您写入/读取此套接字文件时,您实际上将使用网络与远程服务器上的套接字文件交谈。