*jail [#g264de67]
jailはファイルシステムやプロセスの隔離を行う、一種の仮想OS環境です。ここではFreeBSD 6系列を対象としています。
#contents
**jail環境の構築 [#wf26e67e]
***jail用ディレクトリの構築 [#b1d058b1]
まずは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 環境の初期設定 [#jd8ed2e4]
jail 環境の初期設定を行います。上に引き続き、chroot 環境下で作業を行います。
-起動時のエラーメッセージを抑制するため、空の fstab ファイルを作成します。
# touch /etc/fstab
-portmapper が起動しないように、/etc/rc.conf に以下を追記します。
rpcbind_enable="NO"
-インタフェース設定を無効化し ifconfig 関連の起動警告を解消するために、以下を /etc/rc.conf に追記します。
network_interfaces=""
-仮想 OS をリモートから操作するために jail 環境内で sshd を起動します。以下を/etc/rc.conf に追記します。
sshd_enable="YES"
sshd_flags="-4"
-syslogd をセキュアモードで操作し、必要のないポートを閉じるために、以下を /etc/rc.conf に追記します。
syslogd_flags="-ss"
-syslogd からコンソールへの出力を停止します。/etc/syslog.conf から以下に該当する箇所を削除またはコメントアウトします。
*.err;kern.debug;auth.notice;mail.crit /dev/console
-sendmail の警告を抑制するため、/etc/mail/aliases.db を生成します。
# newaliases
-タイムゾーンの設定を行います。
# touch /etc/wall_cmos_clock
# chmod 444 /etc/wall_cmos_clock
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
-root のパスワードを設定します。
# passwd root
-ssh 用ユーザーの設定を行います。
# adduser
-/etc/resolv.conf に最寄りの DNS サーバーを定義します。
-adjkerntz の定期動作を止めます。/etc/crontab から以下に該当する箇所を削除またはコメントアウトします。
1,31 0-5 * * * root adjkerntz -a
初期設定が終了したらシェルを終了させ、chroot 環境から抜けます。
***portsの準備 [#d1357af7]
それぞれの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 環境の起動 [#wfdc6782]
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 環境の再構築 [#v4927afe]
セキュリティアドバイザリへの対処を行うために、システムの再構築が必要な場合があります。また、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 [#e849e4b6]
まず jail 環境を止めます。
# jls
JID IP Address Hostname Path
1 192.168.1.100 jail_host /here/is/jail
# killall -j 1
**Link [#b1cb3932]
FreeBSD Jail Software and Docs http://memberwebs.com/nielsen/freebsd/jails/