に電話して実行時に共有のキャンセルをキャンセルするunshare ./fooprogram
方法はありますか?fooprogram
答え1
方法がある場合はカーネルの脆弱性です。
このレビューを書く時点では、最新のカーネル(5.7.2)、この問題に関する文書があります:
unshare()
システムコールは、スレッドが作成時に共有されているすべてのリソースを選択的に「共有解除」できるようにする基本要素をLinuxスレッドモデルに追加します。[… ]
unshare()
新しいプロセスを作成せずに共有リソースを制御したいアプリケーション用の拡張Linuxスレッドユーティリティ。unshare()
プロセス/スレッドの概念を仮想マシンとして実装するLinuxで利用可能な基本要素のセットを自然に補完します。
後で続く:
unshare()
カーネルのプロセス固有の名前空間メカニズムを使用して、複数インスタンス化されたディレクトリを実装するために使用できます。ユーザー固有および/またはセキュリティコンテキストインスタンス別など、複数のインスタンス化ディレクトリ/tmp
または/var/tmp
ユーザーホームディレクトリの各セキュリティコンテキストインスタンスは、そのディレクトリを使用するときにユーザープロセスを分離します。を使用すると、unshare()
PAMモジュールを介してユーザーがログインしたときに個人の名前空間を簡単に設定できます。
文書には「回復不可能」と明示的には記載されていませんが、セキュリティの目的でunshare()
1つの合法的な使用が記載されています。unshare()
これが逆転することができれば、目的は失われると思うかもしれません。