15.4. 微调和管理

可以为任何 jail 设置多个选项,以及将主机 FreeBSD 系统与 jail 组合的各种方法,以生成更高级别的应用程序。本节介绍:

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

15.4.1. FreeBSD 中用于 Jail 调谐的系统工具

Jail配置的微调主要通过设置 sysctl(8)open in new window 变量来完成。sysctl 的一个特殊子树作为组织所有相关选项的基础而存在 security.jail.* FreeBSD 内核选项的层次结构。以下是与 jail 相关的主要系统列表,并附有其默认值。名称应该是不言自明的,但有关它们的更多信息,请参阅 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 用户身上的一些限制。注意,有一些限制是不能被移除的。root 用户不允许在 jail(8)open in new window 内挂载或卸载文件系统。在 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
    

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

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

15.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.0-RELEASE 升级到 12.1-RELEASE,请在主机上运行:

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

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

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