我想为协议实现一个服务器。出于安全原因,解析器应在其自己的线程中与程序的其余部分隔离,并且应仅打开双向通道以进行通信。
解析器线程应该失去任何修改其他线程内存的可能性,并失去执行系统调用的能力(使用 seccomp)。
有没有一种简单的方法可以为 Rust 中的解析器线程实现这种行为?
我想为协议实现一个服务器。出于安全原因,解析器应在其自己的线程中与程序的其余部分隔离,并且应仅打开双向通道以进行通信。
解析器线程应该失去任何修改其他线程内存的可能性,并失去执行系统调用的能力(使用 seccomp)。
有没有一种简单的方法可以为 Rust 中的解析器线程实现这种行为?
如果您关心的问题超出了 Rust 强大的安全性和类型系统可以防止的问题(例如,这些问题或第三方库中的错误等),那么您真的需要单独的进程而不仅仅是线程;即使您在不受信任的线程上使用 seccomp,在操作系统/CPU 级别上,它仍然具有对同一进程中其他线程内存的完全写入访问权限。
无论哪种方式,您都需要仔细编写旨在在 seccomp 中运行的代码(例如,分配额外的堆内存可能不起作用) - 但好消息是 Rust 是一种很好的控制语言!
Rust 中有一个关于 seccomp 的相当有用的讨论,其中有一些建议。
最好的选择看起来像来自 Servo 项目的gaol,这是一个更通用的进程沙箱(包括 seccomp)。还有一些其他较低级别的 seccomp 包装器,例如这个。
我还没有尝试过任何这些,所以我很想听听任何其他观点/经验。