我的目标是为守护进程创建一个概念,该守护进程在本地(即不通过网络)与其他进程交互,所有进程都具有不同的用户ID /权限。
要限制对具有正确访问级别的进程的守护程序的访问,我将遵循以下概念:
/foo/{daemon-name}
socketpair()
的一端,并通过该链接继续通信这样,每个dameon都可以实现自己的API或数据包格式,通过socketpair进行通信。但是不需要身份验证,因为对命名管道的访问权限已经只处理了能够发送socketpair进行通信的特定组。
现在唯一的问题是我无法转移socketpair()
文件descritor来处理命名管道。
sendmsg()
显然不适用于命名管道。
如何通过命名管道发送一个socketpair()
fds,以便守护程序可以访问连接并开始通信?
答案 0 :(得分:1)
命名管道不适用于您想要执行的操作 - 管道不保留有关其中数据来源的信息。它是原始数据位的管道,而不是像插槽这样的连接,它保留了有关数据来源和位置的更多信息。
Unix域套接字和命名管道不一样 - 它们具有不同的功能。 Unix域套接字可用于在进程之间发送文件描述符,命名管道不能。 为什么以这种方式实施它们是另一个问题。
由于您正在尝试在守护程序和客户端进程之间创建套接字连接,因此只需使用Unix域套接字即可直接获得此类连接。文件系统权限与Unix域套接字一样,就像命名管道一样。