FreeBSD jailとは
FreeBSD jailは、OSレベルの
仮想化機構の一つであり、FreeBSDベースのシステムを「jail」と呼ばれる独立した環境に分割する技術です。これにより、システムリソースを効率的に分割し、セキュリティを向上させることが可能になります。
jailの主な利用シーン
FreeBSD jailは、特にレンタルサーバー事業者によって、提供するサービスと顧客のサービスを分離する目的で広く利用されています。これにより、顧客ごとに独立した環境を提供し、セキュリティリスクを低減します。
jailの仕組み
jailは、サーバーデーモンの設定レベルでの分離とは異なり、各jailには割り当てられた
ファイルシステムと
プロセス空間のみがアクセス可能です。これにより、jail内の
プロセスは他のjailやホストシステムの
プロセスに影響を与えることができません。
jailの利点
FreeBSD jailには、主に以下の3つの利点があります。
1.
仮想化: 各jailはホストマシン上で動作する仮想的な環境であり、独自の
ファイルシステム、
プロセス空間、ユーザーアカウントを持ちます。jail内の
プロセスからは、それが実際のシステムなのかjail内なのかを区別することが困難です。
2.
安全性: 各jailは他のjailにアクセスできないように設計されており、セキュリティが大幅に向上しています。これにより、一つのjailが侵害された場合でも、他のjailやホストシステムへの影響を最小限に抑えることができます。
3.
権限委譲の簡素化: 管理者権限の範囲がjail内に限定されるため、システムの管理者は、システム全体に対する権限を付与することなく、特定のタスクを委任することができます。
chrootとの比較
jailは、従来の
Unixにおける
プロセスのスコープを制限する技術であるchroot jailに似ています。しかし、FreeBSD jailはこれを強化したものであり、各
プロセスは他のjailで動作している
プロセスに干渉したり、raw socketやdivert socket、routing socketを操作することができないよう、特別な
カーネル構造体を用いて管理されています。
jailの歴史
jailのユーザーランドコマンドである`jail(8)`とシステムコールである`jail(2)`は、FreeBSD 4.0で初めて導入されました。その後、jailの取り扱いを容易にする新しいユーザーランドコマンド (例: `jls(8)` jail一覧表示) やシステムコール (例: `jail_attach(2)` jailに
プロセスを追加) が、FreeBSD 5.1で追加されました。
jailの構築手順
FreeBSD jailの構築は、以下の手順で簡単に行うことができます。
1.
ルートディレクトリの作成: `/usr/jail` のように、jail内でのルートディレクトリとなるディレクトリを作成します。
2.
プログラムとファイルの投入: 作成したディレクトリに、jail内で動作させるプログラムやファイルを配置します。典型的には、`/usr/jail/bin`にシェルを配置し、procfsを`/usr/jail/procfs`にマウントします。`make world DESTDIR=/usr/jail`や`make distribution DESTDIR=/usr/jail`コマンドを利用してこれらの作業を行うことも可能です。ただし、この方法は必須ではありません。
3.
devfsのマウント: `/usr/jail/dev`にdevfsをマウントします。(デバイスノードがなくても動作しますが、機能が大幅に制限されます)
4.
jailの起動: `jail`コマンドを使用して、jail内のshを用いて`/etc/rc` initスクリプトを起動します (例: `jail /usr/jail hostname 10.0.0.22 /bin/sh /etc/rc`)。
これにより、jailのコンテキストで
プロセスが実行されます。jail内で起動された
プロセスは、jail内の
プロセスのみを操作でき、jailのルート
ファイルシステムとして指定されたディレクトリ(`/usr/jail`など) の外のファイルにはアクセスできません。
jailの使用を始める際には、`jail(8)`のオンラインマニュアルを参照することが推奨されます。
他のOSレベル仮想化技術
OSレベルの
仮想化技術には、FreeBSD jailの他に、OpenVZ/Virtuozzo、Linux-VServer、Solaris Containers、FreeVPS、LXCなどが存在します。
外部リンク