Rust 中的进程隔离

Process Isolation in Rust

我想为一个协议实现一个服务器。出于安全原因,解析器应在其自己的线程中与程序的其余部分隔离,并且应仅打开双向通道以进行通信。

解析器线程应该失去修改其他线程内存的任何可能性,并失去执行系统调用(使用 seccomp)的能力。

有没有一种简单的方法可以在 Rust 中为解析器线程实现这种行为?

如果您担心的问题超出了 Rust 强大的安全性和类型系统可以防止的范围(例如,这些问题或第三方库中的错误等),那么您真的需要单独的进程而不仅仅是线程;即使您在不受信任的线程上使用 seccomp,在 OS/CPU 级别,它仍然具有对同一进程中其他线程内存的完全写入访问权限。

无论哪种方式,您都需要在 seccomp 中仔细编写设计用于 运行 的代码(例如,分配额外的堆内存可能不起作用)——但好消息是 Rust 是一种很棒的语言控制!

有一个相当有用的 discussion on seccomp in Rust 其中有一些建议。

最好的选择看起来像 gaol from the Servo project, which is a more general process sandbox (including seccomp). There are also some other lower level seccomp wrappers like this one

我还没有尝试过这些,所以我很想听听其他的 viewpoints/experience。