Linuxカーネルの「ネームスペースサポート」機能の正確な意味を知りたい。カーネル3.11.1(現時点で最新の安定したカーネル)を使用しています。
無効にすることにした場合、システムの変更に気付きますか?
誰かが名前空間を使用することに決めた場合NAMESPACES=Y
、カーネルでコンパイルするだけで十分ですか、それともユーザースペースツールも必要ですか?
Linuxカーネルの「ネームスペースサポート」機能の正確な意味を知りたい。カーネル3.11.1(現時点で最新の安定したカーネル)を使用しています。
無効にすることにした場合、システムの変更に気付きますか?
誰かが名前空間を使用することに決めた場合NAMESPACES=Y
、カーネルでコンパイルするだけで十分ですか、それともユーザースペースツールも必要ですか?
回答:
一言で言えば、名前空間は、より大きなLinuxシステム内に仮想Linuxシステムを構築する方法を提供します。これは、非特権プロセスとして実行される仮想マシンの実行とは異なります。仮想マシンは、ホストでは単一のプロセスとして表示されますが、ネームスペース内で実行されるプロセスは、ホストシステムで実行されます。
大規模なシステム内で実行される仮想システムは、コンテナと呼ばれます。コンテナのアイデアは、コンテナ内で実行されているプロセスがシステム内の唯一のプロセスであると信じているということです。特に、コンテナ内のrootユーザーはコンテナ外のroot権限を持っていません(これは、カーネルの最近の十分なバージョンでのみ当てはまることに注意してください)。
名前空間は、一度に1つの機能を仮想化します。名前空間のタイプの例を次に示します。
名前空間は、カーネルに依存して名前空間を分離します。これを正しく行うのは非常に複雑であるため、セキュリティのバグがまだ残っている可能性があります。セキュリティバグのリスクは、この機能を有効にしない主な理由です。有効にしないもう1つの理由は、組み込みデバイス用の小さなカーネルを作成している場合です。一般的なサーバーまたはワークステーションにインストールする汎用カーネルでは、他の成熟したカーネル機能と同様に、名前空間を有効にする必要があります。
名前空間を利用するアプリケーションはまだほとんどありません。以下にいくつかを示します。
詳細については、Michael KerriskによるLWNの記事シリーズを参照してください。
Linuxカーネル名前空間は、システムリソースへのアクセスに関して、プロセスのグループを他のプロセスから分離するために使用される概念です。たとえば、2つの異なるPID名前空間には、同一のPIDを持つプロセスイメージが完全に異なるプロセスが含まれる場合があります。1つのカーネルがさまざまなオペレーティングシステムを同時に実行しているOSレベルの仮想化でよく使用されます-すべてLinuxベースである必要があります(明らかにカーネルを共有するため)が、異なるディストリビューションとバージョンである可能性があります。たとえば、LXCを参照してください。
systemdはコンテナ機能に名前空間を使用できるため、たとえばsystemdベースのシステムでは無効になっていることがあります。そのため、使用しているディストリビューションと、システムで何をしようとするかに大きく依存します。
ほぼすべてのカーネル機能と同様に、何らかの種類のユーザースペースプログラムが必要です-特別なファイルを介してカーネルと通信したとしても(できるかどうかはわかりません)、通常は専用のツールに依存することをお勧めします。前面に優しいAPIを提供します。
SELinux(MLSまたはStrict)対応システムでの名前空間の使用例を示します。名前空間は通常、各ユーザーの個別のディレクトリ/tmp
または/home
ディレクトリを作成するために使用されます。これらのディレクトリは、ユーザー、同じラベルを持つユーザー、カーネル、特権アクセスを持つユーザーのみに表示されます。名前空間の/tmp
ディレクトリは、ユーザーのSELinux-MLSラベルと一致するようにSELinux-MLSによってラベル付けされます。このシナリオでは/tmp
、ユーザーに表示されるディレクトリは、実際には/tmp
(/var/user-tmp
)以外の場所にマウントされる場合があります。ただし/tmp
、ユーザーには、ユーザーのアクティビティが原因で作成されたファイルのみが表示されます。ユーザーには/tmp
、他のユーザーの製品であるファイルは表示されません。