概念

        Jail是chroot机制的一种进化后的机制,翻译成中文叫“监狱”,它可以提高更为高级和灵活的隔离和监管机制,除了文件系统监管外,还实现了设备隔 离,用户隔离,系统资源隔离,使其更像是一种虚拟机机制了,与此相似的概念有linux下的openvz,以及Solaris下的Container。 Jail可以说是一种轻量级的虚拟机制,比较起linux下的openvz,差的地方有网络地址分配,共享库控制这两大方面.

 

如何构建Jail(本文基于FreeBSD 8.0 Release-p2)

         构建一个Jail,必备的几个参数有Jail的根目录,用户态程序,主机名以及IP地址,还有一个可选的dev。根据用户态程序的不同考虑可以将Jail做成完整的系统型Jail以及服务型Jail。

一、 构建Jail根目录

 
  
  1. # mkdir /jail/test 

二、构建用户态程序

 
  
  1. # cd /usr/src 
  2. # make world DESTDIR=/jail/test 

这里make world=make buildworld + make installworld,因此如果以前做过buildworld的话可以偷懒直接用以前build好的安装,可以节省大量时间(我试过,似乎不行,可能是哪里配置有误)

三、构建jail内系统运行需要的配置文件

 
  
  1. # make distribution DESTDIR=/jail/test 

四、修改rc.conf添加jail服务运行的必要参数,必备的有:

 
  
  1. jail_enable="YES" # 如果设为 NO 则表示不自动启动 jail 
  2. jail_list="test" # 以空格分隔的 jail 名字列表 

指定单个jail的必备参数:

 
  
  1. jail_test_rootdir="/jail/test" # jail 的根目录 
  2. jail_test_hostname="XXXX.XXXX.XXXX.XXXX" # jail 的主机名 
  3. jail_test_ip="XXXX.XXXX.XXXX.XXXX" # jail 的 IP 地址 

另外还有可选的devfs,用于控制jail里面使用哪些设备

 
  
  1. jail_test_devfs_enable="YES" # 挂接 devfs 
  2. jail_test_devfs_ruleset="test_ruleset" #  jail 中应用的devfs 规则集

 注:jail_test_devfs_enable="YES"这项虽是可选的,但一定要加上,否则会出现莫名其妙的错误,我就是因为这个,重新做前面的二三步骤三四次,浪费了不少时间。

至此Jail基本就建立完成了,现在来启动它。启动之前,我们还要来做几件准备的事情

1)为Jail指定IP

 
  
  1. ifconfig vr0 = "inet 10.4.0.6 netmask 255.255.255.0" 
  2. ifconfig vr0_alias = "inet 10.4.0.88 netmask 255.255.255.0" 

这也是BSD平台下为网卡指定另一个IP的方法,指定完,一定要重启网络服务生效

2)创建一些必要的系统文件

 
  
  1. # touch /jail/test/etc/fstab 

这个文件是个空文件,不需要添加任何东西

最后,来启动Jail

 
  
  1. # /etc/rc.d/jail start 

后续的一些配置

设置Jail的口令及SSH

SSH的配置同理,SSH好后,就和现实中的实体机一样了,想做什么就做什么吧,赶紧!