問題タブ [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 - unshare(CLONE_NEWNET) に CAP_SYS_ADMIN が必要なのはなぜですか?
私は Linux 名前空間で遊んでいますが、ユーザーが新しいネットワーク名前空間で (ユーザー名前空間を使用せずに) プロセスを実行したい場合、root になるか、そのCAP_SYS_ADMIN
機能が必要であることに気付きました。
unshare(2)マンページには次のように書かれています。
CLONE_NEWNET (Linux 2.6.24 以降)
このフラグは、clone(2) CLONE_NEWNET フラグと同じ効果があります。ネットワーク名前空間の共有を解除して、呼び出し元のプロセスが既存のプロセスと共有されていない新しいネットワーク名前空間に移動されるようにします。CLONE_NEWNET を使用するには、CAP_SYS_ADMIN 機能が必要です。
したがって、ネットワーク サンドボックスで pdf リーダーを実行する場合は、user-net-namespaces または特権ラッパーを使用する必要があります。
なんで?新しいプロセスは、インターフェイスのない新しいネットワーク名前空間に配置されるため、実際のネットワークから分離されますよね? 権限のないユーザー以外のネットワーク名前空間によって、どのような問題/セキュリティ上の脅威が発生しますか?
c - CLONE_NEWNS セット効果の親を持つ clone() の後の mount()
ここで何が起こっているのか少し混乱しています。CLONE_NEWNS フラグを設定してクローンを呼び出した後、新しいマウント ポイントが追加されたガイドに従っていました。マウント ポイントは、子プロセスに対してのみ存在するはずでした。新しいファイルシステムの名前空間を変更しようとしていますが、親の名前空間に影響しているようです。
私の C プログラムはとても単純です。メインはクローンを呼び出します
args は、実行するコマンドを含むチャット配列です。
execvp に渡されるコマンドが である場合、mount
出力に /mytmp マウント ポイントが含まれmount
、プログラムの終了後にコマンドを再度実行すると、/mytmp が表示されないことが予想されます。それは起こっていません。execvp が呼び出されたときと、mount を実行した後に表示されます。
MS_PRIVATE フラグを付けてマウントしてみましたunshare(CLONE_FS);
また、子プロセスから /proc をアンマウントしようとすると、get resource is busy エラーが発生するという同様の問題がありました。私は、新しい名前空間でそれが起こるべきではないと考えました。
linux - マウント システム コールのソース キーワードとターゲット キーワードで混乱する
マウント、pid、ユーザー名前空間などを含む新しい名前空間で複製されたコンテナーを実装しています。子が行う最初のステップは、システム コールなどのいくつかの重要なポイントをマウント/proc
すること/sys
です/tmp
。mount
source
ただし、 に渡される引数リストのフィールドに少し混乱していますmount
。
ソースは正確には何を意味しますか?たとえば、マウント/tmp
はソースの文字列とは何の関係もないようです。/tmp
を使用しても、新しい名前空間の下に作成された新しいフォルダーが表示されます::mount(nullptr, "/tmp", "tmpfs", 0, NULL)
。何か不足していますか?
c - CLONE_NEWNS フラグを使用してクローンを作成した後、ファイルシステムをマウントします
次のシナリオを実装しようとしています。
clone()
フラグ付きのメイン プロセスCLONE_NEWNS
(新しいマウント名前空間を意味します)mount()
子プロセスの新しいファイルシステム- 子プロセスが終了し、このプロセスで作成されたすべてのファイルシステムがアンマウントされました
しかし、期待どおりに動作せず、マウントされたファイルシステムがメイン プロセスに表示されます。私は何を間違っていますか?
ソースはこちらhttps://github.com/dmitrievanthony/sprat/blob/master/src/container.c#L47
システムはデフォルトのAWS Ubuntuで、
c - LWN の「Namespaces in operation, part 4: more on PID namespaces」の失敗例
この記事の最後の例は、意図したとおりに機能しません。これはコードです:
私の環境は Fedora 24 で、これは私が受け取るべき出力です:
- /li>
- /li>
ただし、これは私が受け取る出力です:
- /li>
- /li>
あたかもorphan
の子が何もせず、再親化されていないかのようです。ただし、のシェルorphan
経由で ( なしで) 実行すると、期待どおりに動作します。simple_init
ns_run