【发布时间】:2014-10-29 14:04:35
【问题描述】:
我是 zmq 的新手。我在基于 Linux 的操作系统中使用相同的本地 IPC(套接字是 AF_UNIX 类型) 但我找不到获取调用者(客户端)进程 ID 的方法。有没有办法使用 zmq 找到相同的? (查找调用者的 pid 对于我的访问控制要求是必须的,如果 zmq 没有提供相同的,那么我应该切换到 dbus) 请帮帮我。
【问题讨论】:
我是 zmq 的新手。我在基于 Linux 的操作系统中使用相同的本地 IPC(套接字是 AF_UNIX 类型) 但我找不到获取调用者(客户端)进程 ID 的方法。有没有办法使用 zmq 找到相同的? (查找调用者的 pid 对于我的访问控制要求是必须的,如果 zmq 没有提供相同的,那么我应该切换到 dbus) 请帮帮我。
【问题讨论】:
忘记大多数低级插座设计和烦恼。在天空中想得更高。 ZeroMQ 是一个相当高级的消息传递概念。因此,您对大多数 socket-io 问题的担忧都是零的。
有关这些 ZMQ 原则的更多信息,请阅读 Pieter Hintjens 的设计格言和他的资源丰富的书籍“Code Connected, Vol.1”。
也就是说,解决方案完全由您控制。
创建一个特定于问题的 multi-zmq-socket / multi-zmq-pattern(由您的应用程序级逻辑使用和编排的多个 zmq-primitives)作为特定于问题的正式通信握手。
确保<sender> 将它自己的PID 添加到消息中。
通过另一个 register/auth-socket-pattern 从receiver 侧使用预先注册的sender 重新/授权,以避免在伪造/被盗PID-identity 下进行欺骗攻击。
根据您的 ProblemDOMAIN 调整您的访问控制策略,使用和实施任何级别的加密安全正式握手协议以进行身份验证或密钥交换,以将您的访问控制策略安全性提高到足够的强度(包括 MIL- STD 等级)。
【讨论】:
A zauth object takes over authentication for all incoming connections in its context. Note that libzmq provides four levels of security: default NULL (which zauth does not see), and authenticated NULL, PLAIN, and CURVE, which zauth can see. ZeroMQ属于Can-Do文化