Linuxカーネルの「ネームスペースサポート」機能が正確に何を意味するのか疑問に思います。カーネル3.11.1(現時点で最新の安定したカーネル)を使用しています。
無効にした場合、システムに変更がありますか?
また、誰かが名前名を使用することにした場合は、NAMESPACES=Y
をコンパイルするだけで十分です。 カーネル内にありますか、それともユーザースペースツールも必要ですか?
承認された回答:
一言で言えば、ネームスペースは、より大きなLinuxシステム内に仮想Linuxシステムを構築する方法を提供します。これは、非特権プロセスとして実行される仮想マシンの実行とは異なります。仮想マシンはホスト内で単一のプロセスとして表示されますが、名前空間内で実行されるプロセスは引き続きホストシステム上で実行されます。
より大きなシステム内で実行される仮想システムは、コンテナーと呼ばれます。コンテナの考え方は、コンテナ内で実行されているプロセスが、システム内の唯一のプロセスであると信じているということです。特に、コンテナ内のrootユーザーは、コンテナ外のroot権限を持っていません(これは、最近の十分なバージョンのカーネルでのみ当てはまることに注意してください)。
名前空間は、一度に1つの機能を仮想化します。名前の種類の例は次のとおりです。
- ユーザー名前空間—これにより、プロセスは、名前空間の内外で異なるユーザーとして実行されているかのように動作できます。特に、名前空間内でUID 0として実行されているプロセスは、同じ名前空間で実行されているプロセスに関してのみスーパーユーザー特権を持ちます。
Linuxカーネル3.8以降、特権のないユーザーはユーザー名前空間を作成できます。これにより、通常のユーザーは、ルートに予約されている機能(ルーティングテーブルの変更や機能の設定など)を利用できます。 - PID名前空間— PID名前空間内のプロセスは、その名前空間外のプロセスを強制終了またはトレースできません。
- マウント名前付け—これにより、プロセスはファイルシステムの独自のビューを持つことができます。このビューは部分的なビューにすることができ、ファイルシステムの一部を非表示にし、一部を再構成して、ディレクトリツリーがさまざまな場所に表示されるようにすることができます。マウント名前名は、プロセスを特定のサブツリーに制限できるようにする従来のUnix機能chrootを一般化します。
- ネットワーク名前空間—ネットワークリソース(ネットワークデバイス)の分離を可能にし、プロセスの分離を強化します。
名前空間は、名前空間間の分離を提供するためにカーネルに依存しています。これを正しく行うには非常に複雑であるため、セキュリティバグがまだ残っている可能性があります。この機能を有効にしない主な理由は、セキュリティバグのリスクです。有効にしないもう1つの理由は、組み込みデバイス用の小さなカーネルを作成する場合です。一般的なサーバーまたはワークステーションにインストールする汎用カーネルでは、他の成熟したカーネル機能と同様に、名前空間を有効にする必要があります。
関連:Linux – elfバイナリからコンパイラ情報を取得できますか?名前付けを利用するアプリケーションはまだほとんどありません。ここにいくつかあります:
- LXCは定評があります。コンテナを提供するためにcgroupsに依存しています。
- virt-sandboxは最近のサンドボックスプロジェクトです。
- 最近のバージョンのChromiumは、利用可能な場合、サンドボックス化に名前空間も使用します。
- クラスター化アプリケーション用のuWSGIフレームワークは、サンドボックス化を改善するために名前空間を使用します。
詳細については、MichaelKerriskによるLWNの記事シリーズを参照してください。