この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)
出典検索?: "FreeBSD jail"
FreeBSD jailはOSレベル仮想化機構実装の一つである。jailを使うと、管理者がFreeBSDベースの計算機システムをjailと呼ばれる独立した小さなシステムに分割できるようになる。
FreeBSD jailは、レンタルサーバ業者が業者の提供するサービスと顧客のサービスとを分離するのによく使われる。このように分離することで安全性を確保し、管理の手間を軽減できる。サーバデーモンの設定レベルで分離するのと違い、jailからは自分に割り当てられたファイルシステムおよびプロセス空間しか扱えないようになっている。 FreeBSD jailには主に次の3つの利点がある。
jailの利点
仮想化: 各jailはホストマシン上で動く仮想機械であり、独自のファイルシステムやプロセス空間
安全性: 各jailは他のjailにアクセスできないようになっており、安全性が高まっている。
権限委譲の簡素化: 管理者権限のスコープがjail内に制限されているため、システムの管理者は本来管理者権限が必要な仕事を、計算機全体を操作する権限を渡すことなく行わせることが出来る。
jailのやり方は従来のUnixでプロセスのスコープを制限するのに使われるchroot jailに似ている。FreeBSD jailはこれを強化したもので、各プロセスは他のjailで動いているプロセスに干渉したり、raw socketやdivert socket、routing socketを操作したりできないよう、特別なカーネル構造体を用いて管理してある。
jail(8)ユーザーランドコマンドとjail(2)システムコールはFreeBSD 4.0で登場した。jailの取り扱いを簡単にする新しいユーザーランドコマンド (たとえば、jailの一覧を出すjls(8))やシステムコール (たとえば、jailに新しいプロセスを追加するjail_attach(2))はFreeBSD 5.1から追加された。 FreeBSD jailの利用は次のように簡単に行える。
jailの作り方
/usr/jailのようにjailの中でrootディレクトリ (つまり、/) となるディレクトリを作る。
jailの中で動かすプログラムやファイルを投入する (典型的には、/usr/jail/binにシェルを置いたり、procfsを/usr/jail/procfsにマウントしたりする)。jail(8)のオンラインマニュアル
/usr/jail/devにdevfsをマウントする。(デバイスノード無しでも動作するが、非常に制限が強い)
最後に、jailコマンドでjail内のshを使って/etc/rc initスクリプトを"仮想的に"起動する (例 jail /usr/jail hostname 10.0.0.22 /bin/sh /etc/rc)。
こうすることで、jailのコンテキストでいくつかのプロセスが実行される。そして、中で起動したプロセスはjailの中のプロセスの操作しかできず、jailのルートファイルシステムとして指定されたファイルシステム (ここでは、/usr/jail) の外にあるファイルをアクセスできなくなる。
jailを使い始めるときはjail(8)のオンラインマニュアルが参考になる。 OSレベルの仮想化技術にはこのほかにOpenVZ/Virtuozzo, Linux-VServer, Solaris Containers
同様の技術
外部リンク
⇒Jails: Confining the omnipotent root
⇒jail(8) man page
⇒FreeBSD jails at ONLamp
⇒A jail administration framework ezjail
⇒Jail on FreeBSD 6
⇒FreeBSD Handbook: Jails
表
話
編
歴
仮想化
全体
PopekとGoldbergの仮想化要件
ハイパーバイザ
準仮想化
PowerVM
x86仮想化
プラットフォームの
仮想化
(仮想マシン)
ハードウェアレベル
PR/SM
LPAR
LDOM
仮想86モード
インテルVT
AMD-V
ブレードサーバ
ハードウェア仮想化
I/O仮想化(英語版)
ソフトウェアレベル
bhyve
z/VM
VMware
VMware Fusion
Hyper-V
WPAR
Sun xVM(英語版)
Bochs
KVM
PearPC
QEMU
Xen
VirtualBox
jail
Linux-VServer
cgroups
LXC(Docker)
Parallels Desktop
Parallels Virtuozzo Containers
OpenVZ
libvirt
User Mode Linux
Lguest
OSレベルの仮想化
アプリケーション仮想化
デスクトップ仮想化
言語レベル
バイトコード
Java仮想マシン
CLR
LLVM
Lua
リソースの仮想化
CPU
タイムシェアリング
メインメモリ
仮想メモリ
ディスク装置
RAID
LVM
仮想ファイルシステム
ディスク仮想化ソフト
ネットワーク