Python posix IPC - 作为不同用户运行的进程之间的通信

时间:2017-09-03 09:27:51

标签: python python-3.x posix ipc root

我正在尝试使用POSIX IPC在Linux上建立两个不同进程之间的通信。我正在使用基于此库http://semanchuk.com/philip/posix_ipc/的posix消息队列的python 3。

问题是我想在以root身份运行的服务器和以普通用户权限运行的客户端(单独的python程序)之间进行通信。

如果客户端创建了消息队列,那么它可以工作,大概是因为它在普通用户下分配,并且在root下运行的进程具有更高的权限。但是我希望服务器创建消息队列,因为它可以在服务器终止时正确管理消息队列的关闭等。

根进程是否可以创建IPC消息队列并允许在不同用户下运行的进程写入队列?如果是这样的话?

或者是否可以替代POSIX IPC(例如Sys V)? 我希望避免使用UNIX套接字,因为我不想要使用额外的开销。

- 最新尝试更新 -

我已经阅读了我能找到的所有文档。图书馆自述文件说他们发现无论权限如何都可以使用,但这不是我的经验。

Linux编程接口(库所依赖的)声明同时使用mode和umask,但即使我在消息队列设置中使用os.umask(000)后跟mode = 666,我仍然会获得权限拒绝客户。

1 个答案:

答案 0 :(得分:0)

您可能想尝试使用Linux域套接字。

可以使用文件系统权限管理对基于文件系统的访问。可以通过检查连接过程的凭证(PID / UID)来保护抽象命名空间中的域套接字, - 另请参阅:" SCM_RIGHTS"。

域套接字非常快,它们被Xorg使用,因此内核开发人员已经很好地优化了它们。它们也比POSIX IPC(在Android上支持)更便携。基于流的模式可能有点难以用于面向消息的IPC,因此您应该考虑切换到数据报模式。