カーネル:名前空間のサポート


15

Linuxカーネルの「ネームスペースサポート」機能の正確な意味を知りたい。カーネル3.11.1(現時点で最新の安定したカーネル)を使用しています。

無効にすることにした場合、システムの変更に気付きますか?

誰かが名前空間を使用することに決めた場合NAMESPACES=Y、カーネルでコンパイルするだけで十分ですか、それともユーザースペースツールも必要ですか?


5
名前空間はここでかなりよく説明されています:lwn.net/Articles/531114(答えではなく、私はあなたの質問に本当に答えていないので、テキストの山を指しているのです)
-derobert

回答:


21

一言で言えば、名前空間は、より大きなLinuxシステム内に仮想Linuxシステムを構築する方法を提供します。これは、非特権プロセスとして実行される仮想マシンの実行とは異なります。仮想マシンは、ホストでは単一のプロセスとして表示されますが、ネームスペース内で実行されるプロセスは、ホストシステムで実行されます。

大規模なシステム内で実行される仮想システムは、コンテナと呼ばます。コンテナのアイデアは、コンテナ内で実行されているプロセスがシステム内の唯一のプロセスであると信じているということです。特に、コンテナ内のrootユーザーはコンテナ外のroot権限を持っていません(これは、カーネルの最近の十分なバージョンでのみ当てはまることに注意してください)。

名前空間は、一度に1つの機能を仮想化します。名前空間のタイプの例を次に示します。

  • ユーザー名前空間 —これにより、プロセスが名前空間の内外で異なるユーザーとして実行されているかのように動作できます。特に、ネームスペース内でUID 0として実行されているプロセスは、同じネームスペースで実行されているプロセスに関してのみスーパーユーザー特権を持ちます。
    Linuxカーネル3.8以降、非特権ユーザーはユーザー名前空間を作成できます。これにより、一般ユーザーはルートに予約されている機能(ルーティングテーブルの変更や機能の設定など)を利用できます。
  • PID名前空間PID名前空間内のプロセスは、その名前空間外のプロセスを強制終了またはトレースできません。
  • 名前空間のマウント —これにより、プロセスはファイルシステムの独自のビューを持つことができます。このビューは部分的なビューで、ファイルシステムの一部を非表示にしたり、別の場所にディレクトリツリーが表示されるように再構成したりできます。マウント名前空間は、プロセスを特定のサブツリーに制限できるようにする従来のUnix機能chrootを一般化します。
  • ネットワーク名前空間 —ネットワークリソース(ネットワークデバイス)を分離できるため、プロセスの分離が強化されます。

名前空間は、カーネルに依存して名前空間を分離します。これを正しく行うのは非常に複雑であるため、セキュリティのバグがまだ残っている可能性があります。セキュリティバグのリスクは、この機能を有効にしない主な理由です。有効にしないもう1つの理由は、組み込みデバイス用の小さなカーネルを作成している場合です。一般的なサーバーまたはワークステーションにインストールする汎用カーネルでは、他の成熟したカーネル機能と同様に、名前空間を有効にする必要があります。

名前空間を利用するアプリケーションはまだほとんどありません。以下にいくつかを示します。

  • LXCは十分に確立されています。コンテナを提供するためにcgroupに依存しています。
  • virt-sandboxは、より最近のサンドボックスプロジェクトです。
  • Chromiumの最近のバージョンでは、使用可能な場合、サンドボックス化に名前空間も使用します。
  • クラスター化されたアプリケーションのuWSGIフレームワークは、サンドボックスを改善するために名前空間使用します

詳細については、Michael KerriskよるLWNの記事シリーズを参照しください。


6

Linuxカーネル名前空間は、システムリソースへのアクセスに関して、プロセスのグループを他のプロセスから分離するために使用される概念です。たとえば、2つの異なるPID名前空間には、同一のPIDを持つプロセスイメージが完全に異なるプロセスが含まれる場合があります。1つのカーネルがさまざまなオペレーティングシステムを同時に実行しているOSレベルの仮想化でよく使用されます-すべてLinuxベースである必要があります(明らかにカーネルを共有するため)が、異なるディストリビューションとバージョンである可能性があります。たとえば、LXCを参照してください。

systemdはコンテナ機能に名前空間を使用できるため、たとえばsystemdベースのシステムでは無効になっていることがあります。そのため、使用しているディストリビューションと、システムで何をしようとするかに大きく依存します。

ほぼすべてのカーネル機能と同様に、何らかの種類のユーザースペースプログラムが必要です-特別なファイルを介してカーネルと通信したとしても(できるかどうかはわかりません)、通常は専用のツールに依存することをお勧めします。前面に優しいAPIを提供します。


1

SELinux(MLSまたはStrict)対応システムでの名前空間の使用例を示します。名前空間は通常、各ユーザーの個別のディレクトリ/tmpまたは/homeディレクトリを作成するために使用されます。これらのディレクトリは、ユーザー、同じラベルを持つユーザー、カーネル、特権アクセスを持つユーザーのみに表示されます。名前空間の/tmpディレクトリは、ユーザーのSELinux-MLSラベルと一致するようにSELinux-MLSによってラベル付けされます。このシナリオでは/tmp、ユーザーに表示されるディレクトリは、実際には/tmp/var/user-tmp)以外の場所にマウントされる場合があります。ただし/tmp、ユーザーには、ユーザーのアクティビティが原因で作成されたファイルのみが表示されます。ユーザーには/tmp、他のユーザーの製品であるファイルは表示されません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.