【发布时间】:2016-06-01 09:22:26
【问题描述】:
我的目标是为守护进程创建一个概念,这些守护进程在本地(即不通过网络)与其他进程交互,所有进程都具有不同的用户 ID/权限。
为了将守护进程的访问权限限制为具有正确访问级别的进程,我采用了以下概念:
- 每个守护进程打开一个命名管道以读取
/foo/{daemon-name} - 可以通过正常的文件访问权限轻松管理对该命名管道的访问,因此不在正确用户组中的其他进程将没有对该管道的写访问权限
- 稍后更改对守护程序的访问权限很容易完成,无需重新编译
- 想要与守护进程通信的进程通过命名管道发送
socketpair()的一端,然后通过该链接继续通信
这样,每个守护进程都可以实现自己的 API 或数据包格式以通过套接字对进行通信。但是不需要身份验证等,因为对命名管道的访问权限已经处理了只有特定组能够发送套接字对进行通信。
现在我唯一的问题是我无法通过命名管道传输socketpair() 文件描述符。
sendmsg() 显然不适用于命名管道。
如何通过命名管道发送socketpair() fds 之一,以便守护程序可以访问连接并开始通信?
【问题讨论】:
-
您可以通过套接字传输文件描述符,但我认为使用命名管道无法做到这一点。考虑使用套接字与您的守护进程通信。
标签: c linux named-pipes file-descriptor