ptrace 最も明白なツールのようですが、それ以外は…
util-linux[-ng] にはコマンド unshare があります 、カーネルの clone を使用します /unshare インターフェイス。 unshare -nまで新しいプロセスを実行すると (または clone(CLONE_NEWNET) )、それが作成するすべてのネットワーク ソケットは、別の名前空間にあります。これはカーネル リソースの問題を解決しませんが、プロセスをサンドボックス化します。
Linux カーネルは、prctl(PR_SET_SECCOMP, 1) で入力されるモードである seccomp もサポートしています。 これにより、プロセス (実際にはスレッド) が read 以外のシステムコールを呼び出さなくなります 、 write 、 exit 、および sigreturn .これは非常に効果的なサンドボックスですが、変更されていないコードで使用するのは困難です。
socket を許可しない SELinux ドメインを定義できます /bind /等。呼び出し、その型への動的遷移を実行します。これには (明らかに) SELinux ポリシーを積極的に適用するシステムが必要です。 (おそらく、AppArmor と TOMOYO でも同様のことが可能ですが、私はそれらのどれにもあまり詳しくありません。)
systrace を見てみましょう - ソケットに限定されませんが、汎用の syscall ポリシー ジェネレーター/エンフォーサーです。引用:
GNU/Linux への移植が完了し、カーネル パッチが Marius Eriksen によって積極的に維持されています。 ptrace バックエンドを使用して、カーネルを変更せずに実行できます。
免責事項 - Linux で試したことはありません。