2016-09-04 12 views
2

私はプロトコルのためのサーバーを実装したい。セキュリティ上の理由から、パーサーはプログラムの残りの部分から独自のスレッドで分離され、双方向チャネルのみが通信のために開かれている必要があります。錆のプロセス分離

パーサースレッドは、他のスレッドのメモリを変更し、syscallsを実行する権限を失う可能性があります(seccompを使用)。

Rustのパーサースレッドでこの動作を実現する簡単な方法はありますか?

+4

[同時並行習慣の本](https://doc.rust-lang.org/book/concurrency.html)を読んだことがありますか?スレッドの安全性は、安全でないステートメントを記述していないときに、コンパイラーによってすでに保証されています。 –

+0

私は知っているが、私は安全なネットが欲しい。 – user3637203

+4

「セーフティネット」?正確にはどうなるのでしょうか?それはRust並行プログラミングのギャップをどのように埋めるでしょうか? –

答えて

2

Rustの強力な安全性とタイプシステム(例えば、それらのバグやサードパーティのライブラリなど)から保護できるもの以外の問題が懸念される場合は、 OS/CPUレベルで、信頼できないスレッドでseccompを使用しても、同じプロセス内の他のスレッドのメモリへの完全な書き込みアクセス権は引き続きあります。

どちらの方法でも、seccompで実行するように設計されたコードを書く必要があります(たとえば、余分なヒープメモリを割り当てると動作しないなど)がありますが、その良いコントロールはRustです。

いくつかの提案がありますが、合理的に役立つdiscussion on seccomp in Rustがあります。

最良のベットはより一般的なプロセスサンドボックス(seccompを含む)であるServoプロジェクトのgaolのようです。 this oneのようないくつかの下位レベルのseccompラッパーもあります。

私はまだこれを試していないので、私は他の視点/経験を聞くことに興味があります。