Linuxで名前空間をマウントする際に奇妙な問題が発生しました。 Fedora 16でカーネル3.2.3-2を実行するX86_64という2つのシステムがあります。tmpfs
以下を使用して作成されたサブネームスペースにファイルシステムをマウントしようとしていますunshare
。
unshare -m /bin/bash
マニュアルページから:
mount namespace
mounting and unmounting filesystems will not affect rest of the
system (CLONE_NEWNS flag),
あるシステムでは、期待どおりに動作します。つまり、これで始まる場合:
# ls /mnt
file1 file2 file3
次に、サブネームスペースにファイルシステムをマウントしますtmpfs
。/mnt
# PS1="child# ' unshare -m /bin/bash
child# mount -t tmpfs tmpfs /mnt
の内容は/mnt
サブネームスペースでマスクされます。
child# ls /mnt
child#
ただし、親エントリには引き続き表示されます。
# ls /mnt
file1 file2 file3
2番目のシステムでは、まったく同じコマンドシーケンスのため、親と子の名前空間の両方にマウントが表示されます。つまり、このunshare
コマンドは実際には別々のマウントネームスペースを生成しないようです。
2つのシステム間の実質的な違いはわかりません。 1つはデスクトップ環境を実行しており、もう1つはそうではありません。 SELinux は両方のシステムで無効になります。
これらの動作の違いの原因が何であるかに関する提案を探しています。
答え1
サンドボックスサービスが実行されていることを確認してください。
systemctl status sandbox.service
その場合は、終了して再起動してからやり直してください。これは私にとって効果的です。
答え2
@Johnは答えを得ましたが、2つのシステムが異なる動作をする理由を反映するために、ここにいくつかの追加文書を提供したいと思いました。
スクリプトsandbox
()は次のコマンドを実行して、システムのすべてのインストールにフラグを繰り返し設定します/etc/rc.d/init.d/sandbox
。shared
mount --make-rshared /
スクリプトのコメントはsandbox
次のとおりです。
説明:pam_namespaceを使用したいサンドボックス、xguest、およびその他のアプリケーションは、起動時にこのスクリプトを実行する必要があります。サービススクリプトは、実際にサービスを実行せずに別々の名前空間を起動するすべてのアプリケーションで/を共有するように設定します。 sandbox、xguest、またはpam_namespaceを使用していない場合は、このサービスをオフにできます。
ここで参照されているツールはGUIアプリケーションなので、このsandbox
スクリプトは実行レベル5でのみアクティブになります。私が作業している2つのシステムの1つはデスクトップです。したがって、ランレベル5から起動し、デフォルトsandbox
でスクリプトをインポートします。一方、もう1つはランレベル3で起動するヘッドレスサーバーです。
答え3
同じ問題が引き続き発生します。一つ食べて
mount --make-private /mnt
前に
mount -t tmpfs tmpfs /mnt
また、seunshareコマンドのソースコードを見て、コマンドがどのように実行されるかを確認してください。