マウントネームスペースの外側でバインドマウントが見えるのはなぜですか?


12

そこで、Linuxのマウント名前空間がどのように機能するかを把握しようとしています。そこで、私は少し実験をして、2つのターミナルを開き、次のコマンドを実行しました。

ターミナル1

root@goliath:~# mkdir a b
root@goliath:~# touch a/foo.txt
root@goliath:~# unshare --mount -- /bin/bash
root@goliath:~# mount --bind a b
root@goliath:~# ls b
foo.txt

ターミナル2

root@goliath:~# ls b
foo.txt

ターミナル2でマウントが見えるのはなぜですか?これはマウント名前空間の一部ではないため、ここではディレクトリが空であると思われました。また、でオプションを渡し-o shared=noて使用しようとしましたが、同じ結果が得られました。--make-privatemount

私は何が欠けていますか、どうすれば実際にプライベートにすることができますか?


マウントはシステム全体に適用され、シェル環境に固有のものではありません。shared、slave、private、unbindableはあなたが思っているものではありません。読んでくださいman mount
cas

3
@cas:それ--make-privateは私が望むものではないことに同意します。しかし、それはマウント名前空間のポイントではありません(システム全体ではありません)。
-FatalError

回答:


11

util-linuxバージョンが2.27未満のsystemdベースのディストリビューションを使用している場合、この直感的でない動作が見られます。これは、カーネルの設定に依存するCLONE_NEWNSなどのフラグを伝播するためsharedです。この設定は通常privateですが、systemdはこれをに変更しsharedます。util-linux2.27の時点で、コマンドのデフォルトの動作を変更して、より直感的になるようにデフォルトの伝播動作として使用するパッチが作成されました。unshareprivate

解決

<2.27のsystemdシステムを使用している場合、コマンドの実行後にutil-linuxルートファイルシステムを再マウントする必要があります。unshare

# unshare --mount -- /bin/bash
# mount --make-private -o remount /

> = 2.27のsystemdシステムをutil-linux使用している場合、再マウントする必要なく、質問で指定した例で期待どおりに機能するはずです。そうでない場合:コマンドに渡し--propagation privateunshare、マウント名前空間の伝播を強制的にプライベートにします。


0

これは、ubuntuでは機能しませんでした(15.04および14.04)。fedoraで機能しました。フェドラ用。--make-privateが必要かどうかにかかわらず、確認することもできます

cat / proc / self / mountinfo | grep shared

共有されている場合、他のネームスペースがマウントを確認できることを意味します。それはsystemd関連の問題です。--make-privateを使用して動作させることができます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.