Linuxカーネルの「名前空間サポート」機能が正確に何を意味するのかを知りたいです。私はカーネル3.11.1(現在最新の安定カーネル)を使用しています。
無効にすることを選択した場合、システムに変更が表示されますか?
誰かが名前空間を使用することにした場合、NAMESPACES=Y
カーネルでコンパイルするだけで十分ですか、それともユーザースペースツールも必要ですか?
答え1
つまり、名前空間は、より大きなLinuxシステム内に仮想Linuxシステムを構築する方法を提供します。これは、権限のないプロセスで実行される仮想マシンを実行するのとは異なります。つまり、仮想マシンはホストに単一のプロセスとして表示され、名前空間内で実行されているプロセスはまだホストシステムで実行されます。
より大きなシステム内で実行されている仮想マシンを呼び出します。コンテナ。コンテナの概念は、コンテナ内で実行されるプロセスが、自分がシステムの唯一のプロセスであると考えるということです。具体的には、コンテナ内の root ユーザーはコンテナ外の root 権限を持っていません (これは十分に新しいカーネルバージョンでのみ)。
名前空間は一度に1つの機能を仮想化します。名前空間タイプのいくつかの例は次のとおりです。
- ユーザーネームスペース- これにより、プロセスは名前空間の内部と外部で他のユーザーとして実行されているかのように動作できます。特に、名前空間内でUID 0で実行されるプロセスは、同じ名前空間で実行されるプロセスに対してのみスーパーユーザー権限を持ちます。
Linuxカーネル3.8以降、権限のないユーザーはユーザーの名前空間を作成できます。これにより、一般ユーザーはルートに予約されている機能(ルーティングテーブルの変更や機能設定など)を使用できます。 - PID名前空間- PIDネームスペース内のプロセスは、ネームスペース外のプロセスを終了または追跡できません。
- マウントネームスペース- これにより、プロセスはファイルシステムの独自のビューを持つことができます。ビューは、ファイルシステムの特定の部分を隠し、特定の部分を再構成してディレクトリツリーが別の場所に表示されるようにする部分ビューです。マウントネームスペースは、既存のUnix機能を要約します。chroot、プロセスを特定のサブツリーに制限できます。
- ネットワークネームスペース- ネットワークリソース(ネットワークデバイス)を分離してプロセスの分離を強化します。
ネームスペースはカーネルを使用してネームスペース間の分離を提供します。この問題を解決するのは非常に複雑なため、セキュリティホールがまだ存在する可能性があります。この機能を有効にしない主な理由は、セキュリティの脆弱性のリスクによるものです。これを有効にしないもう1つの理由は、組み込みデバイス用の小さなカーネルを作成することです。一般的なサーバーまたはワークステーションにインストールされている一般的なカーネルでは、他の完全なカーネル機能と同様に名前空間を有効にする必要があります。
名前空間を使用するアプリケーションはまだほとんどありません。以下は一部です。
- LXC完璧です。それにかかっているcgroup勇気を提供してください。
- 仮想サンドボックス更新されたサンドボックスプロジェクト。
- 最新バージョンクロム可能であれば、サンドボックスに名前空間を使用することもできます。
- これuWSGIクラスタアプリケーションフレームワーク名前空間の使用サンドボックスを改善するために使用されます。
バラよりMichael KerriskのLWN記事シリーズより多くの情報を知りたいです。
答え2
Linuxカーネルネームスペースは、システムリソースにアクセスするためにプロセスグループを他のプロセスから分離するために使用される概念です。たとえば、2つの異なるPID名前空間には、PIDは同じですが、プロセスイメージがまったく異なるプロセスを含めることができます。一般に、単一コアは、さまざまなオペレーティングシステムを同時に実行するOSレベルの仮想化に使用されます。すべてのオペレーティングシステムはすべてLinuxベースである必要があります(明らかにカーネルを共有するため)、ディストリビューションとバージョンが異なる場合があります。例を見るLXC。
systemdは名前空間を使用できるため、systemdベースのシステムでこれを無効にすることがわかります。コンテナのプロパティ。したがって、使用しているディストリビューションとシステムで何をするかによって、多くが異なります。
ほとんどすべてのカーネル機能と同様に、ある種のユーザー空間プログラムが必要です。特殊ファイルを介してカーネルと通信しても(可能かどうかはわかりません)、通常、次の特殊なツールに頼る方が良いでしょう。フロントエンドに優しいAPIを提供します。
答え3
SELinuxが有効になっているシステム(MLSまたはStrict)で名前空間を使用する例を見てください。名前空間は、/tmp
ユーザーごとに別々のディレクトリおよび/またはディレクトリを作成するためによく使用されます。/home
これらのディレクトリは、ユーザー、同じラベルのユーザー、カーネル、およびアクセス権を持つユーザーにのみ表示されます。名前空間/tmp
ディレクトリには、ユーザーのSELinux-MLSラベルと一致するようにSELinux-MLSラベルが付けられています。この場合/tmp
、ユーザーが見るディレクトリは実際に/tmp
( )/var/user-tmp
以外の場所にマウントされている可能性があります。ただし、ユーザーは/tmp
ユーザーアクティビティの結果として生成されたファイルのみを表示できます。ユーザーは/tmp
他のユーザーが作成したファイルを決して表示できません。