我正在阅读《揭露不安全的 docker 守护进程》
它说
Docker daemon creates a non-networked Unix domain socket at /var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)
非联网Unix域套接字表示什么?
use*_*686 22
它是一个套接字,其地址是文件系统路径而不是某种形式的网络地址。例如,127.0.0.1:4567程序将“连接”到特殊文件 ,而不是连接到 IP 地址:端口(例如 ) /var/run/docker.sock。
(然而,IP 和 Unix 套接字之间的实际 API 几乎相同 \xe2\x80\x93 程序对这两种类型使用相同的 socket()、bind()、connect() 调用。它们只需要指定(AF_UNIX或 AF_LOCAL)通常的AF_INET[6]套接字类型。这使它们成为内部通信的非常常见的选择。事实上,Linux 系统上的大多数程序都以这种方式进行通信。)
它是“非网络化”的,因为套接字只能由本地运行的进程访问。(您不能通过 NFS 或 SSHFS 使用它。)与可以绑定到 localhost或任何地址的“IP 域”套接字不同(例如在链接的文章中讨论端口 2375 上的外部可访问 IP 套接字),“Unix域”套接字保证仅是本地的。
\n(此外,Unix套接字可以使用文件权限来限制对套接字\xe2\x80\x93的访问,例如仅限“docker”组\xe2\x80\x93的成员,并且守护进程知道每个连接客户端的UID。最后,当然,套接字有一个正确的名称,因此不会有两个不同的程序争夺同一端口\xe2\x80\xa6)
\n“域”一词与互联网的“域名系统”无关,仅用于一般意义上的“领域”或“区域” \xe2\x80\x93 据我所知,“Unix 域”只是应该意味着“本地运行的操作系统”(而不是“连接到互联网的所有机器”),因为将此机制作为套接字 API 的一部分确实最初是 Unix 功能。更好的名称是“本地套接字”,即 AF_LOCAL,但这并不适用。
\nWindows 有一个非常相似的功能,称为“命名管道”,例如\\\\.\\pipe\\docker_engine. Windows 命名管道确实比 Unix 管道 \xe2\x80\x93 更像 Unix 套接字,但是,与使用套接字相比,程序仍然需要使用完全不同的 API 在 Windows 上使用命名管道(尽管 Win10 也有 AF_UNIX 套接字),并且仍然可以通过 SMB 访问不安全的管道。
| 归档时间: |
|
| 查看次数: |
2354 次 |
| 最近记录: |