【问题标题】:How to get caller pid in zmq (local socket)如何在 zmq(本地套接字)中获取调用者 pid
【发布时间】:2014-10-29 14:04:35
【问题描述】:

我是 zmq 的新手。我在基于 Linux 的操作系统中使用相同的本地 IPC(套接字是 AF_UNIX 类型) 但我找不到获取调用者(客户端)进程 ID 的方法。有没有办法使用 zmq 找到相同的? (查找调用者的 pid 对于我的访问控制要求是必须的,如果 zmq 没有提供相同的,那么我应该切换到 dbus) 请帮帮我。

【问题讨论】:

    标签: linux sockets ipc zeromq


    【解决方案1】:

    忘记大多数低级插座设计和烦恼。在天空中想得更高。 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 等级)。

    【讨论】:

    • 因此您建议使用 SO_PEERCRED / SO_PASSCRED 进行套接字身份验证握手,然后继续使用实际的 zmq IPC。实际上,我希望 zmq 会为我提供某种内置实用程序来获取 pid。 (我猜 dbus 在内部也使用 SO_PASSCRED / SO_PEERCRED 进行套接字身份验证)。因此,要将 zmq 用于我的用例,我需要为套接字身份验证握手付出更多努力 :) 所以我想对于我的原型,我将继续使用 dbus。
    • 可惜你还没有尝试过 ZeroMQ。一个基本的 ZeroMQ / libzapi 读入将为您提供功能丰富的身份验证原语。 描述 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文化
    • czmq 看起来很有趣,我会尝试一下。 [我已经接受了你的方法作为答案,但是由于我的项目截止日期很严格,我不确定我是否可以使用它,可怜的我:),但是如果时间允许,zmq 将是首选]
    猜你喜欢
    • 2014-03-05
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多