jail

jailはファイルシステムやプロセスの隔離を行う、一種の仮想OS環境です。ここではFreeBSD 6系列を対象としています。

jail環境の構築

jail用ディレクトリの構築

まずはjailのために各種コマンドやファイル群を用意します。

# setenv JD /here/is/jail
# mkdir -p $JD
# cd /usr/src
# make -j4 buildworld
# make installworld DESTDIR=$JD
# cd /usr/src/etc
# make distribution DESTDIR=$JD
# mount_devfs devfs $JD/dev

jail 環境の初期設定

jail 環境の初期設定を行います。上に引き続き、chroot 環境下で作業を行います。

初期設定が終了したらシェルを終了させ、chroot 環境から抜けます。

portsの準備

それぞれのjail環境内でportsツリーを用意し、最新の状態に保つのはリソースの無駄ですので、親環境のportsツリーをjail環境内でも使用できるようにします。

まず、jail環境内にportsディレクトリーを作成します。

# mkdir $JD/usr/ports

次に、作成したディレクトリーに親環境の /usr/ports 以下を読み込み専用で、マウントします。

# mount_nullfs -o ro /usr/ports $JD/usr/ports

親環境の起動時にマウントされるように、/etc/fstab に以下の内容を書き加えます。

/usr/ports    /here/is/jail/usr/ports    nullfs    ro    0    0

読み込み専用でマウントしていますので、このままではjail環境内でpackageを作成するのに不都合が生じます。
そこで、jail環境内の /etc/make.conf 内に以下の内容を書き加えます。

WRKDIRPREFIX=/var/tmp
DISTDIR=/var/tmp/usr/ports/distfiles

jail 環境の起動

jail 環境に割り当てる IP アドレスを、実空間で仮想インターフェイスとして起動します。

# ifconfig em0 inet alias 192.168.1.100/32

上記の処理を OS の起動時に自動で行わせるために、実空間の /etc/rc.conf に以下の内容を追記します。

ifconfig_em0_alias0="inet 192.168.1.100  netmask 255.255.255.255"

jail環境を起動します。

# jail /here/is/jail/ jail_host 192.168.1.100 /bin/sh /etc/rc

OS 起動とともに jail 環境を有効とするために以下の内容を実空間の /etc/rc.conf に追記します。

jail_enable="YES"                    # Set to NO to disable starting of any jails
jail_list="jail1"                    # Space separated list of names of jails
jail_set_hostname_allow="NO"         # Allow root user in a jail
                                     # to change its hostname
jail_socket_unixiproute_only="YES"   # Route only TCP/IP within a jail
jail_sysvipc_allow="NO"              # Allow SystemV IPC use from within a jail
jail_stop_jailer="NO"                # Only stop jailer. Requires jail_*_exec be set
                                     # to use sysutils/jailer port to start the jail.

# jail_host in jail
jail_jail1_rootdir="/here/is/jail"   # Jail's root directory
jail_jail1_hostname="jail_host"      # Jail's hostname
jail_jail1_ip="192.168.1.100"        # Jail's IP number
jail_jail1_exec="/bin/sh /etc/rc"    # command to execute in jail
jail_jail1_devfs_enable="YES"        # mount devfs in the jail
jail_jail1_fdescfs_enable="NO"       # mount fdescfs in the jail
jail_jail1_procfs_enable="YES"       # mount procfs in jail
jail_jail1_devfs_ruleset="123"       # devfs ruleset to apply to jail

jail 環境の再構築

セキュリティアドバイザリへの対処を行うために、システムの再構築が必要な場合があります。また、OS のアップデート行う際にもシステムの再構築を行わなければなりません。

この場合、jail 環境の再構築も行う必要があります。 jail 環境の再構築は以下の手順で行います。

まず jail 環境を止めます。

# jls
   JID  IP Address      Hostname                      Path
     1  192.168.1.100   jail_host                     /here/is/jail
# killall -j 1

その後、 jail 環境の再構築を行います。

# setenv JD /here/is/jail
# cd /usr/src
# make -j4 buildworld
# mergemaster -p -D $JD
# make installworld DESTDIR=$JD
# mergemaster -i -C -D $JD

jail 環境の backup & restore

まず jail 環境を止めます。

# jls
   JID  IP Address      Hostname                      Path
     1  192.168.1.100   jail_host                     /here/is/jail
# killall -j 1

Link

FreeBSD Jail Software and Docs http://memberwebs.com/nielsen/freebsd/jails/


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-05-11 (水) 15:25:24