如何使用ezjail设置FreeBSD Jails
如何设置操作系统级别的虚拟化,使我可以将基于FreeBSD的Unix服务器系统划分为几个独立的微型系统,称为jails?
如何通过2个公共IP地址为邮件服务器和Web服务器设置一个 Jail。
如何设置FreeBSD Jail?
FreeBSD虚拟环境下的每个 Jail都以其自己的文件,进程,用户和超级用户帐户在主机上运行。
从监禁的过程中,环境几乎与真实系统没有区别。
设置,创建和修改 Jail的最简单方法是使用称为ezjail的框架。
安装FreeBSD Jail管理实用程序ezjail
在启动时通过服务命令启用ezjail
执行以下命令:
echo 'ezjail_enable=YES' >> /etc/rc.conf
ezjail默认文件位置
/usr/jails /
:用于存储基本 Jail系统模板的默认位置。/usr/jails/flavors /
:每个 Jail的定制都可以通过flavours完成。例如添加默认的/etc/resolv.conf文件或更新现有的/etc/make.conf可以在此处完成。/usr/jails/basejail /
:基础 Jail将被导出并以只读方式挂载到每个 Jail。这样可以节省磁盘空间。/usr/local/etc/rc.d/ezjail.sh
:停止/启动/重新启动jails脚本。/usr/local/etc/ezjail.conf
:ezjail脚本的配置文件。包含用于控制ezjail rc脚本操作的设置。 ezjail-admin实用程序还可以读取该文件,以弄清应在何处执行其操作。/usr/local/etc/ezjail /
:您所有的 Jail配置文件都存储在这里。
步骤2:创建基本 Jail模板
ezjail-admin实用程序用于管理ezjail环境以及ezjail范围内的所有jail。
输入以下命令以从源创建或更新ezjails环境(即basejail),执行:
# ezjail-admin install
或使用-h选项指定镜像位置,如下所示:
# ezjail-admin install -h http://ftp.freebsd.org
您可以通过编辑/usr/local/etc/ezjail.conf文件来设置镜像位置,如下所示:
# Set mirror closet to you # ezjail_ftphost=http://ftp5.uk.freebsd.org
上面的命令将使用FreeBSD-RELEASE填充 Jail。
要用installworld填充 Jail,请运行:
# ezjail-admin update -p -i
其中:
-p
:提供用于 Jail的端口。-i
:不要运行make world。这将节省时间,并将使用步骤1中完成的现有buildworld。
创建克隆界面
执行以下两个命令来创建lo1接口,以使 Jail回送流量不通过主机回送网络接口:
echo 'cloned_interfaces="lo1"' >> /etc/rc.conf ## Restart netif ## service netif cloneup ## Verify it ## ifconfig
输出示例:
Created clone interfaces: lo1.
步骤3:创建SMTPD邮件服务器 Jail
执行以下命令以在/usr/jails/smtpd目录中将192.54.1.3作为公共IP地址创建smtpd Jail:
# ezjail-admin create smtpd 'lo1|127.0.1.1,vtnet0|192.54.1.3'
在此示例中,使用192.168.1.41 IP地址创建httpd:
# ezjail-admin create httpd 'lo1|127.0.1.1,vtnet0|192.168.1.41'
要列出 Jail,请执行:
# ezjail-admin list
输出示例:
STA JID IP Hostname Root Directory --- ---- --------------- ------------------------------ ----------------------- DS N/A 127.0.1.1 httpd /usr/jails/httpd N/A vtnet0|192.168.1.41
要启动httpd Jail,请运行:
# ezjail-admin start httpd
输出示例:
Starting jails: httpd.
要登录,请执行:
# ezjail-admin console httpd
输出示例:
root@httpd:~ #
设置root密码:
# passwd
如何启动所有Jails?
# /usr/local/etc/rc.d/ezjail start
如何停止所有 Jail?
# /usr/local/etc/rc.d/ezjail stop
如何重新启动所有Jails?
# /usr/local/etc/rc.d/ezjail restart
您还可以使用以下语法启动/停止/重新启动特定的 Jail:
# /usr/local/etc/rc.d/ezjail {start/stop/restart} jail-name # /usr/local/etc/rc.d/ezjail start httpd # /usr/local/etc/rc.d/ezjail stop smtpd.theitroad.com
如何列出所有 Jail?
使用jls命令列出所有 Jail:
# jls
或者
# ezjail-admin list
要显示更多详细信息,包括CPU集, Jail状态,多IP等,请执行:
# jls -v
如何从主机本身登录 Jail?
如下使用jexec命令将控制台追加到 Jail:
# jexec jid csh
或者
# ezjail-admin console httpd
可以使用jls命令获取jid。
使用jid 2连接到名为httpd的 Jail:
# jexec 2 csh
现在,您可以安装任何软件并与 Jail一起使用。
更新您的/etc/resolv.conf文件:
# vi /etc/resolv.conf
安装bash shell,执行:
# pkg install bash
安装Apache 2.2服务器:
# cd /usr/ports/www/apache22 # make install clean
如何使用ssh远程登录 Jail?
首先,从主机本身使用jexec命令登录。
将以下行添加到 Jail/etc/rc.conf:
# echo 'sshd_enable="YES"' >> /etc/rc.conf
打开sshd_config文件并更新listen参数以仅绑定到 JailIP。
在 Jail里启动OpenSSH服务器:
# /etc/rc.d/sshd start # sockstat -4
如何升级FreeBSD Jail?
只需运行以下命令即可将basejail更新为FreeBSD主机版本的最新修补版本:
# ezjail-admin update -u
如何仅升级端口树?
无需停止 Jail,只需运行以下命令更新所有 Jail的端口树:
# ezjail-admin update -P
Jail日志文件
默认的jail控制台文件位于/var/log目录。
例如查看httpd Jail的日志文件,执行:
# tail -f /var/log/jail_httpd_console.log # grep 'error' var/log/jail_httpd_console.log
如何添加其他 Jail?
创建db1 Jail,执行:
# ezjail-admin create db1 'lo1|127.0.1.1,vtnet0|192.168.1.42' # ezjail-admin list # ezjail-admin start db1 # ezjail-admin console db1
如何备份 Jail?
使用tar,rsync或dump命令将jail备份到另一台服务器或磁带设备。
例如tar命令将httpd备份到磁带:
# tar -zcvf /dev/sa0 /usr/jails/httpd
您还可以使用dump命令备份/jails分区上存储的所有jail:
# /sbin/dump -0uLf /dev/sa0 /jails/
以后只需转储增量更新:
# /sbin/dump -1uLf /dev/sa0 /jails/