問題タブ [linux-namespaces]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 作成した名前空間を確認するにはどうすればよいですか?
clone()
またはを使用unshare()
して、ネットワーク名前空間を作成できます。コマンドと同じように:
(http://lxc.sourceforge.net/index.php/about/kernel-namespaces/network/configuration/を参照してください)
ns_exec
コマンドを使用して複数のネットワーク名前空間を作成した場合、それらはどこで確認できますか?またはネットワーク名前空間の数をカウントするにはどうすればよいですか?
networking - より多くのネットワーク名前空間を作成するにはどうすればよいですか?
unshare()
を使用して、clone()
Linux で多数のネットワーク名前空間を作成する方法は?
c - 単一のプロセスインスタンスから複数のネットワーク名前空間を作成する方法
次のC関数を使用して、単一のプロセスインスタンスから複数のネットワーク名前空間を作成しています。
プロセスがすべての名前空間を作成し、1つのネットワーク名前空間のいずれかにタップip link set tap1 netns ns1
インターフェイスを追加した後(コマンドを使用)、実際にはすべての名前空間にこのインターフェイスが表示されます(おそらく、これは実際には異なる名前の単一の名前空間です)。
しかし、複数のプロセスを使用して複数の名前空間を作成すると、すべてが正常に機能します。
ここで何が間違っている可能性がありますか?unshare()
単一のプロセスインスタンスからこれを機能させるには、に追加のフラグを渡す必要がありますか?単一のプロセスインスタンスが複数のネットワーク名前空間を作成できないという制限はありますか?または、実際には複数回マウントされているmount()
ため、呼び出しに問題がありますか?/proc/self/ns/net
更新:unshare()
関数は複数のネットワーク名前空間を正しく作成
しているようですが、すべてのマウントポイントは、/var/run/netns/
実際にはそのディレクトリにマウントされた最初のネットワーク名前空間を参照しています。
Update2: 最善のアプローチは、別のプロセスをfork()して、そこからcreate_namespace()関数を実行することだと思われます。とにかく、fork()呼び出しを含まないより良い解決策を聞いたり、少なくとも単一のプロセスから複数のネットワーク名前空間を作成および管理することが不可能であることを証明する確認を取得したりできれば幸いです。
Update3: 次のコードを使用して、unshare()で複数の名前空間を作成できます。
しかし、プロセスが終了して実行ip netns exec a ifconfig -a
した後、ip netns exec b ifconfig -a
両方のコマンドが名前空間aで突然実行されたようです。したがって、実際の問題は、名前空間への参照を保存することです(または、mount()を正しい方法で呼び出します。しかし、これが可能かどうかはわかりません)。
linux - CLONE_NEWNS およびマウント伝搬
私は現在、Linux で CLONE_NEWNS を理解するための例を探しているので、次の実験を行いました。
シェル1で:
shell2 のように:
CLONE_NEWNS はドキュメントが述べたように新しいマウント名前空間を作成するため、shell2 の出力は空である必要があります。
まず、子の名前空間マウントが親に伝播すると思ったので、親にマウントすると、子にもマウントが表示されます!
次に、同じ親から 2 つの別個の子名前空間を作成します。1 つの子にマウントすると、もう 1 つの子にも影響します。
よくわかりません。
ps。shell1 での最初の実験で:
シェル2で:
どうやら、それらは異なるマウント名前空間にあります。
c - カーネル名前空間 PID を使用してグローバル スコープからプロセスを強制終了する
今日のLinux カーネルの名前空間にはいくつかの問題があります。具体的には、一意の PID 名前空間内の PID をグローバル PID 名前空間内のPID に関連付けることです。
次のいずれかを実行できる必要があります。
a)名前空間によって割り当てられた PID を使用して、グローバル スコープからプロセスを強制終了します
また
b)名前空間固有の PID をグローバル PID に変換して、グローバル スコープから PID を削除できるようにする
また
c) PID 名前空間内のプロセスがグローバル PID を報告できるようにします。これにより、グローバル スコープから PID を強制終了できます。
名前空間シナリオで PID 情報を含むプロセス構造については、ここでいくつかの議論があります。ユーザーランドアプリケーションからこれらの構造にアクセスできるかどうか、またはカーネルハックを介してサポートを追加する必要があるかどうかはわかりません。
なんで? 現在ネットワーク名前空間を使用しているアプリケーションがあります。PID 名前空間のサポートを追加しています。現在の仕組みは次のとおりです。
PID 名前空間の導入前: メイン アプリケーションは現在、別のネットワーク名前空間で bash コンソールを起動します。次に、その bash コンソールを使用してプログラムを開始し、それらのプログラムに現在の PID を報告させます。メイン アプリケーションがそのネットワーク名前空間内のサブプロセスを強制終了したい場合は、報告された PID を強制終了するよう OS に指示するだけです。
PID 名前空間あり (壊れた状態): メイン アプリケーションは現在、別のネットワークと PID 名前空間で bash コンソールを起動します。次に、その bash コンソールを使用してプログラムを開始し、それらのプログラムに現在の PID を報告させます。ただし、報告された現在の PID は、グローバル PID 名前空間では有効ではありません (グローバル名前空間の PID が 56000 の場合、10 になる可能性があります)。その結果、メイン アプリケーションは、そのネットワーク + PID 名前空間でサブプロセスを強制終了できません。
いつものように、どんな指導も大歓迎です
linux - Linux - マウント名前空間とクローン CLONE_NEWNS フラグを理解する
マウントとクローンのマニュアルページを読んでいます。CLONE_NEWNS が子プロセスのファイル システムのビューにどのように影響するかを明確にしたいと思います。
(ファイル階層)
このツリーをディレクトリ階層と考えてみましょう。5と6が親プロセスのマウントポイントだとしましょう。別の質問でマウントポイントを明確にしました。
したがって、私の理解は次のとおりです。5と6がマウントポイントであるということは、mount
コマンドが以前に5と6でファイルシステム(ディレクトリ階層)を「マウント」するために使用されたことを意味します(つまり、5と6の下にもディレクトリツリーが必要です)。
mount
マンページから:
clone
マンページから:
また :
clone()
withを使用しCLONE_NEWNS
て子プロセスを作成すると、子はツリー内のマウント ポイント (5 & 6) の正確なコピーを取得し、元のツリーの残りの部分にアクセスできることを意味しますか? 親プロセスのマウント名前空間で5または6にマウントされているものに影響を与えることなく、子が5および6を自由にマウントできることも意味しますか。
はいの場合、子が5または6とは異なるディレクトリをマウント/アンマウントし、親プロセスに表示されるものに影響を与える可能性があることも意味しますか?
ありがとう。
linux - 非特権ネームスペース サンドボックスに proc をマウントする
Linux 名前空間を使用してサンドボックス環境を作ろうとしています。https://github.com/swetland/mkboxで、私が望むことを大まかに実行するきちんとした例を見つけましたが、信頼できる /proc をサンドボックス内に表示したいと思います。どうやってやるの?
「proc」にproc FSをバインドマウントしようとしましたが、EINVALで失敗します。「proc」を正常にマウントしようとすると、EPERM が生成されます。
アイデア?
linux - Linux カーネルは現在、名前空間を完全に認識していますか?
2008 年に出版された Professional Linux Kernel Architecture という本を読んでいます。49 ページでは、プロセス管理とスケジューリングについて説明しています。
名前空間は現在、標準カーネルではまだ実験的なものとしてマークされており、カーネルのすべての部分を名前空間に完全に対応させるための開発がまだ進行中です。
私の質問は次のとおりです。名前空間は標準カーネルにまだありますか?