16.4. 建立和控制 jail
上一页 | 第 16 章 Jails | 下一页

## 16.4. 建立和控制 jail

一些系统管理员喜欢将 jail 分为两类： “完整的” jail， 通常包含真正的 FreeBSD 系统， 以及 “服务” jail， 专用于执行一个可能使用特权的应用或服务。 这只是一种概念上的区分， 并不影响如何建立 jail 的过程。 在联机手册 jail(8) 中对如何创建 jail 进行了清晰的阐述：

`#` `setenv D `/here/is/the/jail`` `#` `mkdir -p $D` `#` `cd /usr/src` `#` `make buildworld` `#` `make installworld DESTDIR=$D` `#` `make distribution DESTDIR=$D` `#` `mount -t devfs devfs $D/dev`

| 第一步就是为 jail 选择一个位置。 这个路径是在宿主系统中 jail 的物理位置。 一种常用的选择是 `/usr/jail/`jailname``， 此处 `jailname` 是 jail 的主机名。 `/usr/` 文件系统通常会有足够的空间来保存 jail 文件系统， 对于 “完整” 的 jail 而言， 它通常包含了 FreeBSD 默认安装的基本系统中每个文件的副本。
| 如果你已经通过使用 `make world` 或者 `make buildworld` 重新编译过了你的 userland， 则可以跳过这一步骤并把现有的 userland 安装进新的 jail。
| 这个命令将在 jail 目录中安装所需的可执行文件、 函数库以及联机手册等。
| `distribution` 这个 make target 将安装全部配置文件， 或者换句话说， 就是将 `/usr/src/etc/` 复制到 jail 环境中的 `/etc`： `$D/etc/`。
| 在 jail 中不是必须要挂接 devfs(8) 文件系统。 而另一方面， 几乎所有的应用程序都会需要访问至少一个设备， 这主要取决于应用程序的性质和目的。 控制 jail 中能够访问的设备非常重要， 因为不正确的配置， 很可能允许攻击者在 jail 中进行一些恶意的操作。 通过 devfs(8) 实施的控制， 可以通过由联机手册 devfs(8) 和 devfs.conf(5) 介绍的规则集配置来实现。

一旦装好了 jail， 就可以使用 jail(8) 工具来安装它了。 jail(8) 工具需要四个必填参数， 这些参数在 第 16.3.1 节 “Jail 是什么” 中进行了介绍。 除了这四个参数之外， 您还可以指定一些其他参数， 例如， 以特定用户身份来在 jail 中运行程序等等。 这里， ``command`` 参数取决于您希望建立的 jail 的类型； 对于 虚拟系统， 可以选择 `/etc/rc`， 因为它会完成真正的 FreeBSD 系统启动所需的操作。 对于 服务 jail， 执行的命令取决于将在 jail 中运行的应用程序。

Jail 通常应在系统启动时启动， 因此， FreeBSD `rc` 机制提供了一些很方便的机制来简化这些工作。

1. 在引导时需要启动的 jail 列表应写入 rc.conf(5) 文件：

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

   ### 注意:

   在 `jail_list` 中的名字中， 可以使用字母和数字， 而不应使用其他字符。

2. 对于 `jail_list` 中列出的 jail， 还应指定一系列对应的 rc.conf(5) 设置， 用以描述具体的 jail：

   jail_`www`_rootdir="/usr/jail/www" # jail 的根目录 jail_`www`_hostname="`www`.example.org" # jail 的主机名 jail_`www`_ip="192.168.0.10" # jail 的 IP 地址 jail_`www`_devfs_enable="YES" # 在 jail 中挂接 devfs jail_`www`_devfs_ruleset="`www_ruleset`" # 在 jail 中应用的devfs 规则集

   默认情况下， 在 rc.conf(5) 中配置启动的 jail 会执行其中的 `/etc/rc` 脚本， 也就是说， 默认情况下将 jail 作为虚拟系统方式来启动。 对于服务 jail， 您应另外指定启动命令， 方法是设置对应的 `jail_`jailname`_exec_start` 配置。

   ### 注意:

   如欲了解全部可用的选项， 请参阅联机手册 rc.conf(5)。

`/etc/rc.d/jail` 脚本也可以用于手工启动或停止 `rc.conf` 中配置的 jail：

`#` `/etc/rc.d/jail start `www`` `#` `/etc/rc.d/jail stop `www``

目前， 尚没有一种方法来很干净地关闭 jail(8)。 这是因为通常用于正常关闭系统的命令， 目前尚不能在 jail 中使用。 目前， 关闭 jail 最好的方式， 是在 jail 外通过 jexec(8) 工具， 在 jail 中执行下列命令：

`#` `sh /etc/rc.shutdown`

更进一步的详细说明， 请参见联机手册 jail(8)。

上一页 | 上一级 | 下一页
16.3. 介绍 | 起始页 | 16.5. 微调和管理

本文档和其它文档可从这里下载： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.