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