私はLinux用のリモートデスクトップ/ストリーミングプログラムを開発しています。ユーザーがログインしたときに起動するプログラムを指定すると、リモートサーバーはそのプログラムを新しいプロセスとして起動します。サーバープロセスはWaylandコンポジターとして機能するため、サブプロセスは画面外で(サーバーの他のユーザーの観点から)実行され、コンポジターから入力を受け取ります。
これは単純なアプリケーションではうまく機能しますが、Steam(このユースケースでは重要なアプリケーション)などの多くのデスクトップアプリケーションは、dbusを使用して実行中の既存のSteamインスタンスがあることを確認し、利用可能な場合はそのインスタンスに切り替えます。したがって、ウィンドウがすでに開いている場合、単にプロセスを分岐/実行することは機能しません。
unshare(2)
各子供のインストール名前空間を作成し、dbusを隠すための何かをインストールしてみました/run
。まだこのアプローチでは成功していません。
コンテナ化は、分離とセキュリティの利点をいくつか提供するための明白で一般的なアプローチです。しかし、私はDockerやlxdなどを一緒に実行する必要があるのではなく、サーバープロセスが独立していることを願っています。
私はセキュリティについてあまり心配しません。あるいは、この問題に対する解決策が必ずしもコンテナの脱出や同様の攻撃を防ぐ必要はありません。
どのLinuxに優しい技術やカーネル機能がこの問題をうまく解決し、C / Rustプログラムで実装するのは合理的に簡単ですか?