繁体   English   中英

Python posix IPC-以不同用户身份运行的进程之间的通信

[英]Python posix IPC - communication between process running as a different user

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

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

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

根进程是否可以创建IPC消息队列并允许在其他用户下运行的进程写入该队列? 如果可以,怎么办?

还是有替代POSIX IPC的替代方案(例如Sys V)? 我希望避免使用UNIX套接字,因为我不希望使用额外的开销。

-最新尝试的更新-

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

Linux编程接口(该库所依赖)声明同时使用模式和umask,但是即使我在消息队列设置中使用os.umask(000)和mode = 666,也仍然会从客户端拒绝权限。

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

可以使用文件系统权限来管理对基于文件系统的访问。 可以通过检查连接过程的凭据(PID / UID)来保护抽象名称空间中的域套接字,该安全性—另请参见:“ SCM_RIGHTS”。

域套接字非常快-Xorg使用了它们,因此内核开发人员已经对其进行了优化。 它们也比POSIX IPC(在Android上受支持)具有更高的可移植性。 基于流的模式对于面向消息的IPC可能有点尴尬,因此您应该考虑改用数据报模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM