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