17.4.微调和管理

你可以为 jail 设置许多不同的选项,并让 FreeBSD 主机系统与 jail 相交互,以支持更高级别的应用程序。本节介绍了:

  • 一些可用于微调 jail 行为和安全限制的选项。
  • 一些可以通过 FreeBSD ports 获得的用于 jail 管理的高级应用程序,他们可用于实现基于 jail 的整体解决方案。

17.4.1.FreeBSD 中用于调整 Jail 的系统工具

对 jail 的配置微调主要通过设置 sysctl(8)open in new window 变量来完成。系统提供了一个特殊的 sysctl 子树,全部相关的选项均在这棵子树中;=这就是 FreeBSD 内核的 security.jail.* 选项子树。以下是与 jail 有关的主要 sysctl,以及这些变量的默认值。这些名称的意思不言自明,但有关它们的更多信息,请参阅 jail(8)open in new windowsysctl(8)open in new window 手册页。

  • security.jail.set_hostname_allowed: 1
  • security.jail.socket_unixiproute_only: 1
  • security.jail.sysvipc_allowed: 0
  • security.jail.enforce_statfs: 2
  • security.jail.allow_raw_sockets: 0
  • security.jail.chflags_allowed: 0
  • security.jail.jailed: 0

这些变量可以由 主机系统 的系统管理员用来增加或删除默认施加在 root 用户身上的一些限制。注意,某些限制是不能被移除的。不允许 jail(8)open in new window 内部的 root 挂载或卸载文件系统。在 jail 中的 root 用户也不能加载或卸载 devfs(8)open in new window 规则集,不能设置防火墙规则,也不能做许多其他需要修改内核内数据的管理操作,比如设置内核的 securelevel

FreeBSD 的基本系统包含一组基本的工具,用于查看有关活动 jail 的信息,以及连接 jail 并执行管理。jls(8)open in new windowjexec(8)open in new window 命令都是 FreeBSD 基本系统的一部分,可以用来执行以下简单的任务:

  • 列出使用中的 jail 及其相应的 jail 标识(JID)、IP 地址、主机名和路径。

  • 从主机系统连接到正在运行的 jail,并在 jail 内部运行命令或在 jail 内部执行管理任务。这在 root 用户想要干净利落地关闭 jail 时尤其有用。jexec(8)open in new window 工具也可用于在 jail 中启动 shell,以便在其中进行管理。例如:

    # jexec 1 tcsh
    

17.4.2.FreeBSD Ports 中的高级管理工具

在用于 jail 管理的众多第三方工具中,最完整和最有用的软件之一是 sysutils/ezjailopen in new window。它是一组有助于 jail(8)open in new window 管理的脚本。有关详细信息,请参阅手册中有关 ezjail 的部分open in new window

17.4.3.给 Jail 打补丁与更新

应该在主机操作系统中对 jail 进行更新,因为在 jail 内部给用户空间打补丁的尝试可能会失败,因为 FreeBSD 中默认禁止在 jail 中使用 chflags(1)open in new window,而这会阻止某些文件的替换。可以改变这种机制,但建议使用 freebsd-update(8)open in new window 来维护 jail。用 -b 指定要更新的 jail 的路径。

要将 jail 更新到它正在运行的 FreeBSD 版本的最新补丁版本,需要在主机上执行以下命令:

# freebsd-update -b /here/is/the/jail fetch
# freebsd-update -b /here/is/the/jail install

要将 jail 升级到新的主要或次要版本,请首先按照“执行主要和次要版本升级”open in new window中所述升级主机系统。升级并重新引导主机后,再升级 jail。例如,要从 12.2-RELEASE 升级到 12.3-RELEASE,请在主机上运行:

# freebsd-update -b /here/is/the/jail --currently-running 12.2-RELEASE -r 12.3-RELEASE upgrade
# freebsd-update -b /here/is/the/jail install
# service jail restart myjail
# freebsd-update -b /here/is/the/jail install

然后,如果是主要版本升级,请重新安装所有已安装的软件包并再次重新启动 jail。这是必需的,因为在 FreeBSD 的主要版本之间升级时 ABI 版本会发生变化。在主机上执行:

# pkg -j myjail upgrade -f
# service jail restart myjail