web-dev-qa-db-ja.com

バインドマウントがマウント名前空間の外部に表示されるのはなぜですか?

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-privateオプションをmountとともに使用してみましたが、同じ結果が得られました。

何が欠けていますか?実際にプライベートにする方法はありますか?

12
FatalError

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

ソリューション

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

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

> = 2.27 util-linuxのsystemdシステムを使用している場合は、質問で示した例で、再マウントすることなく、逐語的に期待どおりに機能するはずです。そうでない場合:--propagation privateunshareコマンドに渡して、マウント名前空間の伝播を非公開にします。

11
Dave

これはubuntuでは機能しませんでした(15.04および14.04)。それはFedoraで動作しました。 Fedoraの場合。 --make-privateが必要かどうかにかかわらず、確認することもできます

猫/ proc/self/mountinfo | grepが共有しました

共有されている場合は、他の名前空間がまだそのマウントを認識できることを意味します。次に、systemd関連の問題です。 --make-privateを使用して機能させることができます

0
Kennan