【原创】FreeBSD8下jail虚拟机实践

912阅读 0评论2011-12-20 虾米小
分类:

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
Jail的优点
很多资料介绍的都比较多,我这里就不浪费篇幅。在我们实际的开发环境中,我们是用一台8核CPU、16G内存的DELL PowerEdge R710服务器充当宿主机,开了7台jail 机作内部开发服务器(主要用PHP+MySQL环境),效果还是比较让大家满意的。就是FreeBSD8自身一样,简单和稳定是其主要特点;特别是相对于Vmware的ESXI而言,配置那个绝对是一个耗时的工作量了。

安装前的准备工作:
一、宿主机的性能尽量高些,内存是越大越好;
二、/usr目录越大越好,我分的/usr大约300-400G;
三、为了权限和安装的便利,我的操作均是以root进行;
四、虚拟机上jail的IP跟我的宿主IP分别为192.168.43.128和192.168.43.129,物理bridge直接连接,其它有兴趣的话大家可依此步骤继续添加;
五、建议大家工作的实验都以64bitFreeBSD8或FreeBSD8.1为实践。

Jail的安装:
①第一步就是为 jail 选择一个位置。
这个路径是在宿主系统中 jail 的物理位置。一种常用的选择是
/usr/jail/jailname,
此处jailname 是 jail 的主机名。对于“完整” 的 jail 而言, 它通常包含了 FreeBSD 默认安装的基本系统中每个文
件的副本。这里我创建了apache 目的是做一个apache 服务的jail
mkdir ‐p /usr/jail/apache
②编译源码
cd /usr/src
/usr/src可以选择用sysisntall --> configure --> src --> DVD/CD来安装,这样速度最快。
make buildworld
③新建world
make installworld DESTDIR=/usr/jail/apache
④安装配置文件
make distribution DESTDIR=/usr/jail/apache
distribution 这个 make target 将安装全部配置文件,或者换句话说,就是将
/usr/src/etc/复制到jail环境中的/etc
※安装jail的过程也是熟悉FreeBSD目录结构的过程。
⑤安装devfs
在 jail 中不是必须要挂接devfs(8) 文件系统。而另一方面, 几乎所有的应用程序都会需要访问至少一个设备,这主要取决于应用程序的性质和目的。控制 jail 中能够访问的设备非常重要,因为不正确的配置, 很可能允许攻击者在 jail 中进行一些恶意的操作。通过 devfs(8) 实施的控制,可以通过由联机手册devfs(8) 和
devfs.conf(5) 介绍的规则集配置来实现,但为了以后能方便的ssh到jail上,这里建议安装
我直接在宿主机的/etc/rc.conf里添加如下内容
jail_apache_devfs_enable="YES" # 在jail中挂接devfs
⑥配置宿主机的/etc/rc.conf,vim /etc/rc.conf,添加内容如下:
jail_enable="YES"
jail_list="apache"

jail_apache_rootdir="/usr/jail/apache"
jail_apache_hostname=""
jail_apache_ip="192.168.43.129"
jail_apache_exec="/bin/sh /etc/rc"
jail_apache_devfs_enable="YES"

/etc/rc.conf里原有内容如下:
ifconfig_le0="inet 192.168.43.128  netmask 255.255.255.0"
defaultrouter="192.168.43.2"
hostname="mail.ewiz.com"
ifconfig_le0_alias0="inet 192.168.43.129 netmask 255.255.255.0"
#此行的目的是为了替Apaceh的jail添加IP。

⑦使用sh /etc/rc来使jail生效,不需要重启,只需要 sh /etc/rc以后,也就是使他jail enable
就可以启用jail了,然后就可以使用jls看到jail的状态了;当然也可以用/etc/rc.d/jail脚本也可以用于手工启动或停止rc.conf中配置的
jail,如 /etc/rc.d/jail start apache。

jail的管理及其配置
管理jail选择工具jailexec,可先用jls找出运行apache的jid
例如jexec 1 passwd root可以改变jail的root密码
jexec 1 csh 可以使用root和/bin/csh进入jail系统

如何启动名为apache的jail的ssh
jexec 1 vi /etc/rc.conf
rpc_bind_enable="NO"
sshd_enable="YES"
hostname=""

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

ntpd_enable="YES"
ntpd_sync_on_start="YES"
named_enable="YES"
以上选项 sendmail 是为了关闭邮件干扰
Ntpd 是为了同步时间
Rpc 绑定 no 为了在rc.conf 里面去掉网卡地址的绑定
然后是重要操作 jexec 1 sh /etc/rc 重启虚拟机的服务,不然启动不了jail之apache的ssh的。
另外,在宿主机上建一个用于apache_jail的ssh用户
jexec 1 pw useradd admin && jexec 1 passwd admin
记得把yjwan 放入wheel 便于进去可以su root 账户
jexec 1 pw groupmod wheel -m admin

如何允许你的jail能够ping
没有配置前你会很郁闷的发现,无论你ping啥,就会出现ping: socket: Operation not permitted。
如果想永久保留配置,可以在宿主机上面修改/etc/sysctl.conf 文件
加上security.jail.allow_raw_sockets=1
重启jail虚拟机
/etc/rc.d/jail restart apache

jail的其它优化
应该从宿主机 将/etc/resolv.conf 文件 复制到jail系统中即可
cp /etc/resolv.conf /usr/jail/apache/etc/resolv.conf
将宿主机的make.conf也复制过去,这样ports安装速度很快
cp /etc/make.conf /usr/jail/apache/etc/make.conf
在宿主机上将/usr/ports挂接到jail上,此行可添加到/etc/rc.conf上。
mount_nullfs /usr/ports /usr/jail/cas/usr/ports

※这里值得一说的是,由于宿主机有二个IP:192.168.43.128和192.168.43.129,所以我们ssh jail的时候,很有可能还是在宿主机上;只有jail的ssh配置成功才可能ssh上去,ssh上去看,注意看下当前的hostname和 ifconfig,不然很容易上错船了哈~

上一篇:本工具专门用于teacher.com.cn的教师全员培训之用
下一篇:IBM AIX系统硬件信息查看命令(shell脚本)