我正在尝试使用POSIX IPC在Linux上的两个不同进程之间建立通信。我正在使用基于这个库http://semanchuk.com/philip/posix_ipc/的posix消息队列的Python3。
问题是,我想要在以root身份运行的服务器和以普通用户权限(单独的python程序)运行的客户机之间进行通信。
如果客户端创建了消息队列,那么它就可以工作,大概是因为它是在普通用户下分配的,并且在root下运行的进程具有更高的权限。但是,我希望服务器创建消息队列,因为这样可以在服务器终止时正确地管理消息队列的关闭。
根进程是否可以创建一个IPC消息队列,并允许在不同用户下运行的进程写入该队列?如果是这样的话,是怎么做的?
或者是否有任何可以替代POSIX IPC的替代方案(例如,系统V)?我希望避免使用UNIX套接字,因为我不想要使用的额外开销。
--更新最近的尝试--
我已经阅读了我能找到的所有文档。图书馆的自述文件说,他们发现无论权限如何,它都可以工作,但这不是我的经验。
Linux编程接口(该库所依赖的)声明同时使用模式和umask,但是即使我在消息队列设置中使用os.umask(000)后跟mode=666,我仍然得到来自客户机的拒绝许可。
发布于 2017-09-03 17:56:39
您可能希望尝试Linux域套接字。
可以使用文件系统权限来管理对基于文件系统的文件系统的访问。抽象命名空间中的域套接字可以通过检查连接进程的凭据(PID/UID)来保护-另请参阅:"SCM_RIGHTS“。
域套接字非常快,Xorg使用了它们,所以内核开发人员对它们进行了很好的优化。它们也比POSIX IPC (在Android上受支持)更可移植。对于面向消息的IPC,基于流的模式可能有点笨拙,因此您应该考虑切换到数据报模式。
https://stackoverflow.com/questions/46022012
复制相似问题