特定进程通过 mmap() 共享内存

Specific processes sharing memory via mmap()

我的问题很简单如何在允许读写内存的进程之间共享内存。主要的是只有特定进程(例如特定 PID)应该能够共享该内存。并非所有进程都应该有共享内存的能力。

一种选择是使用标准的 Sys V IPC 共享内存。调用 shmget() 后,使用 shmctl() 设置权限。仅向一个 group/user 授予读写权限,并启动允许以特定用户身份访问此权限的进程。可以使用 ipcs 找到共享内存密钥和 ID,您需要信任基于标准 unix user/group 的安全性来完成这项工作。

另一种选择是实现共享内存驱动程序。类似于 Android ashmem。在驱动程序中,您可以验证尝试访问内存的调用者的 PID/UID 和基于过滤器的请求 allow/deny 。您还可以实现一个 sysfs 条目来修改这些过滤器。如果过滤器需要可配置,您需要再次信任基于 Unix user/group 的安全性。如果您正在实施驱动程序,您将有很多安全选项