Linux DBus 通信

Posted

技术标签:

【中文标题】Linux DBus 通信【英文标题】:Linux DBus communication 【发布时间】:2015-06-02 03:13:29 【问题描述】:

在 Linux D-Bus 中:

    是什么阻止了进程 A 直接与进程 B 对话?为什么方法调用消息必须经过总线守护进程?

    为什么守护进程配置文件中的<policy> 部分有允许/拒绝拥有总线名称的选项?

    如果一个进程可以使用匹配规则来潜在地监视通过总线守护进程的任何消息,那么两个通信进程是否可以以任何方式表达任何限制,以使其他进程无法观察到它们的流量?

    为什么在documentation 中说给定的总线名称将始终引用同一个应用程序? - 机器重启后会这样吗?

对于 1:我目前的理解是,进程 A 和 B 要相互通信,都必须向总线守护进程注册一个总线名称。那么阻止 A 与 B 对话的唯一原因是它可能知道 B 的总线名称而无法在机器上找到它吗?

【问题讨论】:

Stack Overflow 是一个“问答”网站。请注意,“问题”和“答案”都是单数。这不是“这是我的一长串问题。回答它们。”地点。您似乎不是新来的 - 您是否需要回顾一下 help center 以作为复习? 【参考方案1】:

1 - 没有。使用总线要简单得多(服务和客户端都是 tcp 客户端,而不是服务器,更易于配置、管理名称等)

2 - 确保名称背后的服务是您信任的。否则恶意代码可能会请求名称并伪装成该服务。

3 - IMO 是的(虽然不完全确定)

4 - 名称 连接。一个进程可以拥有多个名称。自动名称不会重新分配给新连接(如果您重新连接它总是新名称)重新启动后您可以再次看到相同的名称,但在重新启动之间您可以假设随着时间的推移没有相同的名称分配给两个不同的连接(=竞争条件)

【讨论】:

对于 1:B 是否必须以某种方式允许这种通信? 是的,您需要在 A 或 B 中启动一些服务器并从客户端发起连接。我在这里有使用没有 dbus 守护程序的 dbus 传输的示例 - github.com/sidorares/node-dbus/tree/master/examples/p2p 对于 1:你提到 tcp .. D-bus 不是在下面使用 unix 域套接字吗? D-bus 为连接到它的进程保存了什么(例如位置?),以便它可以在将来到达该进程? ..谢谢。 对于3:我认为窃听=“真” | 中的“false”可能适用 很抱歉有这么多问题 .. 但是 D-bus .. 该政策使用的是 MAC 哲学,对吗?谁设置的?

以上是关于Linux DBus 通信的主要内容,如果未能解决你的问题,请参考以下文章

Linux DBus 通信

linux 进程间通信 dbus-glib实例详解二(上) 消息和消息总线(附代码)

linux 进程间通信 dbus-glib实例详解四(上) C库 dbus-glib 使用(附代码)(编写接口描述文件.xml,dbus-binding-tool工具生成绑定文件)(列集散集函数)

linux 进程间通信 dbus-glib实例详解二(下) 消息和消息总线(ListActivatableNames和服务器的自动启动)(附代码)

dbus和qtdbus

dbus和qtdbus