17.4.微调和管理 =============== 你可以为 jail 设置许多不同的选项,并让 FreeBSD 主机系统与 jail 相交互,以支持更高级别的应用程序。本节介绍了: - 一些可用于微调 jail 行为和安全限制的选项。 - 一些可以通过 FreeBSD ports 获得的用于 jail 管理的高级应用程序,他们可用于实现基于 jail 的整体解决方案。 17.4.1.FreeBSD 中用于调整 Jail 的系统工具 ----------------------------------------- 对 jail 的配置微调主要通过设置 `sysctl(8) `__ 变量来完成。系统提供了一个特殊的 sysctl 子树,全部相关的选项均在这棵子树中;=这就是 FreeBSD 内核的 ``security.jail.*`` 选项子树。以下是与 jail 有关的主要 sysctl,以及这些变量的默认值。这些名称的意思不言自明,但有关它们的更多信息,请参阅 `jail(8) `__ 和 `sysctl(8) `__ 手册页。 - ``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) `__ 内部的 ``root`` 挂载或卸载文件系统。在 jail 中的 ``root`` 用户也不能加载或卸载 `devfs(8) `__ 规则集,不能设置防火墙规则,也不能做许多其他需要修改内核内数据的管理操作,比如设置内核的 ``securelevel``\ 。 FreeBSD 的基本系统包含一组基本的工具,用于查看有关活动 jail 的信息,以及连接 jail 并执行管理。\ `jls(8) `__ 和 `jexec(8) `__ 命令都是 FreeBSD 基本系统的一部分,可以用来执行以下简单的任务: - 列出使用中的 jail 及其相应的 jail 标识(JID)、IP 地址、主机名和路径。 - 从主机系统连接到正在运行的 jail,并在 jail 内部运行命令或在 jail 内部执行管理任务。这在 ``root`` 用户想要干净利落地关闭 jail 时尤其有用。\ `jexec(8) `__ 工具也可用于在 jail 中启动 shell,以便在其中进行管理。例如: .. code:: shell-session # jexec 1 tcsh 17.4.2.FreeBSD Ports 中的高级管理工具 ------------------------------------- 在用于 jail 管理的众多第三方工具中,最完整和最有用的软件之一是 `sysutils/ezjail `__\ 。它是一组有助于 `jail(8) `__ 管理的脚本。有关详细信息,请参阅\ `手册中有关 ezjail 的部分 `__\ 。 17.4.3.给 Jail 打补丁与更新 --------------------------- 应该在主机操作系统中对 jail 进行更新,因为在 jail 内部给用户空间打补丁的尝试可能会失败,因为 FreeBSD 中默认禁止在 jail 中使用 `chflags(1) `__\ ,而这会阻止某些文件的替换。可以改变这种机制,但建议使用 `freebsd-update(8) `__ 来维护 jail。用 ``-b`` 指定要更新的 jail 的路径。 要将 jail 更新到它正在运行的 FreeBSD 版本的最新补丁版本,需要在主机上执行以下命令: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # freebsd-update -b /here/is/the/jail fetch # freebsd-update -b /here/is/the/jail install 要将 jail 升级到新的主要或次要版本,请首先按照\ `“执行主要和次要版本升级” `__\ 中所述升级主机系统。升级并重新引导主机后,再升级 jail。例如,要从 12.2-RELEASE 升级到 12.3-RELEASE,请在主机上运行: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # 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 版本会发生变化。在主机上执行: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # pkg -j myjail upgrade -f # service jail restart myjail