我注意到,在设置 opendkim 时,Socket 的选项是:
#SOCKET="local:/var/run/opendkim/opendkim.sock" # default
#SOCKET="inet:54321" # listen on all interfaces on port 54321
#SOCKET="inet:12345@localhost" # listen on loopback on port 12345
#SOCKET="inet:[email protected]" # listen on 192.0.2.1 on port 12345
local:[...].sock 套接字和 inet:[...]@localhost 套接字之间有什么区别(如果有的话)?用户权限是否对其中一个起作用?使用其中一个是否有安全优势?是否存在任何功能差异?
答案1
Opendkim 使用“local:”来指代 unix 域套接字、使用 inet: 来指代 inet 域(ipv4)套接字以及使用 inet6 来指代 inet6 域(ipv6)套接字。
Unix 域套接字是单台机器的本地套接字,监听的 Unix 域套接字位于文件系统层次结构中。可以通过文件权限控制访问,服务器应用程序可以检查哪个用户已连接(我不知道 opendkim 是否使用此功能)。还有一些特殊功能可用,但我认为它们与此无关。
inet 域套接字可以绑定到单个 ipv4 地址,也可以绑定到分配给机器的所有 ipv4 地址的 0.0.0.0 通配符。如果它绑定到 localhost (127.0.0.1),则只能由同一台机器上的应用程序访问,但您无法轻易对其进行更多限制。
inet6 域套接字可以再次绑定到单个 ipv6 地址,也可以绑定到分配给机器的所有 ipv6 地址的通配符“::”。在某些情况下(取决于 sysctl 配置和应用程序使用的套接字选项),监听所有接口的 inet6 套接字也可以接受 ipv4 连接。