如何使用ezjail设置FreeBSD Jails

时间:2020-01-09 10:40:42  来源:igfitidea点击:

如何设置操作系统级别的虚拟化,使我可以将基于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/