系统设计指南


Red Hat Enterprise Linux 8

设计 RHEL 8 系统

Red Hat Customer Content Services

摘要

此内容涵盖了如何开始使用 Red Hat Enterprise Linux 8。要了解有关 Red Hat Enterprise Linux 技术功能和限制的信息,请参阅 https://access.redhat.com/articles/rhel-limits

对红帽文档提供反馈

我们感谢您对我们文档的反馈。让我们了解如何改进它。

通过 Jira 提交反馈(需要帐户)

  1. 登录到 Jira 网站。
  2. 单击顶部导航栏中的 Create
  3. Summary 字段中输入描述性标题。
  4. Description 字段中输入您对改进的建议。包括文档相关部分的链接。
  5. 点对话框底部的 Create

部分 I. 安装的设计

第 1 章 系统要求和支持的构架

Red Hat Enterprise Linux 8 在混合云部署环境中提供稳定、安全、持续的基础,并提供更迅速地提供工作负载所需的工具。您可以将 RHEL 部署为受支持的 hypervisor 和云提供商环境以及物理基础架构上的客户机,因此您的应用程序可以利用领先的硬件架构平台中的创新。

在安装前,请查看为系统、硬件、安全性、内存和 RAID 提供的指南。

如果要将您的系统用作虚拟化主机,请查看 虚拟化所需的硬件要求

Red Hat Enterprise Linux 支持以下构架:

  • AMD 和 Intel 64 位构架
  • 64 位 ARM 架构
  • IBM Power Systems, Little Endian
  • 64 位 IBM Z 架构

1.1. 支持的安装目标

安装目标是保存 Red Hat Enterprise Linux 并引导系统的存储设备。Red Hat Enterprise Linux 支持用于 IBMZ、IBM Power、AMD64、Intel 64 和 64 位 ARM 系统的以下安装目标:

  • 通过标准内部接口(如 DASD、SCSI、SATA 或 SAS)连接的存储
  • Intel64、AMD64 和 arm64 构架上的 BIOS/固件 RAID 设备
  • Intel64 和 AMD64 架构上扇区模式下的 NVDIMM 设备,由 nd_pmem 驱动程序支持。
  • 通过光纤通道主机总线适配器连接的存储,如 DASD (仅限 IBM Z 架构)和 SCSI LUN,包括多路径设备。有些操作可能需要厂商提供的驱动程序。
  • Xen 虚拟机上 Intel 处理器上的 Xen 块设备.
  • KVM 虚拟机上 Intel 处理器上的 VirtIO 块设备.

红帽不支持安装到 USB 盘或 SD 内存卡。有关支持第三方虚拟化技术的详情,请查看 红帽硬件兼容性列表

1.2. 系统规格

Red Hat Enterprise Linux 安装程序自动侦测并安装您的系统硬件,因此您不必提供具体系统信息。然而,对于某些 Red Hat Enterprise Linux 安装场景,建议您记录系统规格以备将来参考。这些情况包括:

使用自定义分区布局安装 RHEL

Record:附加到系统的磁盘的模型号、大小、类型和接口。例如: SATA0 上的 Seagate ST3320613AS 320 GB、SATA1 上的 Western Digital WD7500AAKS 750 GB。

在现有系统中将 RHEL 作为附加操作系统安装

Record:系统中使用的分区。此信息可以包括文件系统类型、设备节点名称、文件系统标签和大小,并允许您在分区过程中识别特定的分区。如果某个操作系统是 Unix 操作系统,Red Hat Enterprise Linux 可能会报告不同的设备名称。通过执行与 mount 命令和 blkid 命令等效的命令,以及在 /etc/fstab 文件中可以找到其他信息。

如果安装了多个操作系统,Red Hat Enterprise Linux 安装程序会尝试自动探测它们,并配置引导装载程序来引导它们。如果没有自动探测到它们,您可以手动配置附加操作系统。

从本地磁盘上的镜像安装 RHEL

Record:保存镜像的磁盘和目录。

从网络位置安装 RHEL

如果需要手动配置网络,即不使用 DHCP。

Record:

  • IP 地址
  • 子网掩码
  • 网关的 IP 地址
  • 服务器 IP 地址(如果需要)

如果您需要网络支持,请联系您的网络管理员。

在 iSCSI 目标上安装 RHEL

Record:iSCSI 目标的位置。根据您的网络,可能需要 CHAP 用户名和密码,以及反向 CHAP 用户名和密码。

如果系统是某个域的一部分,请安装 RHEL

验证域名是否由 DHCP 服务器提供。如果没有,在安装过程中输入域名。

1.3. 磁盘和内存要求

如果安装了一些操作系统,必须确定分配的磁盘空间与 Red Hat Enterprise Linux 要求的磁盘空间分离。在某些情况下,将特定分区专用于 Red Hat Enterprise Linux 很重要,例如 AMD64、Intel 64 和 64 位 ARM,至少两个分区(/swap)必须专用于 RHEL,对于 IBM Power 系统服务器,至少有三个分区(/swapPReP 引导分区)必须专用于 RHEL。

另外,您必须有至少 10 GiB 的可用磁盘空间。要安装 Red Hat Enterprise Linux,必须至少有 10GiB 未分区磁盘空间或可删除分区。如需更多信息,请参阅 分区参考

Expand
表 1.1. 最低 RAM 要求
安装类型最小 RAM

本地介质安装(USB、DVD)

  • 1.5 GiB 用于 aarch64、IBM Z 和 x86_64 架构
  • 对于 ppc64le 架构,3 GiB

NFS 网络安装

  • 1.5 GiB 用于 aarch64、IBM Z 和 x86_64 架构
  • 对于 ppc64le 架构,3 GiB

HTTP、HTTPS 或者 FTP 网络安装

  • 3 GiB 用于 IBM Z 和 x86_64 架构
  • 对于 aarch64 和 ppc64le 架构,4 GiB

可使用比最低要求小的内存完成安装。具体的要求取决于您的环境和安装路径。测试各种配置,以确定您环境所需的最小 RAM。使用 Kickstart 文件安装 Red Hat Enterprise Linux 与标准安装有相同的最小 RAM 要求。然而,如果您的 Kickstart 文件包含需要额外内存的命令,或者将数据写入 RAM 磁盘,则可能需要额外的 RAM。如需更多信息,请参阅 自动安装 RHEL

1.4. 图形显示器分辨率要求

您的系统必须具有以下最低分辨率,以确保 Red Hat Enterprise Linux 的顺利和无错安装。

Expand
表 1.2. 显示器分辨率
产品版本解决方案

Red Hat Enterprise Linux 8

最小 :800 x 600

建议 :1026 x 768

1.5. UEFI 安全引导和 Beta 版本要求

如果您计划在启用了 UEFI 安全引导的系统中安装 Red Hat Enterprise Linux Beta 版本,请首先禁用 UEFI 安全引导选项,然后开始安装。

UEFI 安全引导要求操作系统内核使用可识别的私钥签名,而系统固件使用相应的公钥对该私钥进行了验证。对于 Red Hat Enterprise Linux Beta 版本,内核使用特定于红帽 Beta 的公钥进行签名,系统默认无法识别该公钥。因此,系统甚至无法引导安装介质。

第 2 章 自定义安装介质

详情请参阅 制作自定义的 RHEL 系统镜像

第 3 章 为 RHEL 创建一个可引导的安装介质

您可以从 客户门户网站 下载 ISO 文件,以准备可引导的物理安装介质,如 USB 或者 DVD。从 RHEL 8 开始,红帽不再为 ServerWorkstation 分别提供变体。Red Hat Enterprise Linux for x86_64 包括 ServerWorkstation 功能。ServerWorkstation 之间的区别是在安装或配置过程中通过系统目的角色进行管理。

从客户门户网站下载 ISO 文件后,创建一个可引导的物理安装介质,如 USB 或者 DVD ,来继续安装过程。

对于禁止了 USB 驱动器的安全环境的情况,请考虑使用镜像构建器创建和部署参考镜像。此方法可确保遵守安全策略,同时保持系统的完整性。如需了解更多详细信息,请参阅 镜像构建器文档

注意

默认情况下,安装介质中使用 inst.stage2= 引导选项,并被设置为特定标签,例如: inst.stage2=hd:LABEL=RHEL8\x86_64。如果您修改了包含运行时镜像的文件系统的默认标签,或者使用自定义流程引导安装系统,请验证标签是否已设置为正确的值。

3.1. 安装引导介质选项

引导 Red Hat Enterprise Linux 安装程序有多个选项。

完整的安装 DVD 或者 USB 闪存驱动器
使用 DVD ISO 镜像创建完整的安装 DVD 或者 USB 闪存驱动器。DVD 或者 USB 闪存驱动器可用作引导设备,并作为安装软件包的安装源。
最小安装 DVD、CD 或者 USB 闪存驱动器
使用 引导 ISO 镜像生成最小安装 CD、DVD 或者 USB 闪存驱动器,该镜像只包含引导系统并启动安装程序所需的最小文件。如果您不使用 Content Delivery Network(CDN)下载所需的软件包,则 Boot ISO 镜像需要一个包含所需软件包的安装源。
PXE 服务器
预启动执行环境 (PXE)服务器允许安装程序通过网络引导。系统引导后,您必须从不同的安装源(如本地磁盘或网络位置)完成安装。
镜像构建器
使用镜像构建器,您可以创建自定义的系统和云镜像,以便在虚拟和云环境中安装 Red Hat Enterprise Linux。

3.2. 创建可引导的 DVD

您可以使用 DVD 刻录软件和 DVD 刻录机创建可引导的安装 DVD。从 ISO 镜像文件生成 DVD 的具体步骤会有很大不同,具体取决于操作系统以及安装的刻录软件。有关从 ISO 镜像文件刻录 DVD 的具体步骤,请参考您系统的刻录软件文档。

警告

您可以使用 DVD ISO 镜像(完整安装)或 Boot ISO 镜像(最小安装)来创建可引导的 DVD。但是,DVD ISO 镜像大于 4.7 GB,因此它可能不适合单个或双层 DVD。继续操作前,请检查 DVD ISO 镜像文件的大小。当使用 DVD ISO 镜像创建可引导的安装介质时,请使用 USB 闪存。有关禁止了 USB 驱动器的环境的情况,请参阅 镜像构建器文档

3.3. 在 Linux 中创建可引导 USB 设备

您可以创建一个可引导 USB 设备,然后您可以用来在其他机器上安装 Red Hat Enterprise Linux。这个流程会覆盖 USB 驱动器上的现有数据,而没有任何警告。备份任何数据或使用一个空闪存。可引导的 USB 驱动器不能用于存储数据。

先决条件

  • 您已从 产品下载 页面下载了完整的安装 DVD ISO 或最小安装 Boot ISO 镜像。
  • 您有一个有足够容量的 USB 闪存驱动器 ISO 镜像。所需的大小会有所不同,但推荐的 USB 大小为 8 GB。

流程

  1. 将 USB 闪存驱动器连接到该系统。
  2. 打开一个终端窗口,并显示最近事件的日志。

    $ dmesg|tail
    Copy to Clipboard Toggle word wrap

    附加的 USB 闪存驱动器的消息会在日志的底部显示。记录连接设备的名称。

  3. 以 root 用户身份登录:

    $ su -
    Copy to Clipboard Toggle word wrap

    提示时请输入您的根密码。

  4. 查找分配给该驱动器的设备节点。在这个示例中,驱动器名称是 sdd

    # dmesg|tail
    [288954.686557] usb 2-1.8: New USB device strings: Mfr=0, Product=1, SerialNumber=2
    [288954.686559] usb 2-1.8: Product: USB Storage
    [288954.686562] usb 2-1.8: SerialNumber: 000000009225
    [288954.712590] usb-storage 2-1.8:1.0: USB Mass Storage device detected
    [288954.712687] scsi host6: usb-storage 2-1.8:1.0
    [288954.712809] usbcore: registered new interface driver usb-storage
    [288954.716682] usbcore: registered new interface driver uas
    [288955.717140] scsi 6:0:0:0: Direct-Access     Generic  STORAGE DEVICE   9228 PQ: 0 ANSI: 0
    [288955.717745] sd 6:0:0:0: Attached scsi generic sg4 type 0
    [288961.876382] sd 6:0:0:0: sdd Attached SCSI removable disk
    Copy to Clipboard Toggle word wrap
  5. 如果插入的 USB 设备自动挂载,请在继续执行后续步骤前将其卸载。要卸载,请使用 umount 命令。如需更多信息,请参阅 使用 umount 卸载文件系统
  6. 将 ISO 镜像直接写到 USB 设备:

    # dd if=/image_directory/image.iso of=/dev/device
    Copy to Clipboard Toggle word wrap
    • 使用您下载的 ISO 镜像文件的完整路径替换 /image_directory/image.iso
    • 使用您通过 dmesg 命令得到的设备名称替换 device

      在这个示例中,ISO 镜像的完整路径为 /home/testuser/Downloads/rhel-8-x86_64-boot.iso,设备名称为 sdd:

      # dd if=/home/testuser/Downloads/rhel-8-x86_64-boot.iso of=/dev/sdd
      Copy to Clipboard Toggle word wrap

      分区名称通常是设备名称附带一个数字后缀。例如: sdd 是设备名称,,sdd1 是设备 sdd 中的分区名称。

  7. 等待 dd 命令完成将镜像写入该设备。运行 sync 命令,来将缓存的写同步到设备。当 # 提示符出现时,代表数据传输已完成。当看到提示符时,从 root 帐户注销,并拔出 USB 驱动器。USB 驱动器现在准备用作引导设备。

3.4. 在 Windows 中创建可引导 USB 设备

您可以使用各种工具在 Windows 系统上创建一个可引导的 USB 设备。您可以使用 Fedora Media Writer ,可从 https://github.com/FedoraQt/MediaWriter/releases 下载。Fedora Media Writer 是一 个社区产品,它不被红帽支持。您可以在 https://github.com/FedoraQt/MediaWriter/issues 中报告任何问题。

创建可引导的驱动器会覆盖 USB 驱动器上的现有数据,而不会出现任何警告。备份任何数据或使用一个空闪存。可引导的 USB 驱动器不能用于存储数据。

先决条件

  • 您已从 产品下载 页面下载了完整的安装 DVD ISO 或最小安装 Boot ISO 镜像。
  • 您有一个有足够容量的 USB 闪存驱动器 ISO 镜像。所需的大小会有所不同。

流程

  1. https://github.com/FedoraQt/MediaWriter/releases 下载并安装 Fedora Media Writer。
  2. 将 USB 闪存驱动器连接到该系统。
  3. 打开 Fedora Media Writer。
  4. 在主窗口中点击 Custom Image 并选择之前下载的 Red Hat Enterprise Linux ISO 镜像。
  5. Write Custom Image 窗口中,选择要使用的驱动器。
  6. Write to disk。引导介质创建过程开始。操作完成后不要拔出驱动器。这个操作可能需要几分钟,具体要看 ISO 镜像的大小以及 USB 驱动器的写入速度。
  7. 当操作完成后,卸载 USB 驱动器。USB 驱动器现在可作为引导设备使用。

3.5. 在 macOS 上创建一个可引导 USB 设备

您可以创建一个可引导 USB 设备,然后您可以用来在其他机器上安装 Red Hat Enterprise Linux。创建可引导 USB 驱动器会覆盖之前存储在 USB 驱动器上的任何数据,而不会出现任何警告。备份任何数据或使用一个空闪存。可引导的 USB 驱动器不能用于存储数据。

先决条件

  • 您已从 产品下载 页面下载了完整的安装 DVD ISO 或最小安装 Boot ISO 镜像。
  • 您有一个有足够容量的 USB 闪存驱动器 ISO 镜像。所需的大小会有所不同。

流程

  1. 将 USB 闪存驱动器连接到该系统。
  2. 使用 diskutil list 命令识别设备路径。设备路径的格式为 /dev/disknumber,其中 number 是磁盘号。该磁盘从零(0)开始编号。通常,disk0 是 OS X 恢复磁盘,disk1 是主 OS X 安装。在以下示例中,USB 设备为 disk2:

    $ diskutil list
    /dev/disk0
    #:                       TYPE NAME                    SIZE       IDENTIFIER
    0:      GUID_partition_scheme                        *500.3 GB   disk0
    1:                        EFI EFI                     209.7 MB   disk0s1
    2:          Apple_CoreStorage                         400.0 GB   disk0s2
    3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
    4:          Apple_CoreStorage                         98.8 GB    disk0s4
    5:                 Apple_Boot Recovery HD             650.0 MB   disk0s5
    /dev/disk1
    #:                       TYPE NAME                    SIZE       IDENTIFIER
    0:                  Apple_HFS YosemiteHD             *399.6 GB   disk1
    Logical Volume on disk0s1
    8A142795-8036-48DF-9FC5-84506DFBB7B2
    Unlocked Encrypted
    /dev/disk2
    #:                       TYPE NAME                    SIZE       IDENTIFIER
    0:     FDisk_partition_scheme                        *8.1 GB     disk2
    1:               Windows_NTFS SanDisk USB             8.1 GB     disk2s1
    Copy to Clipboard Toggle word wrap
  3. 通过将 NAME、TYPE 和 SIZE 列与您的闪存驱动器进行比较来识别您的 USB 闪存驱动器。例如,NAME 应为 Finder 工具中闪存驱动器图标的标题。您还可以将这些值与闪存驱动器信息面板中的值进行比较。
  4. 卸载闪存驱动器的文件系统卷:

    $ diskutil unmountDisk /dev/disknumber
    Unmount of all volumes on disknumber was successful
    Copy to Clipboard Toggle word wrap

    该命令完成后,该闪存驱动器图标会从桌面消失。如果图标没有消失,您可能选择了错误的磁盘。尝试卸载系统磁盘会意外返回 failed to unmount 错误。

  5. 将 ISO 镜像写入闪存驱动器。macOS 为每个存储设备提供块(/dev/disk*)和字符设备(/dev/rdisk*)文件。将镜像写入 /dev/rdisknumber 字符设备比写入 /dev/disknumber 块设备要快。例如,要将 /Users/user_name/Downloads/rhel-8-x86_64-boot.iso 文件写入 /dev/rdisk2 设备,请输入以下命令:

    # sudo dd if=/Users/user_name/Downloads/rhel-8-x86_64-boot.iso of=/dev/rdisk2 bs=512K status=progress
    Copy to Clipboard Toggle word wrap
    • if= - 安装镜像的路径。
    • of= - 代表目标磁盘的原始磁盘设备 (/dev/rdisknumber)
    • bs=512K - 将块大小设置为 512 KB,以加快数据传输。
    • status=progress - 在操作过程中显示进度指示器。
  6. 等待 dd 命令完成将镜像写入该设备。当 # 提示符出现时,代表数据传输已完成。当出现提示符后,退出 root 帐户并拔出 USB 驱动器。USB 驱动器现在可作为引导设备使用。

第 4 章 引导安装介质

您可以使用 USB 或者 DVD 引导 Red Hat Enterprise Linux 安装。

您可以使用 Red Hat Content Delivery Network (CDN)注册 RHEL。CDN 是地理上分散的一系列 Web 服务器。例如,这些服务器使用有效的订阅为 RHEL 主机提供软件包和更新。

在安装过程中,从 CDN 注册并安装 RHEL 有以下优点:

  • 在安装后立即为最新的系统使用最新的软件包,并为
  • 连接到 Red Hat Insights 和启用系统目的使用集成的支持。

先决条件

  • 您已创建了一个可引导安装介质(USB 或者 DVD)。

流程

  1. 关闭您要安装 Red Hat Enterprise Linux 的系统。
  2. 断开任何与系统的驱动器连接。
  3. 打开系统。
  4. 插入可引导安装介质(USB、DVD 或者 CD)。
  5. 关闭系统但不删除引导介质。
  6. 打开系统。
  7. 您可能需要按特定键或组合键来从介质引导,或者将系统的基本输入/输出系统(BIOS)配置为从介质引导。如需更多信息,请参阅您系统附带的文档。
  8. Red Hat Enterprise Linux 引导 窗口会打开并显示有关各种可用引导选项的信息。
  9. 使用键盘中的箭头键选择您需要的引导选项,然后按 Enter 键选择引导选项。Welcome to Red Hat Enterprise Linux 窗口将打开,您可以使用图形用户界面安装 Red Hat Enterprise Linux。

    如果在 60 秒之内引导窗口中没有执行任何动作,安装程序会自动开始。

  10. 可选:编辑可用的引导选项:

    1. 基于 UEFI 的系统:E 键进入编辑模式。更改预定义的命令行来添加或删除引导选项。按 Enter 键确认您的选择。
    2. 基于 BIOS 的系统:按键盘上的 Tab 键进入编辑模式。更改预定义的命令行来添加或删除引导选项。按 Enter 键确认您的选择。

第 5 章 可选:自定义引导选项

当您在 x86_64ARM64 架构上安装 RHEL 时,您可以编辑引导选项,以根据您的特定环境自定义安装过程。

5.1. 引导选项

您可以将由空格分开的多个选项附加到引导命令行中。安装程序专用的引导选项总是以 inst 开始。以下是可用的引导选项:

带有 "=" 的选项
您必须为使用 = 的引导选项指定一个值。例如:inst.vncpassword= 选项必须包含一个值,在本例中是 password。这个示例的正确语法为 inst.vncpassword=password
没有 "=" 的选项
该引导选项不接受任何值或参数。例如: rd.live.check 选项强制安装程序在开始安装前验证安装介质。如果这个引导选项存在,安装程序会执行验证。如果引导选项不存在,则会跳过验证。

您可以使用以下方法为特定菜单条目自定义引导选项:

  • 在基于 BIOS 的系统上:按 Tab 键,并向命令行中添加自定义引导选项。您还可以按 Esc 键访问 boot: 提示,但不会预先设置所需引导选项。在这种情况下,您必须总是在使用其它引导选项前指定 Linux 选项。如需更多信息,请参阅在 BIOS 中编辑 boot: 提示符
  • 在基于 UEFI 的系统上:按 e 键,并向命令行中添加自定义引导选项。准备好按 Ctrl+X 引导修改选项时。

如需更多信息 ,请参阅为基于 UEFI 的系统编辑引导选项

5.2. 编辑 BIOS 中的 boot: 提示符

在使用 boot: 提示符时,第一个选项必须总是指定您要载入的安装程序镜像文件。在大多数情况下,您可以使用关键字来指定镜像。您可以根据要求指定附加选项。

先决条件

  • 已创建了可引导安装介质(USB、CD 或者 DVD)。
  • 已使用该介质引导安装,并打开了安装引导菜单。

流程

  1. 打开引导菜单后,按键盘上的 Esc 键。
  2. boot: 提示符现在可以访问。
  3. Tab 键显示帮助命令。
  4. Enter 键启动安装。要从 boot: 提示符返回到引导菜单,请重启系统并重新从安装介质引导。

5.3. 使用 > 提示符编辑预定义的引导选项

在基于 BIOS 的 AMD64 和 Intel 64 系统中,您可以使用 & gt; 提示符编辑预定义的引导选项。

先决条件

  • 已创建了可引导安装介质(USB、CD 或者 DVD)。
  • 已使用该介质引导安装,并打开了安装引导菜单。

流程

  1. 在引导菜单中选择一个选项,然后按键盘上的 Tab 键。可访问 > 提示符并显示可用选项。
  2. 可选:要查看完整的选项集合,请选择 Test this media and install RHEL 8
  3. > 提示符后附加您需要的选项。

    例如,要启用联邦信息处理标准(FIPS) 140 强制的加密模块自我检查,请添加 fips=1

    >vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=RHEL-9-5-0-BaseOS-x86_64 rd.live.check quiet fips=1
    Copy to Clipboard Toggle word wrap
  4. Enter 键开始安装。
  5. Esc 键取消编辑,并返回到引导菜单。

5.4. 为基于 UEFI 的系统编辑引导选项

您可以在 RHEL 安装过程中编辑基于 UEFI 的系统中的 GRUB 引导菜单来自定义参数。这允许配置特定的设置,确保安装满足其要求。

先决条件

  • 已创建了可引导安装介质(USB、CD 或者 DVD)。
  • 已使用该介质引导安装,并打开了安装引导菜单。

流程

  1. 在引导菜单窗口中选择所需选项,并按 e
  2. 在 UEFI 系统中,内核命令行以 linuxefi 开头。把光标移到 linuxefi 内核命令行的末尾。
  3. 根据需要编辑参数。例如,要启用联邦信息处理标准(FIPS) 140 强制的加密模块自我检查,请添加 fips=1

    linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=RHEL-9-4-0-BaseOS-x86_64 rd.live.\
    check quiet fips=1
    Copy to Clipboard Toggle word wrap
  4. 完成编辑后,按 Ctrl+X 使用指定的选项开始安装。

5.5. 在安装过程中更新驱动程序

您可以在 Red Hat Enterprise Linux 安装过程中更新驱动程序。更新驱动程序完全是可选的。除非需要,否则不要执行驱动程序更新。确保红帽、您的硬件厂商或可信的第三方供应商通知您在 Red Hat Enterprise Linux 安装过程中需要更新驱动程序。

5.5.1. 概述

Red Hat Enterprise Linux 支持很多硬件设备的驱动程序,但可能不支持一些新发布驱动程序。只有在不支持的驱动程序无法完成安装时才应执行驱动程序更新。通常在安装过程中需要更新驱动程序来支持特定的配置。例如:为存储适配器卡安装驱动程序,提供对您的系统存储设备的访问。

警告

驱动程序更新磁盘可能会禁用冲突内核驱动程序。在个别情况下,卸载内核模块可能会导致安装错误。

5.5.2. 驱动程序更新的类型

红帽、您的硬件零售商或可信第三方以 ISO 镜像文件的形式提供驱动程序更新。您收到 ISO 镜像文件后,请选择驱动程序更新的类型。

驱动程序更新的类型

自动
在这个驱动程序更新方法中;标有 OEMDRV 的存储设备(包括 CD、DVD 或者 USB 闪存驱动器)物理连接到系统。如果在安装启动时存在 OEMDRV 存储设备,它将被视为驱动程序更新磁盘,且安装程序会自动载入其驱动程序。
Assisted
安装程序会提示您定位驱动程序更新。您可以使用任何带 OEMDRV 以外的标签的本地存储设备。在开始安装时会指定 inst.dd 引导选项。如果您在没有参数的情况下使用这个选项,安装程序会显示所有连接到该系统的存储设备,并提示您选择包含驱动程序更新的设备。
Manual(手动)
手动指定到驱动程序更新镜像或 RPM 软件包的路径。您可以使用任何带 OEMDRV 标签的本地存储设备,或者可从安装系统访问的网络位置。在开始安装时会指定 inst.dd=location 引导选项,其中 location 是驱动程序更新磁盘或 ISO 镜像的路径。当您指定这个选项时,安装程序会尝试载入在指定位置找到的所有驱动程序更新。使用手动驱动程序更新,您可以指定本地存储设备或者网络位置(HTTP、HTTPS 或者 FTP 服务器)。您可以同时使用 inst.dd=locationinst.dd,其中 location 是驱动程序更新磁盘或 ISO 镜像的路径。在这种情况下,安装程序会尝试从位置载入所有可用的驱动程序更新,并提示您选择包含驱动程序更新的设备。
注意

在从网络位置加载驱动程序更新时,使用 ip= 选项初始化网络。

限制

在启用了安全引导技术的 UEFI 系统中,必须使用有效证书为所有驱动程序签名。红帽驱动程序使用红帽的私钥签署,并由内核中对应的公钥验证。如果您载入了额外的独立驱动程序,请确认它们已进行了签名。

5.5.3. 准备驱动程序更新

这个步骤描述了如何在 CD 和 DVD 中准备驱动程序更新。

先决条件

  • 您已收到来自红帽、您的硬件厂商或可信的第三方供应商提供的驱动程序更新 ISO 镜像。
  • 您已将驱动程序更新 ISO 镜像刻录到 CD 或者 DVD 。
警告

如果 CD 或者 DVD 中只有一个以 .iso 结尾的 ISO 镜像文件,则刻录过程将无法成功。有关如何将 ISO 镜像刻录到 CD 或者 DVD 的说明,请查看您的系统刻录软件文档。

流程

  1. 将驱动程序更新 CD 或者 DVD 插入系统的 CD/DVD 驱动器中,并使用系统的文件管理器工具浏览。
  2. 验证单个文件 rhdd3 是否可用。rhdd3 是一个签名文件,其中包含驱动程序描述和名为 rpms 的目录,其中包含具有不同架构的实际驱动程序的 RPM 软件包。

5.5.4. 执行自动驱动程序更新

这个步骤描述了如何在安装过程中执行自动驱动程序更新。

先决条件

  • 您已将驱动程序更新镜像放在带有 OEMDRV 标签的标准磁盘分区中,或将 OEMDRV 驱动程序更新镜像刻录到 CD 或者 DVD 中。在驱动程序更新过程中可能无法访问高级存储,比如 RAID 或者 LVM 卷。
  • 您已将块设备与 OEMDRV 卷标签连接到您的系统,或者在开始安装过程前将准备的 CD 或 DVD 插入系统的 CD/DVD 驱动器中。

流程

  • 完成先决条件步骤后,安装程序在系统安装过程中启动并安装时会自动载入驱动程序。

5.5.5. 执行驱动程序更新

这个步骤描述了如何在安装过程中执行驱动程序更新。

先决条件

  • 您已将没有 OEMDRV 卷标签的块设备连接到您的系统,并将驱动程序磁盘镜像复制到这个设备中,或者您已准备了一个驱动程序更新 CD 或者 DVD,并在开始安装进程前将其插入到系统的 CD 或者 DVD 驱动器中。
注意

如果您将 ISO 镜像文件刻录为 CD 或者 DVD,但没有 OEMDRV 卷标签,您可以使用没有参数的 inst.dd 选项。安装程序提供从 CD 或者 DVD 中扫描和选择驱动程序的选项。在这种情况下,安装程序不会提示您选择驱动程序更新 ISO 镜像。另一个情况是使用 CD 或者 DVD 与 inst.dd=location 引导选项 ; 这允许安装程序自动扫描 CD 或者 DVD 进行驱动程序更新。如需更多信息,请参阅 执行手动驱动程序更新

流程

  1. 在引导菜单窗口中按键盘中的 Tab 键显示引导命令行。
  2. 在命令行中附加 inst.dd 引导选项,然后按 Enter 键以执行引导过程。
  3. 在菜单中选择本地磁盘分区或者 CD 或者 DVD 设备。安装程序扫描 ISO 文件或驱动程序更新 RPM 软件包。
  4. 可选:选择驱动程序更新 ISO 文件。

    如果选择的设备或者分区包含驱动程序更新 RPM 软件包而不是 ISO 镜像文件(例如:包含驱动程序更新 CD 或者 DVD 的光驱),则不需要这一步。

  5. 选择所需驱动程序。

    1. 使用键盘上的数字键切换驱动器选择。
    2. c 键安装所选驱动程序。载入所选驱动程序并开始安装过程。

5.5.6. 执行手动驱动程序更新

这个步骤描述了如何在安装过程中手动驱动程序更新。

先决条件

  • 您已将驱动程序更新 ISO 镜像文件放在 USB 闪存驱动器或 web 服务器中,并将其连接到您的计算机。

流程

  1. 在引导菜单窗口中按键盘中的 Tab 键显示引导命令行。
  2. 在命令行中附加 inst.dd=location 引导选项,其中 location 是驱动程序更新的路径。通常,镜像文件位于 web 服务器上,例如 http://server.example.com/dd.iso 或在 USB 闪存驱动器上,例如 /dev/sdb1。您还可以指定包含驱动程序更新的 RPM 软件包,例如 http://server.example.com/dd.rpm。
  3. Enter 执行引导过程。指定位置中的可用驱动程序会自动载入并启动安装过程。

5.5.7. 禁用驱动程序

这个步骤描述了如何禁用发生故障的驱动程序。

先决条件

  • 您已引导安装程序引导菜单。

流程

  1. 在引导菜单中,按键盘中的 Tab 键显示引导命令行。
  2. modprobe.blacklist=driver_name 引导选项附加到命令行。

    使用您要禁用的驱动程序或驱动程序名称替换 driver_name,例如:

    modprobe.blacklist=ahci
    Copy to Clipboard Toggle word wrap

    使用 modprobe.blacklist= 引导选项禁用的驱动程序在安装的系统中保持禁用状态,并出现在 /etc/modprobe.d/anaconda-blacklist.conf 文件中。

  3. Enter 执行引导过程。

第 6 章 在安装程序中自定义系统

在安装的自定义阶段,您必须执行某些配置任务,以启用 Red Hat Enterprise Linux 的安装。这些任务包括:

  • 配置存储并分配挂载点。
  • 选择一个要安装软件的基础环境。
  • 为 root 用户设置密码或创建一个本地用户。

另外,您还可以进一步自定义系统,例如通过配置系统设置并将主机连接到网络。

6.1. 设置安装程序语言

您可以在开始安装前选择安装程序所使用的语言。

先决条件

  • 您已创建了安装介质。
  • 如果您使用引导 ISO 镜像文件,您可以指定一个安装源。
  • 您已引导了安装。

流程

  1. 从引导菜单中选择安装 Red Hat Enterprise Linux 选项后,会出现 Welcome to Red Hat Enterprise 屏幕
  2. Welcome to Red Hat Enterprise Linux 窗口的左侧窗格中选择语言。或者,使用文本框搜索首选语言。

    注意

    默认预选语言。如果配置了网络访问,也就是说,如果您从网络服务器而不是本地介质引导,则预先选择的语言是由 GeoIP 模块的自动位置检测功能决定的。如果您在引导命令行或 PXE 服务器配置中使用 inst.lang= 选项,则会选择您使用引导选项定义的语言。

  3. Welcome to Red Hat Enterprise Linux 右侧窗格中选择特定于您所在地区的位置。
  4. Continue 进入到图形安装窗口。
  5. 如果您在安装 Red Hat Enterprise Linux 的预发布版本,则会显示有关安装介质预发布状态的警告信息。

    1. 要继续安装,请点击 I want to proceed,或者
    2. 要退出安装并重新引导系统,请单击 I want to exit

6.2. 配置存储设备

您可以在各种存储设备中安装 Red Hat Enterprise Linux。您可以在安装目的窗口配置基本的、可以通过本地访问的存储设备。直接连接到本地系统的基本存储设备(如磁盘和固态驱动器)都显示在窗口的 Local Standard Disks 部分中。在 64 位 IBM Z 上,本部分包含激活的 Direct Access Storage Devices(DASD)。

警告

一个已知问题,在安装完成后,防止将配置为 HyperPAV 别名的 DASD 自动附加到系统。这些存储设备会在安装过程中可用,但完成安装并重启后无法立即访问。要附加 HyperPAV 别名设备,请手动将它们添加到系统的 /etc/dasd.conf 配置文件中。

6.2.1. 配置安装目的地

您可以使用 Installation Destination 窗口来配置存储选项,例如,您要用作 Red Hat Enterprise Linux 安装的安装目标的磁盘。您必须至少选择一个磁盘。

先决条件

  • 打开 安装概述 窗口。
  • 如果您计划使用已包含数据的磁盘,请确保备份您的数据。例如: 如果要缩小现有 Microsoft Windows 分区并将 Red Hat Enterprise Linux 安装为第二个系统,或者要升级之前的 Red Hat Enterprise Linux 版本。操作分区总是会带有风险。例如,如果因为磁盘中的某种原因造成进程中断或者失败,则可能会丢失磁盘中的数据。

流程

  1. 安装概述 窗口中点击 Installation Destination。在 Installation Destination 窗口中执行以下操作:

    1. Local Standard Disks 部分中,选择您需要的存储设备;白色复选标记表示您的选择。在安装过程中,没有白色复选标记的磁盘不会被使用;如果您选择自动分区,它们会被忽略,且在手动分区中不可用。

      Local Standard Disks 显示所有本地可用的存储设备,如 SATA、IDE 和 SCSI 磁盘、USB 闪存和外部磁盘。安装程序启动后,任何连接的存储设备都不会被检测。如果您使用可移动驱动器安装 Red Hat Enterprise Linux,在删除了该设备后您的系统将无法使用。

    2. 可选:如果要配置额外的本地存储设备来连接新磁盘,请点击窗口右下角的 Refresh 链接。此时会打开 Rescan Disks 对话框。

      1. Rescan Disks 并等到扫描过程完成。

        当您点击扫描磁盘时,您在安装过程中进行的所有存储更改都会丢失。

      2. 点击 OK 返回 安装目标 窗口。所有探测到的磁盘(包括新磁盘)都会在 本地标准磁盘 部分显示。
  2. 可选:点 Add a disk 添加专用的存储设备。

    存储设备选择 窗口将打开,并列出安装程序可访问的所有存储设备。

  3. 可选:在 Storage Configuration 下,为自动分区选择 Automatic 单选按钮。

    您还可以配置自定义分区。如需了解更多详细信息,请参阅 配置手动分区

  4. 可选:选择 I would like to make additional space available 以便从现有分区布局回收空间。例如,如果您想要使用的磁盘已有不同的操作系统,并且您希望使该系统的分区小些,以便为 Red Hat Enterprise Linux 留出更多空间。
  5. 可选:选择 Encrypt my data 来加密除需要使用 Linux Unified Key Setup (LUKS)来引导系统(如 /boot) 所需分区以外的所有分区。加密磁盘以添加额外的安全层。

    1. DoneDisk Encryption Passphrase 对话框将打开。

      1. PassphraseConfirm 字段中输入您的密码短语。
      2. 单击 Save Passphrase 来完成磁盘加密。

        警告

        如果您丢失了 LUKS 密码短语,那么就完全无法访问所有加密的分区及其数据。丢失的密码短语是无法找回的。但是,如果您执行 Kickstart 安装,您可以保存加密密码短语并在安装过程中生成加密密码短语备份。如需更多信息,请参阅 自动安装 RHEL 文档。

  6. 可选:单击窗口左下角的 Full disk summary and bootloader 链接,来选择包含引导装载程序的存储设备。如需更多信息,请参阅 配置引导装载程序

    在大多数情况下,将启动加载器保留在默认位置就足够了。例如,需要从另一个引导装载程序进行链载入的系统需要手工指定引导驱动器。

  7. Done
  8. 可选:如果您选择了 自动分区,并且 我希望提供额外空间可用选项,或者 所选磁盘上没有足够的可用空间来安装 Red Hat Enterprise Linux,则会出现 Reclaim Disk Space 对话框。它列出所有配置的磁盘设备,以及这些设备上的所有分区。对话框显示系统使用当前选定的软件包集安装所需的最小磁盘空间信息,以及您已回收了多少空间。要启动回收进程:

    1. 查看显示的可用存储设备列表。Reclaimable Space 列显示每个条目可以回收多少空间。
    2. 选择要回收空间的磁盘或分区。
    3. 使用 Shrink 按钮,来使用分区上的可用空间,同时保留现有数据。
    4. 使用 Delete 按钮删除所选磁盘上的该分区或所有分区,包括现有数据。
    5. 使用 Delete all 按钮删除所有磁盘上所有现有的分区,包括现有数据,并使此空间可用于安装 Red Hat Enterprise Linux。
    6. Reclaim space 来应用更改并返回图形安装。

      除非点了 Installation Summary 窗口中的 Begin Installation,不会有磁盘变化。Reclaim Space 对话框仅标记用于调整大小或删除的分区,不会执行任何操作。

6.2.2. 安装目的地配置过程中的特殊情况

以下是配置安装目的地时需要考虑的一些特殊情况:

  • 某些 BIOS 类型不支持从 RAID 卡引导。在这些实例中,/boot 分区必须在 RAID 阵列之外的分区上创建,比如在单独的磁盘上。对于使用有问题的 RAID 卡,必需使用内部磁盘创建分区。软件 RAID 设置也需要 /boot 分区。如果选择自动为系统分区,应该手动编辑 /boot 分区。
  • 要将 Red Hat Enterprise Linux 引导装载程序配置为不同的引导装载程序的 链加载,您必须通过点击 Installation Destination 窗口中的 Full disk summary and bootloader 链接来手动指定引导驱动器。
  • 当您在具有多路径和非多路径存储设备的系统上安装 Red Hat Enterprise Linux 时,安装程序中的自动分区布局会创建包含多路径和非多路径设备组合的卷组。这违背了多重路径存储的目的。在 Installation Destination 窗口中选择多路径或非多路径设备。或者手动分区。

6.2.3. 配置引导装载程序

Red Hat Enterprise Linux 使用 GRand Unified Bootloader 版本 2(GRUB2)作为 AMD64、 Intel 64、IBM Power Systems 和 ARM 的引导加载程序。对于 64 位 IBM Z,使用 zipl 引导装载程序。

引导装载程序是系统启动时所运行的第一个程序,它负责载入和向操作系统传输控制。GRUB2 可以引导任何兼容的操作系统(包括 Microsoft Windows),也可以使用链加载将控制权传给其他不支持的操作系统的引导加载程序。

警告

安装 GRUB2 可能会覆盖您现有的引导装载程序。

如果已经安装了操作系统,Red Hat Enterprise Linux 安装程序会尝试自动探测并配置引导装载程序,以启动另一个操作系统。如果没有检测到引导装载程序,您可以在完成安装后手动配置任意附加操作系统。

如果正在安装有多个磁盘的 Red Hat Enterprise Linux 系统,您可能需要手动指定要安装引导装载程序的磁盘。

流程

  1. 安装目标 窗口中点 Full disk summary and bootloader此时会打开 Selected Disks 对话框。

    引导装载程序安装在您选择的设备上,或者 UEFI 系统上;EFI 系统分区 在引导分区过程中创建在目标设备上。

  2. 要更改引导设备,请从列表中选择设备并点击 Set as Boot Device。您只能将一个设备设定为引导设备。
  3. 要禁用新的引导装载程序安装,请选择当前标记为引导的设备,然后单击 Do not install boot loader。这样可保证不在任何设备中安装 GRUB2
警告

如果选择不安装引导装载程序,则不能直接引导系统,而且必须使用另外一种引导方法,如独立的商业引导装载程序应用程序。只有在您有其它引导系统的方法时才使用这个选项。

引导装载程序可能还需要创建一个特殊分区,具体取决于您的系统是否使用 BIOS 或 UEFI 固件,或者如果引导驱动器有 GUID 分区表 (GPT)或 主引导记录(MBR,也称为 msdos)标签。如果您使用自动分区,安装程序会创建该分区。

6.2.4. 存储设备选择

存储设备选择窗口列出了安装程序可访问的所有存储设备。根据您的系统和可用的硬件, 一些标签可能无法显示。在以下标签页下对设备进行分组:

多路径设备
存储设备可通过多个路径访问,例如通过同一系统上的多个 SCSI 控制器或光纤通道端口。安装程序只检测序列号为 16 或 32 个字符的多路径存储设备。
其他 SAN 设备
在存储区域网络(SAN)上可用的设备。
固件 RAID
附加到固件 RAID 控制器的存储设备。
NVDIMM 设备
在特定情况下,Red Hat Enterprise Linux 8 可以在 Intel 64 和 AMD64 架构上的扇区模式下引导和运行(NVDIMM)设备。
IBM Z 设备
通过 zSeries Linux FCP(光纤通道协议)驱动程序连接的存储设备或逻辑单元(LUN) DASD。

6.2.5. 过滤存储设备

在存储设备选择窗口中,您可以通过其全球识别符(WWID)或端口、目标或逻辑单元号(LUN)过滤存储设备。

先决条件

  • 打开 Installation Summary 窗口。

流程

  1. Installation Summary 窗口中点击 Installation Destination。此时会打开 Installation Destination 窗口,列出所有可用的驱动器。
  2. Specialized & Network Disks 部分中,点 Add a disk。存储设备选择窗口将打开。
  3. Search by 标签页来根据端口、目标、LUN 或 WWID 进行搜索。

    通过 WWID 或 LUN 搜索,需要在对应的输入文本字段中输入额外的值。

  4. 搜索下拉菜单中选择您需要的选项。
  5. Find 开始搜索。每个设备都会显示在一个独立的行中,并有一个对应的复选框。
  6. 选择要启用安装过程中所需设备的复选框。

    之后在安装过程中,您可以选择在任意选择的设备中安装 Red Hat Enterprise Linux,您可以选择自动挂载其它选择的设备作为安装系统的一部分。所选设备不会被安装过程自动清除,而选择设备不会将数据存储在设备中。

    注意

    您可以在安装后通过修改 /etc/fstab 文件在系统中添加设备。

  7. Done 返回 Installation Destination 窗口。

所有您没有选择的存储设备都会在安装程序中完全隐藏。要使用不同的引导装载程序链载入引导装载程序,请选择所有存在的设备。

6.2.6. 使用高级存储选项

要使用高级存储设备,您可以配置 iSCSI(TCP/IP 上的 SCSI)目标或 FCoE(以太网光纤通道)SAN(存储区域网络)。

要使用 iSCSI 存储设备进行安装,安装程序必须能够将其发现为 iSCSI 目标,并能够创建 iSCSI 会话来访问它们。这些步骤的每一步都可能需要 Challenge Handshake Authentication Protocol(CHAP)身份验证的用户名和密码。此外,您可以配置 iSCSI 目标,来在目标(反向 CHAP)连接的系统上验证 iSCSI 启动器,以进行发现和会话。CHAP 和反向 CHAP 一起使用时称为双向 CHAP。双向 CHAP 为 iSCSI 连接提供最高级别的安全性,尤其是当 CHAP 身份验证和反向 CHAP 身份验证的用户名和密码不同时。

重复 iSCSI 发现和 iSCSI 登录步骤,以添加所有必需的 iSCSI 存储。第一次尝试发现后,您无法更改 iSCSI initiator 的名称。要更改 iSCSI initiator 名称,您必须重新开始安装。

6.2.6.1. 发现并启动 iSCSI 会话

Red Hat Enterprise Linux 安装程序可以通过两种方式发现并登录到 iSCSI 磁盘:

iSCSI Boot Firmware Table (iBFT)
当安装程序启动时,它会检查 BIOS 或系统附加的引导 ROM 是否支持 iBFT。它是可以从 iSCSI 引导的系统的 BIOS 扩展。如果 BIOS 支持 iBFT,安装程序会从 BIOS 读取配置的引导磁盘的 iSCSI 目标信息,并登录到此目标,使它可用作安装目标。要自动连接到 iSCSI 目标,请激活网络设备以访问目标。为此,请使用 ip=ibft 引导选项。如需更多信息,请参阅 网络引导选项
手动发现并添加 iSCSI 目标
您可以在安装程序的图形用户界面中发现并启动 iSCSI 会话,来识别可用的 iSCSI 目标(网络存储设备)。

先决条件

  • 打开 Installation Summary 窗口。

流程

  1. Installation Summary 窗口中点击 Installation Destination。此时会打开 Installation Destination 窗口,列出所有可用的驱动器。
  2. Specialized & Network Disks 部分中,点 Add a disk。存储设备选择窗口将打开。
  3. 单击 Add iSCSI target。此时会打开 Add iSCSI Storage Target 窗口。

    重要

    您不能将 /boot 分区放在使用此方法(包含 /boot 分区的 iSCSI 目标必须配置为与 iBFT 一起使用)手动添加的 iSCSI 目标上。但是,如果安装的系统预期从具有固件 iBFT 以外的方法提供的 iBFT 配置的 iSCSI 启动(例如使用 iPXE),则您可以使用 inst.nonibftiscsiboot 安装程序引导选项删除 /boot 分区限制。

  4. Target IP Address 字段中输入 iSCSI 目标的 IP 地址。
  5. 在 iSCSI 启动器的 iSCSI Initiator Name 字段中输入 iSCSI 限定名称(IQN)格式的名称。有效的 IQN 条目包含以下内容:

    • 字符串 iqn. (注意句号)。
    • 指定组织 Internet 域或子域名注册的年份和月份的日期代码,以四位数字表示年份,一个短划线,两位数字表示月份,后跟一个句点。例如,2010-09. 代表 2010 年 9 月。
    • 您的组织的 Internet 域或子域名,以与顶级域相反的顺序显示。例如,com.example.storage 代表子域 storage.example.com
    • 一个冒号,后面接着一个在您的域或子域中指定这个特定 iSCSI initiator 的字符串。例如 :diskarrays-sn-a8675309

      一个完整的 IQN:iqn.2010-09.storage.example.com:diskarrays-sn-a8675309。安装程序使用这种格式的名称预填充 iSCSI Initiator Name 字段,来帮助您使用结构。如需更多与 IQN 相关的信息,请参阅 tools.ietf.org 中的 RFC 3720 - Internet Small Computer Systems Interface (iSCSI)3.2.6. iSCSI Names 部分,以及 tools.ietf.org 中的 RFC 3721 - Internet Small Computer Systems Interface (iSCSI) Naming and Discovery1. iSCSI Names and Addresses 部分。

  6. 选择 Discovery Authentication Type 下拉菜单来指定用于 iSCSI 发现的验证类型。可用的选项如下:

    • No credentials
    • CHAP pair
    • CHAP pair and a reverse pair
  7. 执行以下操作之一:

    1. 如果您选择了 CHAP pair 作为验证类型,在 CHAP UsernameCHAP Password 中输入 iSCSI 目标的用户名和密码。
    2. 如果选择 CHAP pair and a reverse pair 作为验证类型,在 CHAP UsernameCHAP Password 的字段中输入 iSCSI 目标的用户名和密码。在Reverse CHAP UsernameReverse CHAP Password 项中输入 iSCSI initiator 的用户名和密码。
  8. 可选:选中 Bind targets to network interfaces 复选框。
  9. Start Discovery

    安装程序会尝试根据提供的信息发现 iSCSI 目标。如果成功发现, 添加 iSCSI 存储目标窗口会显示在目标上发现的所有 iSCSI 节点列表。

  10. 选中您要用于安装的节点的复选框。

    Node login authentication type 菜单包括了与 Discovery Authentication Type 菜单相同的选项。但是,如果您需要发现身份验证的凭证,请使用相同的凭证登录到发现的节点。

  11. 单击额外的 Use the credentials from discovery 下拉菜单。当您提供正确的凭证时,Log In 按钮变为可用。
  12. 点击 Log In 启动 iSCSI 会话。

安装程序使用 iscsiadm 查找并登录到 iSCSI 目标,iscsiadm 会自动将这些目标的任何信息存储在 iscsiadm iSCSI 数据库中。然后,安装程序将此数据库复制到安装的系统,并标记任何不用于 root 分区的 iSCSI 目标,以便系统在启动时可以自动登录到这些 iSCSI 目标。如果 root 分区放在 iSCSI 目标上,则 initrd 会登录到这个目标,且安装程序不会将这个目标包含在启动脚本中,以避免多次尝试登录到同一目标。

6.2.6.2. 配置 FCoE 参数

您可以通过相应地配置 FCoE 参数,从 Installation Destination 窗口中发现 FCoE(以太网上的光纤通道)设备。

先决条件

  • 打开 Installation Summary 窗口。

流程

  1. Installation Summary 窗口中点击 Installation Destination。此时会打开 Installation Destination 窗口,列出所有可用的驱动器。
  2. Specialized & Network Disks 部分中,点 Add a disk。存储设备选择窗口将打开。
  3. Add FCoE SAN。此时会打开一个对话框,供您为发现的 FCoE 存储设备配置网络接口。
  4. NIC 下拉菜单中选择连接到 FCoE 交换机的网络接口。
  5. 点击 Add FCoE disk(s) 在网络中扫描 SAN 设备。
  6. 选择所需的复选框:

    • Use DCB:数据中心桥接 (DCB)是以太网协议的一组增强,旨在提高存储网络和集群中以太网连接的效率。选择复选框来启用或禁用安装程序对 DCB 的感知。仅对需要基于主机的 DCBX 客户端的网络接口启用此选项。对于使用硬件 DCBX 客户端的接口的配置,请禁用复选框。
    • Use auto vlan :Auto VLAN 默认启用,并指示是否应该执行 VLAN 发现。如果启用了此复选框,那么当验证链路配置后,FIP(FCoE 启动协议)VLAN 发现协议要运行在以太网接口上。如果尚未配置它们,则会自动创建任何发现的 FCoE VLAN 的网络接口,FCoE 实例会创建在 VLAN 接口上。
  7. Installation Destination 窗口的 Other SAN Devices 标签页中会显示所发现的 FCoE 设备。
6.2.6.3. 配置 DASD 存储设备

您可以从 Installation Destination 窗口中发现并配置 DASD 存储设备。

先决条件

  • 打开 Installation Summary 窗口。

流程

  1. Installation Summary 窗口中点击 Installation Destination。此时会打开 Installation Destination 窗口,列出所有可用的驱动器。
  2. Specialized & Network Disks 部分中,点 Add a disk。存储设备选择窗口将打开。
  3. Add DASD ECKDAdd DASD Storage Target 对话框会打开,提示您输入一个设备号,如 0.0.0204,并附加在安装开始时没有被发现的额外 DASD。
  4. Device number 字段输入您要附加的 DASD 设备号。
  5. Start Discovery

    如果找到一个具有指定设备号的 DASD,如果还没有附加,对话框会关闭,新发现的驱动器会出现在驱动器列表中。然后,您可以选择所需设备的复选框,并点击 Done。新的 DASD 可以被选择,在 Installation Destination 窗口中的 Local Standard Disks 部分被标记为 DASD device 0.0.xxxx

如果您输入了一个无效的设备号码,或者带有指定设备号的 DASD 已被附加到系统,那么会在对话框中出现出错信息,解释错误原因并提示您使用不同的设备号码再次尝试。

6.2.6.4. 配置 FCP 设备

FCP 设备启用 64 位 IBM Z 来使用 SCSI 设备,而不是使用或额外使用 Direct Access Storage Device(DASD)设备。FCP 设备提供了一种交换结构拓扑,它允许 64 位 IBM Z 系统除了使用传统的 DASD 设备,还可使用 SCSI LUN 作为磁盘设备。

先决条件

  • 打开 Installation Summary 窗口。
  • 对于仅 FCP 安装,您已从 CMS 配置文件中删除 DASD= 选项,或从参数文件中删除 rd.dasd= 选项,以指示没有 DASD。

流程

  1. Installation Summary 窗口中点击 Installation Destination。此时会打开 Installation Destination 窗口,列出所有可用的驱动器。
  2. Specialized & Network Disks 部分中,点 Add a disk。存储设备选择窗口将打开。
  3. 点击 添加 ZFCP LUNAdd zFCP Storage Target 对话框将允许您添加 FCP(光纤通道协议)存储设备。

    64 位 IBM Z 要求您手动输入任何 FCP 设备,以便安装程序可以激活 FCP LUN。您可以在图形安装中输入 FCP 设备,或者在参数或 CMS 配置文件中作为唯一的参数条目输入。您输入的值对于您配置的每个站点来说都必须是唯一的。

  4. Device number 字段输入 4 位十六进制设备号码。
  5. 当安装 RHEL-8.6 或旧版本时,或者没有在 NPIV 模式下配置 zFCP 设备,或者auto LUN 扫描被 zfcp.allow_lun_scan=0 内核模块参数禁用时,请提供以下值:

    1. WWPN 字段中输入 16 位的十六进制 World Wide Port Number(WWPN)。
    2. LUN 字段中输入 16 位的十六进制 FCP LUN 标识符。
  6. Start Discovery 连接到 FCP 设备。

新添加的设备在 Installation Destination 窗口的 IBM Z 选项卡中显示。

仅使用十六进制值中的小写字母。如果您输入了不正确的值并点击 Start Discovery,安装程序会显示一个警告。您可以编辑配置信息并重试发现尝试。有关这些值的更多信息,请参阅硬件文档并与系统管理员联系。

6.2.7. 安装到一个 NVDIMM 设备

非易失性双内存模块(NVDIMM)设备将在没有电源时将 RAM 的性能与类似磁盘的数据持久性结合起来。在特定情况下,Red Hat Enterprise Linux 8 可以从 NVDIMM 设备引导和运行。

6.2.7.1. 将 NVDIMM 设备用作安装目标的条件

您可以在 Intel 64 和 AMD64 构架上,以扇区模式(NVDIMM)将 Red Hat Enterprise Linux 8 安装到非易失性双列直插式内存模块(NVDIMM)设备,这由 nd_pmem 驱动程序支持。

将 NVDIMM 设备用作存储的条件

要将 NVDIMM 设备用作存储,必须满足以下条件:

  • 系统的构架是 Intel 64 或者 AMD64。
  • NVDIMM 设备被配置为扇区模式。安装程序可将 NVDIMM 设备重新配置为这个模式。
  • NVDIMM 设备必须被 nd_pmem 驱动程序支持。

从 NVDIMM 设备引导的条件

在以下情况下可使用 NVDIMM 设备引导:

  • 满足将 NVDIMM 设备用作存储的所有条件。
  • 系统使用 UEFI。
  • NVDIMM 设备必须得到系统上提供的固件或 UEFI 驱动程序的支持。UEFI 驱动程序可以从设备本身的 ROM 选项加载。
  • NVDIMM 设备必须在命名空间中可用。

在引导过程中利用 NVDIMM 设备高度性能,将 /boot/boot/efi 目录放在该设备中。引导过程中不支持 NVDIMM 设备的 Execute-in-place(XIP)功能,内核被加载到传统内存中。

6.2.7.2. 使用图形安装模式配置 NVDIMM 设备

在使用图形安装时,必须正确配置非线性内存模块(NVDIMM)设备供 Red Hat Enterprise Linux 8 使用。

警告

NVDIMM 设备的重新配置过程会销毁存储在设备上的任何数据。

先决条件

  • 系统中有 一 个 NVDIMM 设备,并满足所有其他可作为安装对象使用的条件。
  • 安装已引导,并打开了 Installation Summary 窗口。

流程

  1. Installation Summary 窗口中点击 Installation Destination。此时会打开 Installation Destination 窗口,列出所有可用的驱动器。
  2. Specialized & Network Disks 部分中,点 Add a disk。存储设备选择窗口将打开。
  3. 点击 NVDIMM Devices 选项卡。
  4. 要重新配置某个设备,请从列表中选择它。

    如果一个设备没有列出,则代表它不是扇区模式。

  5. Reconfigure NVDIMM。此时会打开重新配置对话框。
  6. 输入您需要的扇区大小并点击 Start Reconfiguration

    支持的扇区大小为 512 和 4096 字节。

  7. 当重新配置完成时,请点击 确定
  8. 选择设备复选框。
  9. Done 返回 Installation Destination 窗口。

    重新配置的 NVDIMM 设备会在 Specialized & Network Disks 部分显示。

  10. 点击 完成 返回 安装概述 窗口。

现在您可以选择 NVDIMM 设备作为安装目标。另外,如果设备满足引导要求,您可以将设备设置为引导设备。

6.3. 配置 root 用户,并创建本地帐户

6.3.1. 配置一个根密码

您必须配置 root 密码来完成安装过程,并登录到用于系统管理任务的管理员(也称为超级用户或 root)帐户。这些任务包括安装和更新软件包以及更改系统范围的配置,如网络和防火墙设置、存储选项,以及添加或修改用户、组和文件权限。

要获得已安装的系统的 root 特权,您可以使用 root 帐户或创建一个具有管理权限的用户帐户(wheel 组的成员)。安装过程会创建 root 帐户。只有在您需要执行需要管理员权限的任务时,才切换到管理员帐户。

警告

root 账户对系统有完全的控制权。如果未授权的人可以访问该帐户,他们就可以访问或删除用户个人文件。

流程

  1. Installation Summary 窗口中选择 User Settings > Root Password。此时会打开 Root 密码 窗口。
  2. Root 密码字段输入您的密码。

    创建强大的 root 密码的要求是:

    • 至少需要 8 个字符的长度
    • 可以包含数字、字母(大写和小写)和符号
    • 区分大小写
  3. Confirm 项中再次输入同一密码。
  4. 点击 Done 来确认您的 root 密码,并返回到 Installation Summary 窗口。

    如果继续使用弱密码,您必须单击 Done 两次。

6.3.2. 创建用户帐户

创建用户帐户以完成安装。如果您不创建用户帐户,您必须作为 root 用户直接登录该系统,我们 不建议这样做。

流程

  1. Installation Summary 窗口中选择 User Settings > User Creation。此时将打开 Create User 窗口。
  2. Full name 字段输入用户帐户名称,例如:John Smith。
  3. User name 字段输入用户名,例如: jsmith。

    User name 是用于从命令行登录的;如果您安装图形环境,则图形登录管理器将使用 Full name

  4. 如果用户需要管理权限,请选择 Make this user administrator 复选框(安装程序将该用户添加到 wheel 组。)

    管理员用户可以使用自己的用户密码,通过 sudo 命令来执行只有 root 用户可以执行的操作,而不必使用 root 密码。这可能更为方便,但也可能导致安全风险。

  5. 选择 Require a password to use this account 复选框。

    如果您为用户授予了管理员特权,请确保帐户受密码保护。在没有为用户设置密码前,不要授予用户管理员的权限。

  6. Password 项中输入密码。
  7. Confirm password 项中再次输入同一密码。
  8. 点击 Done 来应用更改,并返回到 Installation Summary 窗口。

6.3.3. 编辑高级用户设置

这个流程描述了如何在 Advanced User Configuration 对话框中编辑用户帐户的默认设置。

流程

  1. Create User 窗口中,单击 Advanced
  2. 如果需要,在 Home directory 字段中编辑详情。该字段默认使用 /home/username
  3. User and Groups IDs 部分,您可以:

    1. 选择 Specify a user ID manually 并使用 + or - 来输入所需的值。

      默认值为 1000。用户 ID(UID)0-999 由系统保留,因此不能分配给用户。

    2. 选择 Specify a group ID manually 并使用 + or - 来输入所需的值。

      默认组名与用户名相同,默认组 ID(GID)为 1000。GID 0-999 由系统保留,因此不能分配给用户组。

  4. Group Membership 字段中,指定用逗号分开的额外组列表。会创建尚不存在的组;您可以在括号中为其他组指定自定义的 GID。如果您没有为新组指定自定义的 GID,则新组会自动接收一个 GID。

    创建的用户帐户始终有一个默认组成员资格(用户的默认组,其 ID 在 Specify a group ID manually 字段中设置)。

  5. 点击 Save Changes 来应用更新,并返回到 Create User 窗口。

6.4. 配置手动分区

您可以使用手动分区来配置磁盘分区和挂载点,并定义安装 Red Hat Enterprise Linux 的文件系统。在安装之前,您应该考虑是否使用分区的或未分区的磁盘设备。有关在 LUN 上直接使用或通过 LVM 使用分区的优点和缺点的详情,请查看红帽知识库解决方案 在 LUN 上使用分区的优点和缺点

您有不同的分区和存储选项,包括 Standard PartitionsLVMLVM thin provisioning。这些选项提供各种优点和配置,来有效地管理系统的存储。

标准分区
标准分区包含一个文件系统或交换空间。标准分区最常用于 /bootBIOS 引导EFI 系统分区。您可以在大多数其他用途中使用 LVM 逻辑卷。
LVM
选择 LVM (或者逻辑卷管理)作为设备类型会生成一个 LVM 逻辑卷。LVM 在使用物理磁盘时提高了性能,并允许高级设置,比如对一个挂载点使用多个物理磁盘,并设置软件 RAID ,以提高性能、可靠性或两者都提高。
LVM 精简配置
使用精简配置,您可以管理一个空闲空间的存储池,称为精简池,可在应用程序需要时将其分配给任意数量的设备。您可以根据需要动态地扩展池,以便有效分配存储空间。

安装 Red Hat Enterprise Linux 需要至少一个分区,但至少使用以下分区或卷://home/bootswap。您还可以根据需要创建额外的分区和卷。

要防止数据丢失,建议您在继续前备份数据。如果您要升级或创建一个双引导系统,您应该备份所有您要保留在存储设备中的数据。

6.4.2. 支持的硬件存储

非常重要的一点是,了解如何配置存储技术以及如何在 Red Hat Enterprise Linux 主要版本间的更改对存储技术的支持。

硬件 RAID

您的计算机主板或者附加控制器卡提供的所有 RAID 功能都需要在开始安装进程前进行配置。在 Red Hat Enterprise Linux 中,每个活跃的 RAID 阵列都以一个驱动器的形式出现。

软件 RAID

在有多个磁盘的系统上,您可以使用 Red Hat Enterprise Linux 安装程序来把几个驱动器作为 Linux 软件 RAID 阵列操作。使用软件 RAID 阵列时,RAID 功能是由操作系统而非专用硬件控制的。

注意

当预先存在的 RAID 阵列成员设备都是未分区的磁盘/驱动器时,安装程序会将阵列视为一个磁盘,且没有方法来删除阵列。

USB 磁盘

您可在安装后连接和配置外部 USB 存储。大多数设备可被内核识别,但有些设备可能无法识别。如果在安装过程中不需要配置这些磁盘,请断开连接以避免潜在的问题。

NVDIMM 设备

要使用非易失性双内存模块(NVDIMM)设备作为存储,必须满足以下条件:

  • Red Hat Enterprise Linux 的版本为 7.6 或更高版本。
  • 系统的构架是 Intel 64 或者 AMD64。
  • 该设备被配置为扇区模式。Anaconda 可将 NVDIMM 设备重新配置成此模式。
  • 该设备必须被 nd_pmem 驱动程序支持。

在以下附加条件下可使用 NVDIMM 设备引导:

  • 系统使用 UEFI。
  • 该设备必须使用系统中可用的固件或者 UEFI 驱动程序支持。UEFI 驱动程序可以从设备本身的 ROM 选项加载。
  • 该设备必须在命名空间下提供。

要在引导过程中利用 NVDIMM 设备的高性能,将 /boot/boot/efi 目录放在该设备中。

注意

引导过程中不支持 NVDIMM 设备的 Execute-in-place(XIP)功能,内核被加载到传统内存中。

Intel BIOS RAID 设定的注意事项

Red Hat Enterprise Linux 使用 mdraid 在 Intel BIOS RAID 组件中安装。这些组件会在引导过程中自动探测到,设备节点路径可在多个引导过程中更改。使用文件系统标签或者设备 UUID 替换设备节点路径(如 /dev/sda)。您可以使用 blkid 命令查找文件系统标签和设备 UUID。

6.4.3. 启动手动分区

您可以根据您的要求手动对磁盘进行分区。

先决条件

  • 此时会打开 Installation Summary 屏幕。
  • 所有磁盘都可用于安装程序。

流程

  1. 选择用于安装的磁盘:

    1. Installation Destination 打开 Installation Destination 窗口。
    2. 点击对应图标选择安装所需的磁盘。所选磁盘上显示了一个选择框。
    3. Storage Configuration 下,选择 Custom 按钮。
    4. 可选:要使用 LUKS 启用存储加密,请选中 Encrypt my data 复选框。
    5. Done
  2. 如果您选择加密存储,则会打开一个输入磁盘加密密码短语的对话框。输入 LUKS 密码短语:

    1. 在两个文本字段输入密码短语。要切换键盘布局,使用键盘图标。

      警告

      在输入密码短语的对话框中,您不能更改键盘布局。选择英文键盘布局在安装程序中输入密码短语。

    2. 点击 Save PassphraseManual Partitioning 窗口被打开。
  3. 检测到的挂载点列在左侧窗格中。挂载点是由检测到的操作系统安装来组织。因此,如果在多个安装间共享分区,某些文件系统会被多次显示。

    1. 在左侧窗格中选择挂载点;可以自定义的选项显示在右侧窗格中。
    2. 可选:如果您的系统包含现有文件系统,则请确定有足够的可用空间以供安装。要删除任何分区,请在列表中选择它们并点击 - 按钮。对话框有一个复选框,您可以用它来已删除的分区所属系统所使用的所有其他分区。
    3. 可选:如果没有现有分区,并且您想要创建一组分区作为起点,请从左侧窗格(Red Hat Enterprise Linux 的默认分区方案是 LVM)中选择您首选的分区方案,然后单击 Click here to create them automatically 链接。

      注意

      一个 /boot 分区、一个/ (root)卷和一个与可用存储大小成比例的 swap 卷被创建 ,并列在左侧窗格中。这些是典型安装的文件系统,但您可以添加额外的文件系统和挂载点。

    4. 点击 Done 确认任何更改,并返回 Installation Summary 窗口。

6.4.4. 支持的文件系统

在配置手动分区时,您可以使用 Red Hat Enterprise Linux 中提供的各种文件系统和分区类型优化性能、确保兼容性,并有效地管理磁盘空间。

xfs
XFS 是一个高度可扩展的高性能文件系统,它最多支持 16 EB(大约 1600万 TB)的文件系统、8 EB 文件(大约 800万 TB)以及包含千百万条目的目录结构。XFS 还支持元数据日志,,提高崩溃恢复速度。单个 XFS 文件系统最多支持 500 TB。XFS 是 Red Hat Enterprise Linux 上的默认文件系统。XFS 文件系统无法缩小以获得可用空间。
ext4
ext4 文件系统基于 ext3 文件系统,但包括了很多改进。这包括对更大文件系统和更大文件的支持、更快更有效的磁盘空间分配、一个目录中无限的子目录数、更快速的文件系统检查及更强大的日志能力。单个 ext4 文件系统最多支持 50 TB。
ext3
ext3 文件系统基于 ext2 文件系统,它有一个主要优点 - 日志。使用日志记录文件系统可减少在文件系统终止后恢复文件系统所花费的时间,因为不需要每次运行 fsck 程序检查文件系统元数据一致性。
ext2
ext2 文件系统支持标准 Unix 文件类型,包括常规文件、目录或符号链接。它允许分配长文件名,最多 255 个字符。
swap
交换分区是用来支持虚拟内存的。换句话说,当内存不足以贮存系统正在处理的数据时,数据就会被写入 swap 分区。
vfat

VFAT 文件系统是一个 Linux 文件系统,与 Microsoft Windows 的 FAT 文件系统中的长文件名兼容。

注意

Linux 系统分区不支持 VFAT 文件系统。例如: //var/usr 等等。

BIOS 引导
从在 BIOS 系统和 BIOS 兼容模式的 UEFI 系统上使用 GUID 分区表(GPT)引导的设备所需小分区。
EFI 系统分区
UEFI 系统上引导使用 GUID 分区表(GPT)设备所需小分区。
PReP
这个小引导分区位于磁盘的第一个分区中。PReP boot 分区包含 GRUB2 引导装载程序,它可允许 IBM Power Systems 服务器引导 Red Hat Enterprise Linux。

6.4.5. 添加挂载点文件系统

您可以添加多个挂载点文件系统。您可以使用任何可用的文件系统和分区类型,如 XFS、ext4、ext3、ext2、swap、VFAT 以及 BIOS 引导、EFI 系统分区和 PReP 等特定分区来有效地配置您系统的存储。

先决条件

  • 您已规划了您的分区。
  • 确保您没有对带有符号链接的路径指定挂载点,如 /var/mail/usr/tmp/lib/sbin/lib64/bin。有效负载(包括 RPM 软件包)取决于创建指向特定目录的符号链接。

流程

  1. 点击 + 可创建新挂载点文件系统。Add a New Mount Point 对话框被打开。
  2. 挂载点 下拉菜单中选择预先设置的路径之一 ,或者输入自己的路径。例如,为根分区选择 /,或者为引导分区选择 /boot
  3. Desired Capacity 项中输入文件系统的大小,例如 2GiB

    如果您没有在 Desired Capacity 中指定值,或者指定了一个大于可用空间的大小,则会使用所有剩余的可用空间。

  4. Add mount point 创建分区并返回到 Manual Partitioning 窗口。

6.4.6. 为挂载点文件系统配置存储

您可以为手动创建的每个挂载点设置分区方案。可用的选项包括 Standard PartitionLVMLVM Thin Provisioning。Red Hat Enterprise Linux 8 中删除了对 Btfrs 的支持。

注意

无论选择了什么值,/boot 分区总是位于一个标准的分区中。

流程

  1. 要更改单个非 LVM 挂载点应所在的设备,请从左侧窗格选择所需的挂载点。
  2. Device (s) 标题下,单击 Modify。此时会打开 Configure Mount Point 对话框。
  3. 选择一个或多个设备并点击 Select 确认您的选择,并返回 Manual Partitioning 窗口。
  4. Update Settings 应用改变。
  5. Manual Partitioning 窗口中左下方,点 storage device selected 打开 Selected Disks 对话框,检查磁盘信息。
  6. 可选:点击 Rescan 按钮(圆形箭头按钮)刷新所有本地磁盘和分区。这只在执行安装程序外的高级分区后才是需要的。点击 Rescan Disks 按钮重置安装程序中的所有配置更改。

6.4.7. 自定义挂载点文件系统

如果需要设置特定的设置,可以自定义分区或卷。如果 /usr/var 是独立于其他 root 卷的分区,引导过程会变得非常复杂,因为这些目录包含关键组件。在某些情况下,比如这些目录位于 iSCSI 驱动器或 FCoE 位置,系统无法引导,或者在关机或重启时出现 Device is busy 错误。

这个限制只适用于 /usr/var,不适用于下面的目录。例如: 一个独立的 /var/www 可以正常工作。

流程

  1. 从左侧窗格中,选择挂载点。

    图 6.1. 自定义分区

  2. 在右侧面板中您可以自定义以下选项:

    1. Mount Point 项值嗯输入文件系统挂载点。例如: 如果文件系统是 root 文件系统,输入 /; 如果是 /boot 文件系统,输入 /boot,以此类推。对于 swap 文件系统来说,不需要设置挂载点,因为将文件系统类型设置为 swap 就足够了。
    2. Desired Capacity 项中输入文件系统的大小。您可以使用常规大小单位,如 KiB 或者 GiB。如果没有设置任何单元,则默认为 MiB。
    3. 从下拉菜单中选择您所需的 设备类型Standard Partition, LVM, 或 LVM Thin Provisioning.

      注意

      只有选择了两个或者多个磁盘进行分区时才可以使用 RAID。如果选择 RAID,还可以设置 RAID 级别。同样,如果选择 LVM,可以指定 卷组

    4. 选择 Encrypt 复选框来加密分区或卷。您必须稍后在安装程序中设置密码。此时会显示 LUKS Version 下拉菜单。
    5. 从下拉菜单中选择您所需的 LUKS 版本。
    6. 从文件系统下拉菜单中为这个分区或者卷选择正确的 文件系统 类型。

      注意

      Linux 系统分区不支持 VFAT 文件系统。例如: //var/usr 等等。

    7. 选择 重新格式化复选框格式化现有分区,或不选择重新格式化复选框来保留您的数据。新建的分区和卷必须重新格式化,且无法清除复选框。
    8. Label 字段中输入分区的标签。使用标签可轻松识别和定位各个分区。
    9. Name 中输入名称。标准分区在创建时被自动命名,您无法编辑标准分区的名称。例如: 您不能编辑 /boot 名称 sda1
  3. 点击 Update Settings 应用您的更改。如果需要,可以选择另外一个分区进行自定义。在点 Installation Summary 窗口中的 Begin Installation 前,修改不会生效。
  4. 可选:点 Reset All 取消对分区的修改。
  5. 当您创建并自定义所有文件系统和挂载点后,点 Done。如果您选择加密文件系统,则会提示您输入生成密码短语。

    Summary of Changes 对话框会打开,它包括了安装程序进行的与所有存储相关的操作的信息。

  6. 点击 Accept Changes 来应用更改,并返回到 Installation Summary 窗口。

6.4.8. 保留 /home 目录

在 Red Hat Enterprise Linux 8 图形安装中,您可以保留 RHEL 7 系统使用的 /home 目录。只有 /home 目录位于 RHEL 7 系统中的一个独立 /home 分区时,才可以保留 /home

保留包含各种配置设置的 /home 目录,使得新 Red Hat Enterprise Linux 8 系统上的 GNOME Shell 环境的设置方式可以与 RHEL 7 系统上的一样。请注意,这只适用在 Red Hat Enterprise Linux 8 上与之前 RHEL 7 系统上的用户名和 ID 一样的用户。

先决条件

  • 您已在您的计算机上安装了 RHEL 7。
  • /home 目录位于您的 RHEL 7 系统中的一个独立 /home 分区中。
  • 此时会打开 Red Hat Enterprise Linux 8 Installation Summary 窗口。

流程

  1. Installation Destination 打开 Installation Destination 窗口。
  2. Storage Configuration 下,选择 Custom 单选按钮。点击 Done
  3. DoneManual Partitioning 窗口会打开。
  4. 选择 /home 分区,在 Mount Point: 下填写 /home,并清除 Reformat 复选框。

    图 6.2. 确定 /home 不会被格式化

  5. 可选:您还可以自定义 Red Hat Enterprise Linux 8 系统所需的 /home 分区的各个方面,如 自定义挂载点文件系统 中所述。但是,要保留 RHEL 7 系统的 /home,需要清除 Reformat 复选框。
  6. 根据您的要求自定义所有分区后,点击 DoneSummary of changes 将打开。
  7. 确认在 Summary of changes 对话框中 /home 没有任何变化。这意味着 /home 分区被保留。
  8. 点击 Accept Changes 来应用更改,并返回到 Installation Summary 窗口。

6.4.9. 在安装过程中创建软件 RAID

独立磁盘冗余阵列 (RAID) 设备由被安排的多个存储设备组成,以便在一些配置中提供更高的性能和容错能力。创建 RAID 设备只需要一步,并可根据需要添加或者删除磁盘。您可以为系统中的每个物理磁盘配置一个 RAID 分区,因此安装程序可使用的磁盘数决定可用 RAID 设备的级别。例如:如果您的系统有两块磁盘,则无法创建 RAID 10 设备,因为它至少需要三块单独的磁盘。要优化您的系统的存储性能和可靠性,RHEL 支持软件 RAID 0RAID 1RAID 4RAID 5RAID 6RAID 10 类型,并支持使用 LVM 和 LVM Thin Provisioning 在安装的系统上设置存储。

注意

在 64 位 IBM Z 上,存储子系统透明地使用 RAID。您不必手动配置软件 RAID。

先决条件

  • 您已经选择了两个或者多个磁盘,然后才能看到 RAID 配置选项。根据您要创建的 RAID 类型,至少需要两个磁盘。
  • 您创建了挂载点。通过配置挂载点,您可以配置 RAID 设备。
  • 您已在 安装目的 窗口中选择了 自定义 单选按钮。

流程

  1. Manual Partitioning 窗口左面地框中,选所需的分区。
  2. Device(s) 部分点 修改。此时会打开 Configure Mount Point 对话框。
  3. 选择您要包含在 RAID 设备中的磁盘并点击 选择
  4. 点击设备类型下拉菜单并选择 RAID
  5. 点击文件系统下拉菜单并选择您首选的文件系统类型。
  6. 点击RAID 级别下拉菜单并选择您需要的 RAID 级别。
  7. 点击 更新设置 保存您的更改。
  8. Done 应用设置并返回到按照概述窗口。

6.4.10. 创建 LVM 逻辑卷

逻辑卷管理器(LVM)表示底层物理存储空间(如磁盘或 LUN)的一个简单的逻辑视图。物理存储分区以物理卷的形式代表,您可以将其分组到卷组中。您可以将每个卷组分成多个逻辑卷,每个逻辑卷都类似于一个标准磁盘分区。因此,LVM 逻辑卷具有跨多个物理磁盘的分区的功能。

重要
  • LVM 配置只可用于图形安装程序。在文本模式安装过程中,LVM 配置不可用。
  • 要创建 LVM 配置,请按 Ctrl+Alt+F2 ,来在不同的虚拟控制台中使用 shell 提示符。您可以在该 shell 中运行 vgcreatelvm 命令。要返回文本模式安装,请按 Ctrl+Alt+F1

流程

  1. Manual Partitioning 窗口中,使用以下选项之一创建一个新挂载点:

    • 使用 Click here to create them automatically 选项,或者点 + 按钮。
    • 从下拉列表中选择 Mount Point,或者手动输入。
    • Desired Capacity 字段中输入文件系统的大小,例如:/ 70 GiB ,/boot 1 GiB 。

      备注:跳过这一步以使用现有挂载点。

  2. 选择挂载点。
  3. 在下拉菜单中选择 LVM卷组 下拉菜单显示新创建的卷组名称。

    注意

    您无法在配置对话框中指定卷组物理扩展的大小。该大小始终设置为默认值 4 MiB。如果要创建具有不同物理块的卷组,您必须切换到交互式 shell ,并使用 vgcreate 命令来手动创建它,或者将 Kickstart 文件与 volgroup --pesize=size 命令一起使用。有关 Kickstart 的详情,请查看 自动安装 RHEL

  4. 点击 完成 返回 安装概述 窗口。

6.4.11. 配置 LVM 逻辑卷

您可以根据您的要求配置新创建的 LVM 逻辑卷。

警告

不支持将 /boot 分区放在 LVM 卷中。

流程

  1. Manual Partitioning 窗口中,使用以下任一选项创建一个挂载点:

    • 使用 Click here to create them automatically 选项,或者点 + 按钮。
    • 从下拉列表中选择 Mount Point,或者手动输入。
    • Desired Capacity 字段中输入文件系统的大小,例如:/ 70 GiB ,/boot 1 GiB 。

      备注:跳过这一步以使用现有挂载点。

  2. 选择挂载点。
  3. 设备类型下拉菜单并选择 LVM卷组 下拉菜单显示新创建的卷组名称。
  4. 修改配置新创建的卷组。此时会打开配置卷组对话框。

    注意

    您无法在配置对话框中指定卷组物理扩展的大小。该大小始终设置为默认值 4 MiB。如果要创建具有不同物理块的卷组,您必须切换到交互式 shell ,并使用 vgcreate 命令来手动创建它,或者将 Kickstart 文件与 volgroup --pesize=size 命令一起使用。如需更多信息,请参阅 自动安装 RHEL 文档。

  5. 可选:在 RAID 级别下拉菜单中选择您需要的 RAID 级别。

    可用的 RAID 级别与实际的 RAID 设备相同。

  6. 选择 加密 复选框来为卷组进行加密。
  7. Size policy 下拉菜单中,为卷组选择以下任何一个大小策略:

    可用的策略选项有:

    自动
    自动设置卷组大小,使其足够大,以便包含配置的逻辑卷。适合于不需要剩余空间的卷组。
    尽可能大
    文件系统以最大大小创建,无论其包含的逻辑卷的大小如何。适合于要将大多数数据保存到 LVM,且之后需要增大一些现有逻辑卷的大小,或者需要在该卷组中生成附加逻辑卷。
    已修复
    您可以设置准确的卷组大小。这个固定的大小必须能够容纳所有配置的逻辑卷。适用于知道该卷组的实际大小。
  8. 点击 Save 以应用设置并返回到 Manual Partitioning 窗口。
  9. 点击 Update Settings 保存您的更改。
  10. 点击 Done 返回到 Installation Summary 窗口。

6.4.12. 分区建议

无法为每个系统分区最佳方法; 最理想的设置取决于您计划如何使用要安装的系统。然而,下面的提示可能帮助您找到最合适的布局以满足您的需要:

  • 首先创建具有特定要求的分区,例如,某个分区必须位于特定磁盘中。
  • 考虑加密任何可能包含敏感数据的分区和卷。加密可防止未授权的人访问分区中的数据,即使他们可以访问物理存储设备。在大多数情况下,应该至少为包含用户数据的 /home 分区加密。
  • 在有些情况下,为 //boot/home 以外的目录创建独立挂载点可能非常有用。例如,在运行 MySQL 数据库的服务器中,拥有一个单独的挂载点 /var/lib/mysql 允许您在重新安装的过程中保留数据库,而无需之后从备份中恢复它。但是,使用不必要的挂载点使存储管理更为困难。
  • 有些特殊限制适用于某些可以放置分区布局的目录。值得注意的是,/boot 目录必须总是位于物理分区(不能在 LVM 卷中)。
  • 如果您不熟悉 Linux,请考虑查看 Linux 文件系统层次结构标准,以了解有关各种系统目录及其内容的信息。
  • 每个内核大约需要:60MiB(initrd 34MiB、11MiB vmlinuz 和 5MiB System.map)
  • 对于救援(rescue)模式:100MiB(initrd 76MiB、11MiB vmlinuz 和 5MiB 系统映射)
  • 当在系统中启用 kdump 时,它将需要大约额外的 40MiB(另一个包含 33MiB 的 initrd)

    /boot 的默认 1 GiB 分区大小应该足以满足大多数常见用例的需要。但是,如果您计划保留多个内核版本或勘误内核,请增大这个分区的大小。

  • /var 目录保存了大量应用程序的内容,包括 Apache Web 服务器,并供 YUM 软件包管理器用于临时存储下载的软件包更新。确保分区或包含 /var 的卷至少 5 GiB。
  • /usr 目录在典型的 Red Hat Enterprise Linux 安装中持有大部分软件。因此,包含此目录的分区或卷应该至少 5 GiB 用于最小安装,使用图形环境的安装需要至少 10 GiB。
  • 如果 /usr/var 是独立于剩余 root 卷的分区,引导过程会变得非常复杂,因为这些目录包含了对引导极为重要的组件。在某些情况下,比如这些目录位于 iSCSI 驱动器或 FCoE 位置,系统可能无法引导,或者在关机或重启时挂起并出现 Device is busy 出错信息。

    这个限制只适用于 /usr/var,不适用于下面的目录。例如: /var/www 的单独分区可以正常工作。

    重要

    有些安全策略要求将 /usr/var 分离,即使它使管理更加复杂。

  • 考虑在 LVM 卷组中保留一部分空间不分配。如果您的空间要求改变,但您不希望从其他卷中删除数据,这个未分配空间为您提供了灵活性。您也可以为分区选择 LVM Thin Provisioning 设备类型,使其让卷自动处理未使用的空间。
  • 不能缩小 XFS 文件系统的大小 - 如果您希望使这个文件系统的分区或卷更小,必须备份数据,销毁文件系统,然后创建一个新的、较小的文件系统。因此,如果您计划稍后更改分区布局,则应使用 ext4 文件系统。
  • 如果您希望在安装后通过添加更多磁盘或扩展虚拟机磁盘来扩展存储,请使用逻辑卷管理器(LVM)。通过使用 LVM,您可以在新驱动器中创建物理卷,然后将其分配给任何您认为适合的卷组和逻辑卷 - 例如,您可以轻松地扩展您的系统 /home(或者其它位于逻辑卷的目录)。
  • 取决于系统的固件、引导驱动器大小以及引导驱动器磁盘标签,可能需要创建 BIOS 引导分区或者 EFI 系统分区。请注意,如果您的系统不需要,则无法在图形安装中创建 BIOS 引导或 EFI 系统分区 - 在这种情况下,会在菜单中隐藏它们。
  • 如果您需要在安装后更改存储配置,Red Hat Enterprise Linux 程序库会提供几个不同的工具来帮助您完成此操作。如果您希望使用命令行工具,请尝试 system-storage-manager

6.5. 选择基础环境和其他软件

使用 软件选择窗口选择所需软件包。软件包被分为 Base Environment 和 Additional Software。

  • Base Environment(基本环境) 包含预定义的软件包。您只能选择一个基本环境,例如,Server with GUI (默认)、Server, Minimal Install, Workstation, Custom operating system, Virtualization Host。可用性取决于用作安装源的安装 ISO 镜像。
  • Additional Software for Selected Environment(所选环境的额外软件)包含基本环境的额外软件包。您可以选择多个软件软件包。

使用预定义的环境和其他软件自定义您的系统。然而,在标准安装中不能选择要安装的单独软件包。要查看特定环境中的软件包,请查看安装源介质(DVD、CD、USB)中的 repository/repodata/*-comps-repository.architecture.xml 文件。XML 文件包含作为基础环境一部分安装的软件包详情。可用环境由 <environment> 标签标记,其他软件包则标有 <group> 标签。

如果您不确定要安装哪些软件包,请选择 Minimal Install 基础环境。最小安装只安装一个基本的 Red Hat Enterprise Linux 版本,以及少量的附件软件。在系统完成安装且您首次登录后,您可以使用 YUM 软件包管理器来安装其他软件。有关 YUM 软件包管理器的详情,请参考 配置基本系统设置 文档。

注意
  • 从任何 RHEL 8 系统使用 yum group list 命令,来查看安装在系统上作为软件选择一部分的软件包的列表。如需更多信息,请参阅 配置基本系统设置
  • 如果您需要控制安装哪些软件包,可以使用 Kickstart 文件并在 %packages 部分定义软件包。

先决条件

  • 您已配置了安装源。
  • 安装程序已下载了软件包元数据。
  • 打开 安装概述 窗口。

流程

  1. 安装概述 窗口中点击 软件选择。此时会打开 软件选择 窗口。
  2. Base Environment 窗格中选择一个基础环境。您只能选择一个基本环境,例如 Server with GUI (默认)、Server、Minimal Install、Workstation、Custom Operating System、Virtualization Host。默认情况下,选择 Server with GUI 基础环境。

    图 6.3. Red Hat Enterprise Linux 软件选择

  3. Additional Software for Selected Environment 框中选择一个或多个选项。
  4. 点击 Done 来应用设置并返回到图形安装。

6.6. 可选:配置网络和主机名

使用 Network and Host name 窗口来配置网络接口。您在此处选择的选项既可以在从远程位置下载包等任务的安装过程中使用,也可在已安装的系统上使用。

按照以下步骤来配置您的网络和主机名。

流程

  1. Installation Summary 窗口中点击 Network and Host Name
  2. 在左侧窗格的列表中选择一个接口。详情显示在右侧方框中。
  3. 使用 ON/OFF 开关来启用或禁用所选接口。

    您不能手动添加或删除接口。

  4. 点击 + 添加虚拟网络接口,其可以是:Team、Bold、Bridge 或 VLAN。
  5. - 删除虚拟接口。
  6. Configure 更改设置,如 IP 地址、DNS 服务器或者现有接口的路由配置(虚拟和物理)。
  7. Host Name 字段中输入您系统的主机名。

    主机名可以是完全限定域名(FQDN),格式为 hostname.domainname,也可以是没有域的短主机名。许多网络具有动态主机配置协议(DHCP)服务,该服务自动为连接的系统提供域名。要允许 DHCP 服务给这个系统分配域名,请只指定短主机名。

    主机名只能包含字母数字字符和 -.。主机名应等于或小于 64 个字符。主机名不能以 -. 开头或结尾要符合 DNS 的要求,FQDN 的每个部分都应等于或小于 63 个字符,FQDN 总长度(包括点)不应超过 255 个字符。

    localhost 值意味着没有为目标系统配置特定的静态主机名,安装的系统的实际主机名在处理网络配置的过程中配置,例如,通过使用 DHCP 或 DNS 的 NetworkManager。

    使用静态 IP 和主机名配置时,使用短名称还是 FQDN 取决于计划的系统用例。Red Hat Identity Management 在置备过程中配置 FQDN,但有些第三方软件产品可能需要短名称。在任何一种情况下,要确保在所有情况下两种形式都可用,请在 /etc/hosts 中为主机添加一个条目,格式为 IP FQDN 短别名

  8. 单击 Apply,将主机名应用到安装程序环境。
  9. 或者,在 Network and Hostname 窗口中,您可以选择 Wireless 选项。单击右侧窗格中的 Select network 以选择您的 wifi 连接,如需要请输入密码,然后点击 Done

6.6.1. 添加虚拟网络接口

您可以添加虚拟网络接口。

流程

  1. Network & Host name 窗口中点击 + 按钮添加虚拟网络接口。此时会打开 Add a device 对话框。
  2. 选择四种虚拟接口类型中的一个:

    • Bond:NIC(网络接口控制器)绑定,这是一种将多个物理网络接口绑定成单个绑定通道的方法。
    • Bridge :表示 NIC 桥接,这是一种将多个独立的网络连接成一个聚合网络的方法。
    • Team :NIC Teaming 是一种聚合链接的新实现,旨在提供一个小型内核驱动程序来实现数据包流的快速处理,以及各种应用程序在用户空间中执行其他操作。
    • Vlan( 虚拟 LAN):一种创建多个互相隔离的不同的广播域的方法。
  3. 选择接口类型并点击 Add。此时将打开一个编辑界面对话框,允许您编辑所选接口类型的任何可用设置。

    如需更多信息,请参阅 编辑网络接口

  4. 点击 Save 确认虚拟接口设置,并返回到 Network & Host name 窗口。
  5. 可选:要更改虚拟接口的设置,请选择接口并单击 配置

6.6.2. 编辑网络接口配置

您可以编辑安装过程中使用的典型有线连接的配置。配置其他类型的网络与其基本相同,但具体的配置参数可能有所不同。

注意

在 64 位 IBM Z 上,您无法添加新连接,因为网络子通道需要提前分组和设置,这目前只在启动阶段完成。

流程

  • 要手动配置网络连接,请从 Network and Host name 窗口中选择接口,然后单击 Configure

    此时会打开一个特定于所选接口的编辑对话框。出现的选项取决于连接类型 - 可用的选项略有不同,具体取决于连接类型是物理接口(有线或无线网络接口控制器)还是之前在 添加虚拟接口 中配置的虚拟接口(Bond、Bridge、Team 或 Vlan)。

6.6.3. 启用或者禁用接口连接

您可以启用或禁用特定的接口连接。

流程

  1. 点击General标签。
  2. 选择 与优先级自动连接 框以默认启用连接。使用将默认优先级 0
  3. 可选:使用 All users may connect to this network 选项启用或禁用系统上的所有用户连接到这个网络。如果您禁用这个选项,则只有 root 用户可以连接到这个网络。

    重要

    当在有线连接中启用时,系统会在启动或重启过程中自动连接。在无线连接中,接口会尝试连接到所有已知的无线网络。有关 NetworkManager 的详情,包括 nm-connection-editor 工具,请参阅 配置和管理网络 文档。

  4. 点击 保存 按钮应用这些更改并返回到 网络和主机名称 窗口。

    不可能只允许 root 以外的一个特定用户使用这个接口,因为在安装过程中没有创建其它用户。如果您需要其他用户的连接,需要在安装后配置它。

6.6.4. 设置静态 IPv4 或者 IPv6 设置

默认情况下,根据当前的网络设置,IPv4 和 IPv6 都被设置为自动配置。这意味着,当接口连接到网络时,会自动检测本地 IP 地址、DNS 地址等地址以及其他设置。在很多情况下,这已经足够了。但您也可以在 IPv4 设置IPv6 设置 标签页中对它们进行静态配置。完成以下步骤来配置 IPv4 或 IPv6 设置:

流程

  1. 要设置静态网络配置,请导航到一个 IPv 设置标签页,并在 方法 下拉菜单中选择除 Automatic 以外的方法,例如ManualAddresses 窗格已启用。
  2. 可选:在 IPv6 设置 标签页中,您还可以将方法设置为 Ignore 以禁用此接口上的 IPv6。
  3. Add 并输入您的地址设置。
  4. Additional DNS servers 字段中输入 IP 地址;它接受一个或多个 DNS 服务器的 IP 地址,例如 10.0.0.1,10.0.0.8
  5. 选中 Require IPvX addressing for this connection to complete 复选框。

    IPv4 SettingsIPv6 Settings 选项卡中选择这个选项,只有在 IPv4 或 IPv6 成功时才允许此连接。如果 IPv4 和 IPv6 的此选项均被禁用,则只要任一 IP 协议上的配置成功,则接口就能够连接。

  6. 点击 保存 按钮应用这些更改并返回到 Network & Host name 窗口。

6.6.5. 配置路由

您可以通过配置路由来控制特定连接的访问。

流程

  1. IPv4 SettingsIPv6 Settings 标签页中,点击 路由 来配置接口上特定 IP 协议的路由设置。一个特定于接口的编辑路由对话框。
  2. 点击 Add 以添加路由。
  3. 选择 Ignore automatically obtained routes 复选框,来配置至少一个静态路由,并禁用没有专门配置的所有路由。
  4. 选择 Use this connection only for resources on its network 复选框,以防止连接成为默认路由。

    即使没有配置任何静态路由,也可以选择这个选项。这个路由只用来访问某些资源,比如需要本地或者 VPN 连接的内部网页。另一个(默认)路由用于公开的资源。与配置的附加路由不同,这个设置会被传送到安装的系统上。这个选项仅在配置多个接口时可用。

  5. 点击 OK 保存您的设置并返回到特定于该接口的编辑路由对话框。
  6. 点击 Save 以应用设置并返回到 Network and Host Name 窗口。

6.7. 可选:配置键盘布局

您可以从 Installation Summary 屏幕配置键盘布局。

重要

如果您使用无法接受拉丁字符的布局,如 Russian ,请添加 English (United States) 布局,并配置键盘组合来在两种布局之间进行切换。如果您选择了没有拉丁字符的布局,那么在后面的安装过程中可能无法输入有效的 root 密码和用户凭证。这可能会阻止您完成安装。

流程

  1. 安装概述 窗口中点击 键盘
  2. 单击 + 以打开 Add a Keyboard Layout 窗口,来更改为不同的布局。
  3. 通过浏览列表或使用 Search 字段选择布局。
  4. 选择所需的布局并点击 Add。新布局出现在默认布局下。
  5. 点击 Options 来选择性地配置用于在可用布局之间循环的键盘开关。Layout Switching Options 窗口将打开。
  6. 要配置用于切换的组合键,请选择一个或多个键组合,并单击 OK 以确认您的选择。
  7. 可选:当您选择布局时,点 Keyboard 按钮来打开一个新的对话框,显示所选布局的可视化表示。
  8. 点击 Done 来应用设置并返回到图形安装。

6.8. 可选:配置语言支持

您可以从 Installation Summary 屏幕中更改语言设置。

流程

  1. Installation Summary 窗口中点击 Language SupportLanguage Support 窗口将打开。左侧面板列出了可用语言组。如果至少配置了组中的一种语言,则会显示复选标记,并突出显示支持的语言。
  2. 从左侧窗格中,单击组以选择其他语言,然后从右侧窗格中选择区域选项。对您要配置的所有语言重复此过程。
  3. 可选:如果需要,在文本框中键入 来搜索语言组。
  4. 点击 Done 来应用设置并返回到图形安装。

6.10. 可选:订阅系统并激活 Red Hat Insights

Red Hat Insights 是一个软件即服务(SaaS)服务(SaaS),它提供对注册的红帽系统的持续分析,以主动识别跨物理、虚拟和云环境以及容器部署的安全性、性能和稳定性。通过在 Red Hat Insights 中 注册 RHEL 系统,您可以访问预测分析、安全警报和性能优化工具,使您能够维护一个安全的、高效的且稳定的 IT 环境。

您可以使用您的红帽帐户或激活码注册到红帽。您可以使用 Connect to Red Hat 选项将您的系统连接到 Red Hat Insights。

流程

  1. Installation Summary 屏幕,在 Software 下,点击 Connect to Red Hat
  2. 选择 AccountActivation Key

    1. 如果您选择 Account,请输入您的红帽客户门户网站用户名和密码详情。
    2. 如果您选择 Activation Key,请输入您的机构 ID 和激活码。

      当把您的激活码注册到订阅中时,就可以输入多个激活码(使用逗号分开)。

  3. 选择 Set System Purpose 复选框。

    • 如果帐户启用了简单内容访问模式,设置系统目值对于在订阅服务中准确报告消耗仍然很重要。
    • 如果您的帐户处于授权模式,则系统用途可让授权服务器决定并自动附加最合适的订阅,以满足 Red Hat Enterprise Linux 8 系统的预期用途。
  4. 从对应的下拉列表中选择所需的 RoleSLAUsage
  5. 默认情况下启用 连接到 Red Hat Insights 复选框。如果您不想连接到 Red Hat Insights,请清除复选框。
  6. 可选:展开 Options

    1. 如果您的网络环境只允许外部互联网访问,或通过 HTTP 代理服务器访问内容服务器,请选择 Use HTTP proxy 复选框。如果不使用 HTTP 代理,则取消选择 Use HTTP proxy 选项。
    2. 如果您正在运行 Satellite 服务器或执行内部测试,请选择 Custom Server URLCustom Base URL 复选框,并输入所需详情。

      重要
      • Custom Server URL 字段不需要 HTTP 协议,如 nameofhost.com。但是,Custom base URL 字段需要 HTTP 协议。
      • 要在注册后更改 Custom base URL,您必须取消注册,提供新详情,然后重新注册。
  7. Register 注册该系统。当系统成功注册并附加订阅后,Connect to Red Hat 窗口会显示附加的订阅详情。

    根据订阅的数量,注册和附加过程可能需要一分钟时间完成。

  8. 点击 Done 返回到 Installation Summary 窗口。

    Connect to Red Hat 下会显示一个 Registered 信息。

您可以从自动检测的安装介质、红帽 CDN 或网络配置安装源。当 Installation Summary窗口第一次打开时,安装程序会尝试根据用来引导系统的介质类型配置安装源。完整的 Red Hat Enterprise Linux 服务器 DVD 将源配置为本地介质。

先决条件

  • 您已从 Product Downloads 页面下载了完整的安装 DVD ISO 或最小安装 Boot ISO 镜像。
  • 您已创建了可引导安装介质。
  • 打开 Installation Summary 窗口。

流程

  1. Installation Summary 窗口中点击 安装源。此时会打开 Installation Source 窗口。

    1. 请参阅 Auto-detected installation media 部分以验证详情。如果您从包含安装源(例如 DVD)的介质启动安装程,则默认选择这个选项。
    2. 点击 验证 检查介质的完整性。
    3. 查看 Additional repositories 部分,并注意 AppStream 复选框是否默认被选中。

      BaseOS 和 AppStream 存储库作为完整安装镜像的一部分被安装。如果您需要完整的 Red Hat Enterprise Linux 8 安装,请不要禁用 AppStream 软件仓库复选框。

  2. 可选:选择 Red Hat CDN 选项注册您的系统,附加 RHEL 订阅,并从 Red Hat Content Delivery Network(CDN)安装 RHEL。
  3. 可选:选择 On the network 选项,来从网络位置而不是本地介质下载和安装软件包。这个选项仅在网络连接活跃时可用。有关如何在 GUI 中配置网络连接的信息,请参阅 配置网络和主机名选项

    注意

    如果您不想从网络位置下载并安装其它软件仓库,请执行 配置软件选择

    1. 选择 On the network 下拉菜单指定下载软件包的协议。这个设置取决于您要使用的服务器。
    2. 在地址字段输入服务器地址(不包括协议)。如果您选择 NFS,则会出现第二个输入字段,您可以在其中指定自定义 NFS 挂载选项。此字段接受您系统上 nfs (5) 手册页中列出的选项。
    3. 在选择 NFS 安装源时,使用冒号(:)字符指定地址,来将主机名与路径分开。例如,server.example.com:/path/to/directory

      以下步骤是可选的,且只在您使用代理进行网络访问时才需要。

    4. Proxy setup 来为 HTTP 或 HTTPS 源配置代理。
    5. 选择启用 HTTP 代理服务器 复选框,然后在 Proxy Host 字段输入 URL。
    6. 如果代理服务器需要身份验证,选择 Use Authentication 选项。
    7. 输入您的用户名和密码。
    8. 点击 OK 完成配置并退出 Proxy Setup…​ 对话框。

      注意

      如果您的 HTTP 或 HTTPS URL 指向存储库镜像,请从 URL type 下拉列表中选择所需的选项。完成源配置后,所有环境和附加软件包都可以被选择。

  4. 点击 + 添加存储库。
  5. 点击 - 删除库。
  6. 在打开 Installation Source 窗口时,单击 箭头 图标将当前条目恢复回设置。
  7. 若要激活或停用存储库,请单击列表中每个条目的 Enabled 列中的复选框。

    您可以使用与网络上的主存储库相同的方法命名和配置额外的存储库。

  8. 点击 完成 按钮应用该设置并返回 安装概述 窗口。

6.12. 可选:配置 Kdump 内核崩溃转储机制

Kdump 是内核崩溃转储机制。系统崩溃时,Kdump 会在故障时捕获系统内存内容。可以对捕获的内存进行分析,以找出造成崩溃的原因。如果启用了 Kdump,则需要为其自身保留一小部分系统内存(RAM)。主内核无法访问预留内存。

流程

  1. 安装概述 窗口中点击 Kdump。此时会打开 Kdump 窗口。
  2. 选择 启用 kdump 复选框。
  3. 选择 AutomaticManual 设置内存保留。
  4. 如果选择 Manual,请使用 +- 按钮在Memory to be reserved 字段中输入您要保留的内存量(以 MB 为单位)。保留输入字段下的 Usable System Memory 读数显示保留所选 RAM 量后有多少内存可供主系统访问。
  5. 点击 Done 来应用设置并返回到图形安装。

您保留的内存量由您的系统架构(AMD64 和 Intel 64 与 IBM Power 有不同的要求)以及系统内存总量决定。在大多数情况下,可以使用自动保留。

其他设置,如保存内核崩溃转储的位置,只能在安装后使用 system-config-kdump 图形界面进行配置,或者在 /etc/kdump.conf 配置文件中手动配置。

6.13. 可选:选择安全配置集

您可以在 Red Hat Enterprise Linux 8 安装过程中应用安全策略,并将其配置为在第一次引导前在系统上使用。

6.13.1. 关于安全策略

Red Hat Enterprise Linux 包括 OpenSCAP 套件,以便自动配置系统与特定安全策略保持一致。该策略使用安全内容自动化协议(SCAP)标准实施。这些软件包包括在 AppStream 存储库中。但是,默认情况下,安装和安装后进程不会强制任何策略,因此不会涉及任何检查,除非进行了特别配置。

应用安全策略不是安装程序的强制功能。如果您对系统应用了一个安全策略,则会使用您选择的配置文件中定义的限制来安装它。openscap-scannerscap-security-guide 软件包会添加到您的软件包选择,为合规和漏洞扫描提供预安装工具。

当您选择安全策略时,Anaconda GUI 安装程序需要进行配置以符合该策略的要求。可能会有冲突的软件包选择,以及定义的独立分区。只有在满足所有要求后,就可以开始安装。

在安装过程结束时,所选的 OpenSCAP 安全策略会自动强化系统,并扫描系统以验证合规性,将扫描结果保存到已安装系统上的 /root/openscap_data 目录中。

默认情况下,安装程序使用安装镜像中捆绑的 scap-security-guide 软件包的内容。您还可以从 HTTP、HTTPS 或者 FTP 服务器载入外部内容。

6.13.2. 配置一个安全配置文件

您可以从 Installation Summary 窗口配置安全策略。

先决条件

  • 打开 Installation Summary 窗口。

流程

  1. Installation Summary 窗口中点击 Security Profile。此时会打开 Security Profile 窗口。
  2. 要在系统中启用安全策略,将Apply security policy 切换为 ON
  3. 从上面的方框中选择一个配置集。
  4. 点击 Select profile

    安装前必须应用的配置集的更改出现在底部方框中。

  5. 点击 更改内容 使用自定义配置集。

    此时会打开 一 个单独的窗口,允许您输入一个有效安全内容的 URL。

    1. 点击 Fetch 以检索 URL。

      您可以从 HTTPHTTPS 或者 FTP 服务器载入自定义配置集。使用包括协议内容的完整地址,比如 http://。在载入自定义配置集前必须激活网络连接。安装程序自动检测内容类型。

    2. Use SCAP Security Guide 返回到 Security Profile 窗口。
  6. 点击 完成 按钮应用该设置并返回 安装概述 窗口。

6.13.3. 配置文件与 Server with GUI 不兼容

作为 SCAP 安全指南 的一部分提供的某些安全配置文件与 Server with GUI 基本环境中包含的扩展软件包集合不兼容。因此,在安装与以下配置文件兼容的系统时,不要选择 Server with GUI

Expand
表 6.2. 配置文件与 Server with GUI 不兼容
配置文件名称配置文件 ID原因备注

CIS Red Hat Enterprise Linux 8 基准第 2 级 - 服务器

xccdf_org.ssgproject.content_profile_cis

软件包 xorg-x11-server-Xorgxorg-x11-server-commonxorg-x11-server-utilsxorg-x11-server-XwaylandServer with GUI 软件包集合的一部分,但策略需要删除它们。

 

CIS Red Hat Enterprise Linux 8 基准第 1 级 - 服务器

xccdf_org.ssgproject.content_profile_cis_server_l1

软件包 xorg-x11-server-Xorgxorg-x11-server-commonxorg-x11-server-utilsxorg-x11-server-XwaylandServer with GUI 软件包集合的一部分,但策略需要删除它们。

 

非联邦信息系统和组织中的非保密信息(NIST 800-171)

xccdf_org.ssgproject.content_profile_cui

nfs-utils 软件包是 Server with GUI 软件包集合的一部分,但策略需要删除该软件包。

 

常规目的操作系统的保护配置文件

xccdf_org.ssgproject.content_profile_ospp

nfs-utils 软件包是 Server with GUI 软件包集合的一部分,但策略需要删除该软件包。

 

Red Hat Enterprise Linux 8 的 DISA STIG

xccdf_org.ssgproject.content_profile_stig

软件包 xorg-x11-server-Xorgxorg-x11-server-commonxorg-x11-server-utilsxorg-x11-server-XwaylandServer with GUI 软件包集合的一部分,但策略需要删除它们。

要将 RHEL 系统安装为与 RHEL 8.4 及之后版本中的 DISA STIG 一致的 Server with GUI,您可以使用 DISA STIG with GUI 配置文件。

6.13.4. 使用 Kickstart 部署符合基准的 RHEL 系统

您可以部署与特定基准一致的 RHEL 系统。这个示例为常规目的操作系统(OSPP)使用保护配置集。

先决条件

  • scap-security-guide 软件包已安装在 RHEL 8 系统上。

流程

  1. 在您选择的编辑器中打开 /usr/share/scap-security-guide/kickstart/ssg-rhel8-ospp-ks.cfg Kickstart 文件。
  2. 更新分区方案以符合您的配置要求。为了遵守 OSPP ,必须保留 /boot/home/var/tmp/var/log/var/tmp/var/log/audit 的独立分区,您只能更改分区的大小。
  3. 按照 使用 Kickstart 执行自动安装 中所述来开始 Kickstart 安装。
重要

对于 OSPP 的要求,无法检查 Kickstart 文件中的密码。

验证

  • 要在安装完成后检查系统当前的状态,请重启系统并启动新的扫描:

    # oscap xccdf eval --profile ospp --report eval_postinstall_report.html /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
    Copy to Clipboard Toggle word wrap

第 7 章 更改订阅服务

要管理订阅,您可以在 Red Hat Subscription Management Server 或者 Red Hat Satellite Server 中注册 RHEL 系统。如果需要,可以稍后更改订阅服务。要更改您注册的订阅服务,请从当前服务中取消注册该系统,然后使用新服务进行注册。

要接收系统更新,请使用任一管理服务器注册您的系统。

本节介绍了如何从 Red Hat Subscription Management Server 和 Red Hat Satellite Server 中取消注册 RHEL 系统。

先决条件

使用以下方法注册了您的系统:它包括以下之 一 :

  • Red Hat Subscription Management Server
  • Red Hat Satellite Server version 6.11

要接收系统更新,请使用任一管理服务器注册您的系统。

7.1. 从 Subscription Management Server 中取消注册。

本节介绍如何使用命令行和 Subscription Manager 用户界面从 Red Hat Subscription Management Server 取消注册 RHEL 系统。

7.1.1. 使用命令行取消注册

使用 unregister 命令从 Red Hat Subscription Management Server 取消注册 RHEL 系统。

流程

  1. 作为 root 用户运行 unregister 命令,无需任何附加参数。

    # subscription-manager unregister
    Copy to Clipboard Toggle word wrap
  2. 提示时请提供 root 密码。

在 Subscription Management Server 中取消注册该系统,状态会显示"系统当前没有注册"信息,且Register 按钮可用。

要继续不间断的服务,请使用任一管理服务重新注册系统。如果您没有使用管理服务注册系统,您可能无法收到系统更新。有关注册系统的更多信息,请参阅 使用命令行注册您的系统

7.1.2. 使用 Subscription Manager 用户界面取消注册

您可以使用 Subscription Manager 用户界面从 Red Hat Subscription Management Server 中取消 RHEL 系统的注册。

流程

  1. 登录到您的系统。
  2. 从窗口的左上方点击 Activities
  3. 在菜单选项中点显示应用程序图标。
  4. Red Hat Subscription Manager 图标,或使用 Red Hat Subscription Manager 进行搜索。
  5. Authentication Required 对话框中输入管理员密码。Subscriptions 窗口会出现并显示订阅、系统目的和已安装产品的当前状态。未注册的产品会显示红色 X。

    需要进行身份验证才能在系统上执行特权任务。

  6. Unregister 按钮。

在 Subscription Management Server 中取消注册该系统,状态会显示"系统当前没有注册"信息,且Register 按钮可用。

要继续不间断的服务,请使用任一管理服务重新注册系统。如果您没有使用管理服务注册系统,您可能无法收到系统更新。有关注册系统的更多信息,请参阅 使用 Subscription Manager 用户界面注册您的系统

7.2. 在 Satellite 服务器中取消注册

要从 Satellite 服务器中取消 Red Hat Enterprise Linux 系统注册,从 Satellite 服务器中删除该系统。

如需更多信息,请参阅 从 Red Hat Satellite 中删除主机

要增强操作系统的安全性,在启用了 UEFI 安全引导的系统上引导 Red Hat Enterprise Linux Beta 版本时,对签名验证使用 UEFI 安全引导特性。

8.1. UEFI 安全引导和 RHEL Beta 版本

UEFI 安全引导要求操作系统内核使用可识别的私钥进行签名。UEFI 安全引导然后使用对应的公钥验证签名。

对于 Red Hat Enterprise Linux Beta 版,内核使用特定于红帽 Beta 的私钥进行签名。UEFI 安全引导尝试使用对应的公钥验证签名,但由于硬件无法识别 Beta 私钥,因此 Red Hat Enterprise Linux Beta 版本系统无法引导。因此,要在 Beta 版本中使用 UEFI 安全引导,请使用 Machine Owner Key (MOK) 功能将红帽 Beta 公钥添加到您的系统中。

8.2. 为 UEFI 安全引导添加 Beta 公钥

本节介绍如何为 UEFI 安全引导添加 Red Hat Enterprise Linux Beta 公钥。

先决条件

  • UEFI 安全引导已在系统中禁用。
  • 已安装 Red Hat Enterprise Linux Beta 版本,即使系统重启,安全引导也会被禁用。
  • 您已登录到系统,Initial Setup 窗口中的任务已完成。

流程

  1. 开始将红帽 Beta 公钥注册到系统机器所有者密钥 (MOK) 列表中:

    # mokutil --import /usr/share/doc/kernel-keys/$(uname -r)/kernel-signing-ca.cer
    Copy to Clipboard Toggle word wrap

    $(uname -r) 替换为内核版本 - 例如: 4.18.0-80.el8.x86_64

  2. 出现提示时输入密码。
  3. 重新启动系统并按任意键继续启动。Shim UEFI 密钥管理实用程序在系统启动期间启动。
  4. 选择 Enroll MOK
  5. 选择 Continue
  6. Yes 并输入密码。密钥导入到系统的固件中。
  7. 选择 Reboot
  8. 在系统上启用安全引导。

8.3. 删除 Beta 公钥

如果您计划删除 Red Hat Enterprise Linux Beta 版本,并安装 Red Hat Enterprise Linux 正式发行版本 (GA) 或一个不同的操作系统,请删除 Beta 公钥。

这个步骤描述了如何删除 Beta 公钥。

流程

  1. 开始从系统的 Machine Owner Key (MOK) 列表中删除 Red Hat Beta 公钥:

    # mokutil --reset
    Copy to Clipboard Toggle word wrap
  2. 出现提示时输入密码。
  3. 重新启动系统并按任意键继续启动。Shim UEFI 密钥管理实用程序在系统启动期间启动。
  4. 选择 Reset MOK
  5. 选择 Continue
  6. 选择 Yes,并输入在第 2 步中指定的密码。密钥已从系统的固件中删除。
  7. 选择 Reboot

附录 A. 引导选项参考

您可以使用引导选项修改安装程序的默认行为。

A.1. 安装源引导选项

这部分论述了各种安装源引导选项。

inst.repo=

inst.repo= 引导选项用来指定安装源,即提供软件包存储库的位置以及描述它们的有效 .treeinfo 文件。例如: inst.repo=cdrominst.repo= 选项的目标必须是以下安装介质之一 :

  • 一个可安装的树,它是一个目录结构,包含了安装程序镜像、软件包和存储库数据的目录结构,以及一个有效的 .treeinfo 文件。
  • 一个 DVD(系统 DVD 驱动器中有物理磁盘)
  • 完整的 Red Hat Enterprise Linux 安装 DVD 的 ISO 镜像放在磁盘或者系统可访问的网络位置上。

    使用 inst.repo= 引导选项使用不同的格式配置不同的安装方法。下表包含 inst.repo= 引导选项语法的详情:

    Expand
    表 A.1. inst.repo= 引导选项和安装源的类型和格式
    源类型引导选项格式源格式

    CD/DVD 驱动器

    inst.repo=cdrom:<device>

    将 DVD 作为物理磁盘安装。 [a]

    可挂载设备(HDD 和 USB 盘)

    inst.repo=hd:<device>:/<path>

    安装 DVD 的镜像文件。

    NFS 服务器

    inst.repo=nfs:[options:]<server>:/<path>

    DVD 或安装树的镜像文件,这是安装 DVD 中的目录和文件的完整副本。 [b]

    HTTP 服务器

    inst.repo=http://<host>/<path>

    安装树是安装 DVD 上目录和文件的完整副本。

    HTTPS 服务器

    inst.repo=https://<host>/<path>

    FTP 服务器

    inst.repo=ftp://<username>:<password>@<host>/<path>

    HMC

    inst.repo=hmc

     
    [a] 如果禁用了设备,安装程序会自动搜索包含安装 DVD 的驱动器。
    [b] NFS 服务器选项默认使用 NFS 协议版本 3。要使用不同的版本,请将 nfsvers=X 添加到 options 中,将 X 替换为您要使用的版本号。

使用以下格式设定磁盘设备名称:

  • 内核设备名称,例如 /dev/sda1 或者 sdb2
  • 文件系统标签,如 LABEL=FlashLABEL=RHEL8
  • 文件系统 UUID,如 UUID=8176c7bf-04ff-403a-a832-9557f94e61db

非字母数字字符必须使用 \xNN 表示,其中 NN 是字符对应的十六进制代码。例如: \x20 是一个空格 (" ")

inst.addrepo=

使用 inst.addrepo= 引导选项添加一个额外的存储库,该存储库可用作另一个安装源和主存储库(inst.repo=)。您可以在一次引导过程中多次使用 inst.addrepo= 引导选项。下表包含 inst.addrepo= 引导选项语法的详情。

注意

REPO_NAME 是该程序库的名称,它是安装过程中必需的。这些软件仓库仅在安装过程中使用,它们不会在安装的系统中安装。

有关统一的 ISO 的更多信息,请参阅 统一的 ISO。

Expand
表 A.2. 安装源和引导选项格式
安装源引导选项格式附加信息

在 URL 中可安装的树

inst.addrepo=REPO_NAME,[http,https,ftp]://<host>/<path>

在给定 URL 中查找可安装的树。

NFS 路径中的可安装树

inst.addrepo=REPO_NAME,nfs://<server>:/<path>

在给定的 NFS 路径中查找可安装的树。主机后需要一个冒号。安装程序将 nfs:// 后的所有内容直接传递给 mount 命令,而不是根据 RFC 2224 解析 URL。

安装环境中的可安装树

inst.addrepo=REPO_NAME,file://<path>

在安装环境中的给定位置查找可安装的树。要使用这个选项,必须在安装程序尝试载入可用软件组前挂载该程序库。这个选项的好处是,您可以在一个可引导 ISO 上有多个库,您还可以从 ISO 安装主存储库和其他软件仓库。到额外软件仓库的路径为 /run/install/source/REPO_ISO_PATH。另外,您可以在 Kickstart 文件的 %pre 部分中挂载存储库目录。该路径必须是绝对的,并以 / 开头,例如 inst.addrepo=REPO_NAME,file:///<path>

磁盘

inst.addrepo=REPO_NAME,hd:<device>:<path>

挂载给定的 <device> 分区并从由 <path> 指定的 ISO 中安装。如果没有指定 <path>,安装程序会在 <device> 中查找有效安装 ISO。这个安装方法需要一个含有有效可安装树的 ISO。

inst.stage2=

inst.stage2= 引导选项指定安装程序运行时镜像的位置。这个选项需要包含有效的 .treeinfo 文件的目录的路径,并从 .treeinfo 文件中读取运行时镜像位置。如果 .treeinfo 文件不可用,安装程序会尝试从 images/install.img 中载入该镜像。

当您没有指定 inst.stage2 选项时,安装程序会尝试使用 inst.repo 选项指定的位置。

当您稍后在安装程序中手动指定安装源时,请使用这个选项。例如,当您要选择 Content Delivery Network (CDN) 作为安装源时。安装 DVD 和引导 ISO 已经包含一个合适的 inst.stage2 选项,来从相应的 ISO 引导安装程序。

如果要指定安装源,请使用 inst.repo= 选项。

注意

默认情况下,在安装介质中使用 inst.stage2= 引导选项,并被设置特定的标签 ; 例如:inst.stage2=hd:LABEL=RHEL-x-0-0-BaseOS-x86_64。如果您修改了包含运行时镜像的文件系统的默认标签,或者使用自定义流程引导安装系统,请验证 inst.stage2= 引导选项是否已被设置为正确的值。

inst.noverifyssl

使用 inst.noverifyssl 引导选项防止安装程序为所有 HTTPS 连接验证 SSL 证书,但附加 Kickstart 软件仓库除外,其中 --noverifyssl 可为每个存储库设置。

例如:如果您的远程安装源使用自签名 SSL 证书,inst.noverifyssl 引导选项可让安装程序在不验证 SSL 证书的情况下完成安装。

使用 inst.stage2= 指定源时的示例

inst.stage2=https://hostname/path_to_install_image/ inst.noverifyssl
Copy to Clipboard Toggle word wrap

使用 inst.repo= 指定源时的示例

inst.repo=https://hostname/path_to_install_repository/ inst.noverifyssl
Copy to Clipboard Toggle word wrap

inst.stage2.all

使用 inst.stage2.all 引导选项来指定几个 HTTP、HTTPS 或者 FTP 源。您可以多次使用 inst.stage2= 引导选项,同时使用 inst.stage2.all 选项按顺序从源获取镜像,直到成功为止。例如:

inst.stage2.all
inst.stage2=http://hostname1/path_to_install_tree/
inst.stage2=http://hostname2/path_to_install_tree/
inst.stage2=http://hostname3/path_to_install_tree/
Copy to Clipboard Toggle word wrap
inst.dd=
inst.dd= 引导选项在安装过程中用来执行驱动程序更新。有关如何在安装过程中更新驱动程序的更多信息,请参阅 在安装过程中更新驱动程序
inst.repo=hmc

这个选项消除了外部网络设置的要求并扩展安装选项。当使用二进制 DVD 引导时,安装程序会提示您输入附加内核参数。要将 DVD 设置为安装源,请在内核参数中附加 inst.repo=hmc 选项。然后安装程序启用支持元素(SE)和硬件管理控制台(HMC)文件访问,从 DVD 中获取 stage2 的镜像,并提供对 DVD 上软件包的访问以供软件选择。

重要

要使用 inst.repo 引导选项,请确保用户配置了 最小 Privilege Class B。有关用户配置的更多信息,请参阅 IBM 文档

proxy=

当从 HTTP、HTTPS 和 FTP 协议执行安装时使用这个引导选项。例如:

[PROTOCOL://][USERNAME[:PASSWORD]@]HOST[:PORT]
Copy to Clipboard Toggle word wrap
inst.nosave=

使用 inst.nosave= 引导选项控制安装日志以及没有保存到安装的系统中的相关文件,如 input_ksoutput_ksall_kslogsall。您可以以逗号分隔的方式组合多个值。例如,

inst.nosave=Input_ks,logs
Copy to Clipboard Toggle word wrap
注意

inst.nosave 引导选项用于排除安装系统中无法被 Kickstart %post 脚本删除的文件,如日志和输入/输出 Kickstart 结果。

input_ks
禁用保存输入 Kickstart 结果的功能。
output_ks
禁用保存安装程序生成的 Kickstart 结果的功能。
all_ks
禁用保存输入和输出 Kickstart 结果的功能。
日志
禁用保存所有安装日志的功能。
all
禁用保存所有 Kickstart 结果以及所有日志的功能。
inst.multilib
使用 inst.multilib 引导选项将 DNF 的 multilib_policy 设置为 all,而不是 best
inst.memcheck
inst.memcheck 引导选项执行检查来验证系统是否有足够 RAM 来完成安装。如果没有足够的 RAM,安装过程将停止。系统检查不是完全准确的,在安装过程中的内存用量要根据软件包的选择、用户界面(如图形或文本)和其它参数而定。
inst.nomemcheck
inst.nomemcheck 引导选项不会执行检查来验证系统是否有足够 RAM 完成安装。任何小于最小内存量的安装都不支持,并可能导致安装过程失败。

A.2. 网络引导选项

如果您的场景需要通过网络从镜像引导,而不是从本地镜像引导,您可以使用以下选项来自定义网络引导。

注意

使用 dracut 工具初始化网络。有关 dracut 选项的完整列表,请查看您系统上的 dracut.cmdline (7) 手册页。

ip=

使用 ip= 引导选项配置一个或多个网络接口。要配置多个接口,请使用以下方法之一;

  • 多次使用 ip 选项,每个接口一次; 为此,请使用 rd.neednet=1 选项,并使用 bootdev 选项指定一个主引导接口。
  • 使用 ip 选项一次,然后使用 Kickstart 设置其他接口。这个选项接受几种不同的格式。下表包含大多数常用选项的信息。

在以下表格中:

  • ip 参数指定客户端 IP 地址,IPv6 需要方括号,如 192.0.2.1 或 [2001:db8::99]。
  • gateway 参数是默认网关。IPv6 需要方括号。
  • netmask 参数是要使用的子网掩码。这可以是完整子网掩码(例如: 255.255.255.0),或是一个前缀(例如 64)。
  • hostname 参数是客户端系统的主机名。这个参数是可选的。

    Expand
    表 A.3. 配置网络接口的引导选项格式
    引导选项格式配置方法

    ip=method

    自动配置任意接口

    ip=interface:method

    自动配置特定的接口

    ip=ip::gateway:netmask:hostname:interface:none

    静态配置,例如 IPv4:ip=192.0.2.1::192.0.2.254:255.255.255.0:server.example.com:enp1s0:none

    IPv6: ip=[2001:db8::1]::[2001:db8::fffe]:64:server.example.com:enp1s0:none

    ip=ip::gateway:netmask:hostname:interface:method:mtu

    自动配置特定接口并进行覆盖

    自动接口的配置方法

    带有覆盖的特定接口的自动配置 方法使用自动配置的指定方法(如 dhcp )打开接口,但会覆盖自动获得的 IP 地址、网关、子网掩码、主机名或其他指定的参数。所有参数都是可选的,因此仅指定您要覆盖的参数。

    method 参数可以是以下任意一个:

    DHCP
    dhcp
    IPv6 DHCP
    dhcp6
    IPv6 自动配置
    auto6
    iSCSI Boot Firmware Table (iBFT)
    ibft
    注意
    • 如果您使用需要网络访问的引导选项,如 inst.ks=http://host/path,但没有指定 ip 选项,则 ip 选项的默认值是 ip=dhcp
    • 要自动连接到 iSCSI 目标,请使用 ip=ibft 引导选项激活访问目标的网络设备。
    nameserver=

    nameserver= 选项指定名称服务器的地址。您可以多次使用这个选项。

    注意

    ip= 参数需要方括号。但是 IPv6 地址不能使用方括号。IPv6 地址使用的正确语法示例为 nameserver= 2001:db8::1

    bootdev=
    bootdev= 选项指定引导接口。如果您使用多个 ip 选项,则这个选项是必须的。
    ifname=

    ifname= 选项为具有给定 MAC 地址的网络设备分配接口名称。您可以多次使用这个选项。语法是 ifname=interface:MAC。例如:

    ifname=eth0:01:23:45:67:89:ab
    Copy to Clipboard Toggle word wrap
    注意

    ifname= 选项是在安装过程中设置自定义网络接口的唯一方法。

    inst.dhcpclass=
    inst.dhcpclass= 选项指定 DHCP 厂商级识别符。dhcpd 服务将此值识别为 vendor-class-identifier。默认值为 anaconda-$(uname -srm)。要确保 inst.dhcpclass= 选项被正确应用,请在安装过程的早期阶段通过添加 ip 选项来请求网络激活。
    inst.waitfornet=
    使用 inst.waitfornet=SECONDS 引导选项可导致安装系统在安装前等待网络连接。SECONDS 参数中给出的值指定在超时和继续安装过程(即使网络连接不存在)前等待网络连接的最长时间。
    vlan=

    使用 vlan= 选项来在具有给定名称的指定接口上配置虚拟 LAN(VLAN)设备。语法为 vlan=name:interface。例如:

    vlan=vlan5:enp0s1
    Copy to Clipboard Toggle word wrap

    这会在 enp0s1 接口上配置一个名为 vlan5 的 VLAN 设备。名称可采用以下格式:

  • VLAN_PLUS_VID: vlan0005
  • VLAN_PLUS_VID_NO_PAD: vlan5
  • DEV_PLUS_VID: enp0s1.0005
  • DEV_PLUS_VID_NO_PAD: enp0s1.5

    bond=

    使用 bond= 选项来配置绑定设备,语法如下: bond=name[:interfaces][:options]。使用绑定设备名称替换 name,使用以逗号分隔的物理(以太网)接口列表替换 interfaces,并使用以逗号分隔的绑定选项列表替换 options。例如:

    bond=bond0:enp0s1,enp0s2:mode=active-backup,tx_queues=32,downdelay=5000
    Copy to Clipboard Toggle word wrap

    有关可用选项的列表,请执行 modinfo 绑定命令。

    team=

    使用 team= 选项来配置团队设备,语法如下: team=name:interfaces。使用所需团队设备替换 name,使用要用作团队设备中底层接口的、以逗号分隔的物理(以太网)设备列表替换 interfaces。例如:

    team=team0:enp0s1,enp0s2
    Copy to Clipboard Toggle word wrap
    bridge=

    使用 bridge= 选项来配置网桥设备,语法如下:bridge=name:interfaces。使用所需的网桥设备名称替换 name,使用要用作网桥设备中底层接口的、以逗号分隔的物理(以太网)设备列表替换 interfaces。例如:

    bridge=bridge0:enp0s1,enp0s2
    Copy to Clipboard Toggle word wrap

A.3. 控制台引导选项

这部分论述了如何为控制台、显示器显示和键盘配置引导选项。

console=
使用 console= 选项指定您要用作主控制台的设备。例如,若要在第一个串行端口上使用控制台,可使用 console=ttyS0。在使用 console= 参数时,安装以文本 UI 开始。如果必须多次使用 console= 选项,则引导信息会在所有指定的控制台上显示。但是,安装程序只使用最后指定的控制台。例如: 如果您指定了 console=ttyS0 console=ttyS1,安装程序将使用 ttyS1
inst.lang=
使用 inst.lang= 选项设定要在安装中使用的语言。要查看区域设置的列表,请输入命令 locale -a | grep _localectl list-locales | grep _ 命令。
inst.singlelang
使用 inst.singlelang 选项以单一语言模式安装,这会导致安装语言和语言支持配置没有可用的互动选项。如果使用 inst.lang 引导选项或 lang Kickstart 命令指定语言,则会使用它。如果没有指定语言,安装程序默认为 en_US.UTF-8
inst.geoloc=

使用 inst.geoloc= 选项在安装程序中配置地理位置的使用。地理位置用于预先设置语言和时区,并使用以下语法: inst.geoloc=value可以是以下参数:

  • 禁用地理位置:inst.geoloc=0
  • 使用 Fedora GeoIP API: inst.geoloc=provider_fedora_geoip
  • 使用 Hostip.info GeoIP API: inst.geoloc=provider_hostip

    如果您没有指定 inst.geoloc= 选项,则默认选项是 provider_fedora_geoip

inst.keymap=
使用 inst.keymap= 选项指定用于安装的键盘布局。
inst.cmdline
使用 inst.cmdline 选项强制安装程序在命令行模式下运行。这个模式不允许任何互动,且您必须在 Kickstart 文件或者命令行中指定所有选项。
inst.graphical
使用 inst.graphical 选项强制安装程序在图形模式下运行。图形模式是默认设置。
inst.text
使用 inst.text 选项强制安装程序在文本模式而不是图形模式中运行。
inst.noninteractive
使用 inst.noninteractive 引导选项以非互动模式运行安装程序。在非互动模式下不允许用户互动 inst.noninteractive ,您可以在图形或文本安装中使用 inst.nointeractive 选项。当您在文本模式下使用 inst.noninteractive 选项时,它的行为与 inst.cmdline 选项一样。
inst.resolution=
使用 inst.resolution= 选项指定图形模式中的页面分辨率。格式为 NxM,其中 N 是屏幕宽度,M 是屏幕高度(单位为像素)。推荐的分辨率为 1024x768。
inst.vnc
使用 inst.vnc 选项,使用虚拟网络计算(VNC)来运行图形安装。您必须使用 VNC 客户端应用程序与安装程序交互。启用 VNC 共享时,可以连接多个客户端。在文本模式中安装使用 VNC 启动的系统。
inst.vncpassword=
使用 inst.vncpassword= 选项在 VNC 服务器中设定安装程序使用的密码。
inst.vncconnect=
使用 inst.vncconnect= 选项连接到给定主机位置处的侦听 VNC 客户端,例如:inst.vncconnect=<host>[:<port>],默认端口为 5900。您可以通过输入 vncviewer -listen 命令来使用此选项。
inst.xdriver=
使用 inst.xdriver= 选项指定在安装过程中和在安装的系统上使用的 X 驱动程序名称。
inst.usefbx
使用 inst.usefbx 选项提示安装程序使用帧缓冲 X 驱动程序,而不是具体硬件驱动程序。这个选项等同于 inst.xdriver=fbdev 选项。
modprobe.blacklist=

使用 modprobe.blacklist= 选项阻止列表或完全禁用一个或多个驱动程序。安装启动时,使用这个选项禁用的驱动程序(模式)无法加载。安装完成后,安装的系统会保持这些设置。您可以在 /etc/modprobe.d/ 目录中找到 blocklisted 驱动程序的列表。使用以逗号分隔的列表禁用多个驱动程序。例如:

modprobe.blacklist=ahci,firewire_ohci
Copy to Clipboard Toggle word wrap
注意

您可以将 modprobe.blacklist 与不同的命令行选项结合使用。例如,将其与 inst.dd 选项一起使用,以确保从驱动程序更新磁盘加载现有驱动程序的更新版本:

modprobe.blacklist=virtio_blk
Copy to Clipboard Toggle word wrap
inst.xtimeout=
使用 inst.xtimeout= 选项指定启动 X 服务器的时间(以秒为单位)。
inst.sshd

使用 inst.sshd 选项在安装过程中启动 sshd 服务,以便您可以在安装过程中使用 SSH 连接到该系统,并监控安装进程。有关 SSH 的详情,请查看您系统上的 ssh (1) 手册页。默认情况下,sshd 选项只在 64 位 IBM Z 构架上自动启动。在其它构架中,除非您使用 inst.sshd 选项,否则不会启动 sshd

注意

在安装过程中,root 帐户默认没有密码。您可在安装过程中使用 sshpw Kickstart 命令设定根密码。

inst.kdump_addon=
使用 inst.kdump_addon= 选项启用或者禁用安装程序中的 Kdump 配置页面(附加组件)。这个屏幕默认是启用的;使用 inst.kdump_addon=off 禁用它。禁用该附加组件可在图形和文本界面以及 %addon com_redhat_kdump Kickstart 命令中禁用 Kdump 页面。

A.4. 调试引导选项

本节论述了在调试问题时可以使用的选项。

inst.rescue
使用 inst.rescue 选项运行救援环境,以诊断和修复系统。如需更多信息,请参阅红帽知识库解决方案 在救援模式下修复文件系统
inst.updates=

使用 inst.updates= 选项指定您要在安装过程中应用的 updates.img 文件的位置。updates.img 文件可以从多个源中派生出来。

Expand
表 A.4. updates.img 文件源
描述示例

从网络更新

指定 updates.img 的网络位置。这不需要对安装树进行任何修改。要使用这个方法,请编辑内核命令行使其包含 inst.updates

inst.updates=http://website.com/path/to/updates.img.

从磁盘镜像更新

在软盘或者 USB 密钥上保存 updates.img。这只适用于 updates.imgext2 文件系统类型。要在软盘驱动器中保存镜像内容,请插入软盘并运行命令。

dd if=updates.img of=/dev/fd0 bs=72k count=20。要使用 USB 密钥或闪存介质,请使用 USB 闪存驱动器的设备名称替换 /dev/fd0

安装树中的更新

如果您使用 CD、磁盘、HTTP 或者 FTP 安装,请在安装树中保存 updates.img,以便所有安装都可以检测到 .img 文件。文件名必须是 updates.img

对于 NFS 安装,将文件保存在 images/ 目录中,或保存在 RHupdates/ 目录中。

inst.loglevel=

使用 inst.loglevel= 选项指定终端日志信息的最低级别。这个选项只适用于终端日志记录 ; 日志文件总是包含所有级别的信息。这个选项的可能值从最低级到最高级为:

  • debug
  • info
  • warning
  • 错误
  • critical

默认值为 info,就是说默认情况下,日志记录终端会显示从 info 级别到 critical 级别范围的信息。

inst.syslog=
安装开始时,将日志消息发送给指定主机上的 syslog 进程。只有在远程 syslog 进程配置为接受进入的连接时,才可以使用 inst.syslog=
inst.virtiolog=
使用 inst.virtiolog= 选项指定使用哪个 virtio 端口(一个位于 /dev/virtio-ports/name的字符设备)来转发日志。默认值为 org.fedoraproject.anaconda.log.0
inst.zram=

控制在安装过程中 zRAM swap 的使用。选项在系统 RAM 中创建一个压缩的块设备,并将其用于 swap 空间,而不是使用磁盘。这个设置可让安装程序使用较少的可用内存运行,并改进安装速度。您可以使用以下值配置 inst.zram= 选项:

  • inst.zram=1 启用 zRAM swap,无论系统内存大小如何。默认情况下,在内存为 2 GiB 或更少的系统上启用 zRAM 上的 swap。
  • inst.zram=0 禁用 zRAM swap,无论系统内存大小如何。默认情况下,在超过 2 GiB 内存的系统上禁用 zRAM 上的 swap。
rd.live.ram
images/install.img 中的 stage 2 镜像复制到 RAM 中。请注意,这会增加安装镜像所需的内存,镜像的大小通常介于 400 到 800MB 之间。
inst.nokill
当发生致命错误或安装过程结束时,防止安装程序重新启动。使用它捕获重启后可能丢失的安装日志。
inst.noshell
在安装过程中防止终端会话 2(tty2)上的 shell。
inst.notmux
防止在安装过程中使用 tmux。输出在没有终端控制字符的情况下生成,用于非互动性。
inst.remotelog=
使用 TCP 连接将所有日志发送到远程 host:port。如果没有监听程序而安装正常进行,则该连接将会停用。

A.5. 存储启动选项

这部分论述了您可以指定用来定制从存储设备引导的选项。

inst.nodmraid
禁用 dmraid 支持。
警告

请小心使用这个选项。如果您有一个被错误地识别为固件 RAID 阵列一部分的磁盘,则它上面可能有一些过时的 RAID 元数据,这些数据必须使用合适的工具删除,如 dmraidwipefs

inst.nompath
禁用对多路径设备的支持。只有当您的系统出现误报,错误地将普通块设备识别为多路径设备时,才使用这个选项。
警告

请小心使用这个选项。不要在多路径硬件中使用这个选项。不支持使用这个选项安装到多路径设备的一个路径。

inst.gpt
强制安装程序将分区信息安装到 GUID 分区表(GPT),而不是主引导记录(MBR)。这个选项在基于 UEFI 的系统上无效,除非采用与 BIOS 兼容的模式。通常,基于 BIOS 的系统和基于 UEFI 的系统在兼容模式下尝试使用 MBR 模式来存储分区信息,除非磁盘大小为 2^32 个扇区或大于 2 个扇区。磁盘扇区大小通常是 512 字节,通常相当于 2 TiB。inst.gpt 引导选项允许将 GPT 写到较小的磁盘。
inst.wait_for_disks=
使用 inst.wait_for_disks= 选项指定安装程序在安装开始时等待磁盘设备出现的秒数。当您使用 OEMDRV-labeled 设备自动加载 Kickstart 文件或内核驱动程序时使用这个选项,但设备在引导过程中需要很长时间才出现。默认情况下,安装程序等待 5 秒。使用 0 秒来最小化延迟。

A.6. 弃用的引导选项

本节包含已弃用的引导选项的信息。安装程序仍然可以接受这些选项,但它们已被弃用,并计划在以后的 Red Hat Enterprise Linux 版本中删除。

method
method 选项是 inst.repo 的别名。
dns
使用 nameserver 替代 dns。请注意,名称服务器不接受用逗号分开的列表 ; 使用多个名称服务器选项。
netmask, gateway, hostname
netmaskgatewayhostname 选项作为 ip 选项的一部分提供。
ip=bootif
自动使用 PXE 提供的 BOOTIF 选项,因此无需使用 ip=bootif
ksdevice
Expand
表 A.5. ksdevice 引导选项的值
Value信息

不存在

N/A

ksdevice=link

忽略,这个选项与默认行为相同

ksdevice=bootif

如果存在 BOOTIF=,则忽略此选项。

ksdevice=ibft

替换为 ip=ibft。详情请查看 ip

ksdevice=<MAC>

使用 BOOTIF=${MAC/:/-}替代

ksdevice=<DEV>

bootdev替换

A.7. 删除引导选项

这部分包含从 Red Hat Enterprise Linux 中删除的引导选项。

注意

dracut 提供高级引导选项。有关 dracut 的更多信息,请参阅您系统上的 dracut.cmdline (7) 手册页。

askmethod, asknetwork
initramfs 是完全非互动的,因此删除了 askmethodasknetwork 选项。使用 inst.repo 或者指定合适的网络选项。
blacklist, nofirewire
modprobe 选项现在可以处理阻止列表中的内核模块。使用 modprobe.blacklist=<mod1>,<mod2>。您可以使用 modprobe.blacklist=firewire_ohci 阻止 firewire 模块列表。
inst.headless=
headless= 选项指定安装的系统没有任何显示硬件,且安装程序不需要查找任何显示硬件。
inst.decorated
inst.decorated 选项用于在解码窗口中指定图形安装。默认情况下,窗口未经过修饰,因此它没有标题栏,调整控制等。这个选项不再需要。
repo=nfsiso
使用 inst.repo=nfs: 选项。
serial
使用 console=ttyS0 选项。
updates
使用 inst.updates 选项。
essid, wepkey, wpakey
Dracut 不支持无线网络。
ethtool
这个选项不再需要。
gdb
这个选项已被删除,因为很多选项可用于调试基于 dracut 的 initramfs
inst.mediacheck
使用 dracut option rd.live.check 选项。
ks=floppy
使用 inst.ks=hd:<device> 选项。
显示
对于 UI 的远程显示,使用 inst.vnc 选项。
utf8
因为默认 TERM 设置的行为与预期一致,所以不再需要这个选项。
noipv6
IPv6 是内置在内核中,不能被安装程序删除。您可以使用 ipv6.disable=1 禁用 ipv6。安装的系统将使用这个设置。
upgradeany
因为安装程序不再处理升级,所以不再需要这个选项。

第 9 章 创建自定义 RHEL 系统镜像

9.1. RHEL 镜像构建器描述

要部署一个系统,请创建一个系统镜像。要创建 RHEL 系统镜像,请使用 RHEL 镜像构建器工具。您可以使用 RHEL 镜像构建器创建 RHEL 的自定义系统镜像,包括为在云平台上的部署准备的系统镜像。RHEL 镜像构建器自动为每种输出类型处理配置详情,因此比手动创建镜像方法更容易和更快地使用。您可以使用 composer-cli 工具中的命令行或 RHEL web 控制台中的图形用户界面来访问 RHEL 镜像构建器功能。

注意

从 RHEL 8.3 开始,osbuild-composer 后端替换了 lorax-composer。新服务为镜像构建提供 REST API。

9.1.1. RHEL 镜像构建器术语

RHEL 镜像构建器使用以下概念:

蓝图(Blueprint)

蓝图是自定义系统镜像的描述。它列出了将成为系统一部分的软件包和自定义。您可以使用自定义编辑蓝图,并将其保存为特定版本。当从蓝图创建系统镜像时,镜像与 RHEL 镜像构建器界面中的蓝图相关联。

以 TOML 格式创建蓝图。

组合(Compose)
compose 是基于特定蓝图的特定版本的系统镜像构建。作为一个术语,Compose 代表系统镜像以及来自其创建、输入、元数据和进程本身的日志。
自定义(Customizations)
自定义是不是软件包的镜像的规格。这包括用户、组和 SSH 密钥。

9.1.2. RHEL 镜像构建器输出格式

RHEL 镜像构建器可以以下表中显示的多种输出格式创建镜像。

Expand
表 9.1. RHEL 镜像构建器输出格式
描述CLI 名称文件扩展名

QEMU 镜像

qcow2

.qcow2

磁盘归档

tar

.tar

Amazon Web Services

raw

.raw

Microsoft Azure

vhd

.vhd

Google Cloud Platform

gce

.tar.gz

VMware vSphere

vmdk

.vmdk

VMware vSphere

ova

.ova

Openstack

openstack

.qcow2

RHEL for Edge Commit

edge-commit

.tar

RHEL for Edge 容器

edge-container

.tar

RHEL for Edge 安装程序

edge-installer

.iso

RHEL for Edge Raw 镜像

edge-raw-image

.raw.xz

用于边缘简化安装程序的 RHEL

edge-simplified-installer

.iso

RHEL for Edge AMI

edge-ami

.ami

RHEL for Edge VMDK

edge-vsphere

.vmdk

RHEL 安装程序

image-installer

.iso

Oracle 云基础架构

.oci

.qcow2

要检查支持的类型,请运行以下命令:

# composer-cli compose types
Copy to Clipboard Toggle word wrap

9.1.3. 镜像构建支持的构架

RHEL 镜像构建器支持为以下架构构建镜像:

  • AMD 和 Intel 64 位(x86_64)
  • ARM64 (aarch64)
  • IBM Z (s390x)
  • IBM POWER 系统

但是,RHEL 镜像构建器不支持多架构构建。它仅构建其上运行的相同系统架构的镜像。例如,如果 RHEL 镜像构建器在 x86_64 系统上运行,它只能为 x86_64 架构构建镜像。

9.2. 安装 RHEL 镜像构建器

RHEL 镜像构建器是一个创建自定义系统镜像的工具。在使用 RHEL 镜像构建器前,您必须安装它。

9.2.1. RHEL 镜像构建器系统要求

运行 RHEL 镜像构建器的主机必须满足以下要求:

Expand
表 9.2. RHEL 镜像构建器系统要求
参数最低要求值

系统类型

一个专用的主机或虚拟机。请注意,RHEL 镜像构建器在容器中不支持,包括 Red Hat Universal Base Images (UBI)。

处理器

2 个内核

内存

4 GiB

磁盘空间

'/var/cache/' 文件系统中有 20 GiB 可用空间

访问权限

root

网络

到 Red Hat Content Delivery Network (CDN)的互联网连接。

注意

如果您没有互联网连接,请在隔离网络中使用 RHEL 镜像构建器。为此,您必须覆盖默认存储库以指向本地存储库,来不连接到 Red Hat Content Delivery Network (CDN)。确保您有内部镜像的内容或使用 Red Hat Satellite。

9.2.2. 安装 RHEL 镜像构建器

安装 RHEL 镜像构建器以访问所有 osbuild-composer 软件包功能。

先决条件

  • 您已登陆到要在其上安装 RHEL 镜像构建器的 RHEL 主机。
  • 主机已订阅到 Red Hat Subscription Manager (RHSM)或 Red Hat Satellite。
  • 您已启用了 BaseOSAppStream 存储库,以便能安装 RHEL 镜像构建器软件包。

流程

  1. 安装 RHEL 镜像构建器和其他必要的软件包:

    # yum install osbuild-composer composer-cli cockpit-composer
    Copy to Clipboard Toggle word wrap
    • osbuild-composer - 一个构建自定义 RHEL 操作系统镜像的服务。
    • composer-cli- 这个软件包提供对 CLI 界面的访问。
    • cockpit-composer - 这个软件包提供对 Web UI 界面的访问。Web 控制台作为 cockpit-composer 软件包的依赖项安装。
  2. 启用并启动 RHEL 镜像构建器套接字:

    # systemctl enable --now osbuild-composer.socket
    Copy to Clipboard Toggle word wrap
  3. 如果要在 web 控制台中使用 RHEL 镜像构建器,请启用并启动它。

    # systemctl enable --now cockpit.socket
    Copy to Clipboard Toggle word wrap

    The osbuild-composercockpit 服务在第一次访问时自动启动。

  4. 加载 shell 配置脚本,以便 composer-cli 命令的自动完成功能立即开始工作,而无需退出,然后再次登录:

    $ source /etc/bash_completion.d/composer-cli
    Copy to Clipboard Toggle word wrap
重要

The osbuild-composer 软件包是新的后端引擎,它将是 Red Hat Enterprise Linux 8.3 及更新的版本开始的所有新功能的首选引擎。之前的 backend lorax-composer 软件包被视为已弃用,将只接受 Red Hat Enterprise Linux 8 生命周期剩余部分的修复,并将在以后的主发行版本中被忽略。建议卸载 lorax-composer, 而是使用 osbuild-composer。

验证

  • 通过运行 composer-cli 来验证安装是否正常工作:

    # composer-cli status show
    Copy to Clipboard Toggle word wrap

故障排除

您可以使用系统日志来跟踪 RHEL 镜像构建器活动。此外,您还可以在文件中找到日志消息。

  • 要查找回溯的日志输出,请运行以下命令:

    $ journalctl | grep osbuild
    Copy to Clipboard Toggle word wrap
  • 要显示本地 worker,如 osbuild-worker@.service,它是一个可启动多个服务实例的模板服务:

    $ journalctl -u osbuild-worker*
    Copy to Clipboard Toggle word wrap
  • 显示运行的服务:

    $ journalctl -u osbuild-composer.service
    Copy to Clipboard Toggle word wrap

9.2.3. 回到 lorax-composer RHEL 镜像构建器后端

The osbuild-composer 后端虽然具有更大的可扩展性,但目前还无法实现与之前的 lorax-composer 后端的功能奇偶校验。

要恢复到以前的后端,请按照以下步骤执行:

先决条件

  • 已安装了 the osbuild-composer 软件包

流程

  1. 删除 osbuild-composer 后端。

    # yum remove osbuild-composer
    # yum remove weldr-client
    Copy to Clipboard Toggle word wrap
  2. /etc/yum.conf 文件中,添加排除条目 for osbuild-composer 软件包。

    # cat /etc/yum.conf
    [main]
    gpgcheck=1
    installonly_limit=3
    clean_requirements_on_remove=True
    best=True
    skip_if_unavailable=False
    exclude=osbuild-composer weldr-client
    Copy to Clipboard Toggle word wrap
  3. 安装 lorax-composer 软件包。

    # yum install lorax-composer composer-cli
    Copy to Clipboard Toggle word wrap
  4. 启用并启动 lorax-composer 服务,在每次重启后启动。

    # systemctl enable --now lorax-composer.socket
    # systemctl start lorax-composer
    Copy to Clipboard Toggle word wrap

9.3. 使用 RHEL 镜像构建器 CLI 创建系统镜像

RHEL 镜像构建器是一个创建自定义系统镜像的工具。要控制 RHEL 镜像构建器并创建自定义系统镜像,您可以使用命令行(CLI)或 Web 控制台界面。

9.3.1. RHEL 镜像构建器命令行界面简介

您可以使用 RHEL 镜像构建器命令行界面(CLI)创建蓝图,方法是运行带有合适的选项和子命令的 composer-cli 命令。

命令行的工作流总结如下:

  1. 创建蓝图或将现有蓝图定义导出(保存)到纯文本文件中
  2. 在文本编辑器中编辑这个文件
  3. 将蓝图文本文件重新导回到镜像构建器中
  4. 运行 compose 从蓝图构建镜像
  5. 导出镜像文件以下载它

除了创建蓝图的基本子命令外,composer-cli 命令还提供了许多子命令来检查配置的蓝图和组成的状态。

9.3.2. 以非 root 用户身份使用 RHEL 镜像构建器

要以非 root 身份运行 composer-cli 命令,该用户必须在 weldr 组中。

先决条件

  • 您已创建了一个用户

流程

  • 要在 weldrroot 组中添加用户,请运行以下命令:

    $ sudo usermod -a -G weldr user
    $ newgrp weldr
    Copy to Clipboard Toggle word wrap

9.3.3. 使用命令行创建蓝图

您可以使用 RHEL 镜像构建器命令行界面(CLI)创建新蓝图。蓝图描述了最终的镜像及其自定义,如软件包和内核自定义。

先决条件

  • 您以 root 用户身份登录,或者作为 weldr 组的成员的用户身份登录

流程

  1. 创建一个包含以下内容的纯文本文件:

    name = "BLUEPRINT-NAME"
    description = "LONG FORM DESCRIPTION TEXT"
    version = "0.0.1"
    modules = []
    groups = []
    Copy to Clipboard Toggle word wrap

    用您的蓝图的名称和描述替换 BLUEPRINT-NAMELONG FORM DESCRIPTION TEXT

    根据 Semantic Versioning 方案,将 0.0.1 替换为版本号。

  2. 对于您要包含在蓝图中的每个软件包,请在文件中添加以下行:

    [[packages]]
    name = "package-name"
    version = "package-version"
    Copy to Clipboard Toggle word wrap

    使用软件包名称替换 package-name,如 httpdgdb-doccoreutils

    可选,将 package-version 替换为要使用的版本。此字段支持 dnf 版本规格:

    • 对于特定版本,请使用确切的版本号,如 8.7.0
    • 对于最新可用版本,请使用星号 *
    • 对于最新的次版本,请使用以下格式,如 8.*。
  3. 自定义蓝图以满足您的需要。例如,禁用 Simultaneous Multi Threading (SMT),在蓝图文件中添加以下行:

    [customizations.kernel]
    append = "nosmt=force"
    Copy to Clipboard Toggle word wrap

    有关其他可用的定制信息,请参阅 支持的镜像自定义

    请注意,[][[]] 是以 TOML 表达的不同数据结构。

    • [customizations.kernel] 标头代表由一组键及其对应值对定义的单个表,例如: append = "nosmt=force "。
    • [[packages]] 标头代表表数组。第一个实例定义数组及其第一个表元素,例如 name = "package-name"version = "package-version",每个后续实例都会按照您定义它们的顺序创建并定义一个新的 table 元素。
  4. 将文件保存为 例如 BLUEPRINT-NAME.toml,并关闭文本编辑器。
  5. 可选:检查 Blueprint TOML 文件中的所有设置是否已正确解析。保存蓝图并将保存的输出与输入文件进行比较:

    # composer-cli blueprints save BLUEPRINT-NAME.toml
    Copy to Clipboard Toggle word wrap
    1. BLUEPRINT-NAME.toml 保存的文件与输入文件进行比较。
  6. 推送蓝图:

    # composer-cli blueprints push BLUEPRINT-NAME.toml
    Copy to Clipboard Toggle word wrap

    BLUEPRINT-NAME 替换为您在前面步骤中使用的值。

    注意

    以非 root 身份运行 composer-cli 命令创建镜像,请将您的用户添加到 weldrroot 组中。

    # usermod -a -G weldr user
    $ newgrp weldr
    Copy to Clipboard Toggle word wrap

验证

  • 列出现有的蓝图以验证蓝图是否已推送并已存在:

    # composer-cli blueprints list
    Copy to Clipboard Toggle word wrap
  • 显示您刚刚添加的蓝图配置:

    # composer-cli blueprints show BLUEPRINT-NAME
    Copy to Clipboard Toggle word wrap
  • 检查蓝图中列出的组件和版本是否有效:

    # composer-cli blueprints depsolve BLUEPRINT-NAME
    Copy to Clipboard Toggle word wrap

    如果 RHEL 镜像构建器无法解决自定义存储库中软件包的依赖项,请清除 osbuild-composer 缓存:

    $ sudo rm -rf /var/cache/osbuild-composer/*
    $ sudo systemctl restart osbuild-composer
    Copy to Clipboard Toggle word wrap

9.3.4. 使用命令行编辑蓝图

您可以在命令行中编辑现有蓝图,例如添加新软件包或定义新组,并创建自定义镜像。

先决条件

  • 您已创建了一个蓝图

流程

  1. 列出现有的蓝图:

    # composer-cli blueprints list
    Copy to Clipboard Toggle word wrap
  2. 将蓝图保存到一个本地文本文件中:

    # composer-cli blueprints save BLUEPRINT-NAME
    Copy to Clipboard Toggle word wrap
  3. 使用文本编辑器编辑 BLUEPRINT-NAME.toml 文件并进行更改。
  4. 在完成编辑前,请验证该文件是否是一个有效的蓝图:

    1. 如果存在,从蓝图中删除以下行:

      packages = []
      Copy to Clipboard Toggle word wrap
    2. 增加版本号,例如,从 0.0.1 增加到 0.1.0。请记住,RHEL 镜像构建器蓝图版本必须使用 Semantic Versioning 方案。请注意,如果您没有更改版本,补丁版本组件会自动增加。
  5. 保存文件并关闭文本编辑器。
  6. 将蓝图推送回 RHEL 镜像构建器:

    # composer-cli blueprints push BLUEPRINT-NAME.toml
    Copy to Clipboard Toggle word wrap
    注意

    要将蓝图导回到 RHEL 镜像构建器,请提供包括 .toml 扩展名的文件名,而在其他命令中则只使用蓝图名称。

验证

  1. 要验证上传到 RHEL 镜像构建器的内容是否与您编辑的内容匹配,请列出蓝图的内容:

    # composer-cli blueprints show BLUEPRINT-NAME
    Copy to Clipboard Toggle word wrap
  2. 检查蓝图中列出的组件和版本是否有效:

    # composer-cli blueprints depsolve BLUEPRINT-NAME
    Copy to Clipboard Toggle word wrap

您可以使用 RHEL 镜像构建器命令行界面构建一个自定义 RHEL 镜像。为此,您必须指定蓝图和镜像类型。可选,您还可以指定一个发行版。如果没有指定发行版,它将使用与主机系统一样的发行版和版本。架构也与主机上的架构一样。

先决条件

流程

  1. 可选:列出您可以创建的镜像格式:

    # composer-cli compose types
    Copy to Clipboard Toggle word wrap
  2. 启动 compose:

    # composer-cli compose start BLUEPRINT-NAME IMAGE-TYPE
    Copy to Clipboard Toggle word wrap

    BLUEPRINT-NAME 替换为蓝图的名称,将 IMAGE-TYPE 替换为镜像的类型。有关可用值,请查看 composer-cli compose types 命令的输出。

    compose 进程在后台启动,并显示 composer Universally Unique Identifier (UUID)。

  3. 镜像创建最多可能需要十分钟才能完成。

    检查 Compose 的状态:

    # composer-cli compose status
    Copy to Clipboard Toggle word wrap

    完成的 compose 显示 FINISHED 状态值。要识别列表中您的 compose,请使用其 UUID。

  4. 完成 compose 过程后,下载生成的镜像文件:

    # composer-cli compose image UUID
    Copy to Clipboard Toggle word wrap

    使用前面步骤中显示的 UUID 值替换 UUID。

验证

创建镜像后,您可以使用以下命令检查镜像创建进度:

  • 下载镜像的元数据以获取 compose 的元数据的 .tar 文件:

    $ sudo composer-cli compose metadata UUID
    Copy to Clipboard Toggle word wrap
  • 下载镜像的日志:

    $ sudo composer-cli compose logs UUID
    Copy to Clipboard Toggle word wrap

    该命令会创建一个 .tar 文件,其中包含创建镜像的日志。如果日志为空,您可以检查日志。

  • 检查日志:

    $ journalctl | grep osbuild
    Copy to Clipboard Toggle word wrap
  • 检查镜像的清单:

    $ sudo cat /var/lib/osbuild-composer/jobs/job_UUID.json
    Copy to Clipboard Toggle word wrap

    您可以在日志中找到 job_UUID.json。

9.3.6. 基本 RHEL 镜像构建器命令行命令

RHEL 镜像构建器命令行界面提供以下子命令。

蓝图操作

列出所有可用的蓝图
# composer-cli blueprints list
Copy to Clipboard Toggle word wrap
显示 TOML 格式的蓝图内容
# composer-cli blueprints show <BLUEPRINT-NAME>
Copy to Clipboard Toggle word wrap
将 TOML 格式的蓝图内容保存(导出)到文件 BLUEPRINT-NAME.toml
# composer-cli blueprints save <BLUEPRINT-NAME>
Copy to Clipboard Toggle word wrap
删除蓝图
# composer-cli blueprints delete <BLUEPRINT-NAME>
Copy to Clipboard Toggle word wrap
将 TOML 格式的蓝图文件推送(导入)到 RHEL 镜像构建器
# composer-cli blueprints push <BLUEPRINT-NAME>
Copy to Clipboard Toggle word wrap

从蓝图制作镜像

列出可用的镜像类型
# composer-cli compose types
Copy to Clipboard Toggle word wrap
启动一个目录
# composer-cli compose start <BLUEPRINT> <COMPOSE-TYPE>
Copy to Clipboard Toggle word wrap
列出所有 compose
# composer-cli compose list
Copy to Clipboard Toggle word wrap
列出所有 compose 及其状态
# composer-cli compose status
Copy to Clipboard Toggle word wrap
取消正在运行的 compose
# composer-cli compose cancel <COMPOSE-UUID>
Copy to Clipboard Toggle word wrap
删除完成的 compose
# composer-cli compose delete <COMPOSE-UUID>
Copy to Clipboard Toggle word wrap
显示有关 compose 的详细信息
# composer-cli compose info <COMPOSE-UUID>
Copy to Clipboard Toggle word wrap
下载 compose 的镜像文件
# composer-cli compose image <COMPOSE-UUID>
Copy to Clipboard Toggle word wrap
更多子命令和选项
# composer-cli help
Copy to Clipboard Toggle word wrap

9.3.7. RHEL 镜像构建器蓝图格式

RHEL 镜像构建器蓝图以 TOML 格式的纯文本向用户显示。

典型的蓝图文件元素包括:

蓝图元数据
name = "<BLUEPRINT-NAME>"
description = "<LONG FORM DESCRIPTION TEXT>"
version = "<VERSION>"
Copy to Clipboard Toggle word wrap

BLUEPRINT-NAMELONG FORM DESCRIPTION TEXT 字段是您的蓝图的名称和描述。

VERSION 是根据 Semantic Versioning 方案的版本号,只对整个蓝图文件显示一次。

镜像中包含的组
[[groups]]
name = "group-name"
Copy to Clipboard Toggle word wrap

group 条目描述要安装到镜像中的一组软件包。组使用以下软件包类别:

  • Mandatory(必需)
  • Default(默认)
  • Optional(可选)

    group-name 是组的名称,例如 anaconda-tools, widget, wheelusers。蓝图安装必需的和默认的软件包。没有选择可选软件包的机制。

镜像中包含的软件包
[[packages]]
name = "<package-name>"
version = "<package-version>"
Copy to Clipboard Toggle word wrap

package-name 是软件包的名称,如 httpdgdb-doccoreutils

package-version 是要使用的版本。此字段支持 dnf 版本规格:

  • 对于特定版本,请使用确切的版本号,如 8.7.0
  • 对于最新的可用版本,请使用 星号 *
  • 对于最新的次版本,请使用以下格式,如 8.*。

    为每个要包括的软件包重复这个块。

注意

RHEL 镜像构建器工具中的软件包和模块之间没有区别。两者都被视为 RPM 软件包依赖项。

9.3.8. 支持的镜像自定义

您可以通过向蓝图中添加自定义来自定义镜像,例如:

  • 添加一个额外的 RPM 软件包
  • 启用一个服务
  • 自定义一个内核命令行参数.

在其他参数之间。您可以在蓝图中使用多个镜像自定义。通过使用自定义,您可以将软件包和组添加到在默认软件包中不可用的镜像中。要使用这些选项,请在蓝图中配置自定义,并将其导入(推送)到 RHEL 镜像构建器。

9.3.8.1. 选择一个发行版

您可以使用 distro 字段指定在制作镜像或在蓝图中解决依赖项时要使用的发行版。如果 distro 字段留空,蓝图会自动使用主机的操作系统分布。如果没有指定发行版,蓝图将使用主机分发。当您升级主机操作系统时,蓝图使用升级的操作系统版本,而无需指定发行版构建镜像。

您可以在较新的系统上为旧的主版本构建镜像。例如,您可以使用 RHEL 10 主机创建 RHEL 9 和 RHEL 8 镜像。但是,您无法在较旧的系统上为较新的主版本构建镜像。

重要

您无法构建一个与 RHEL 镜像构建器主机不同的操作系统镜像。例如,您无法使用 RHEL 系统构建 Fedora 或 CentOS 镜像。

  • 使用 RHEL 发行版自定义蓝图,以始终构建指定的 RHEL 镜像:

    name = "blueprint_name"
    description = "blueprint_version"
    version = "0.1"
    distro = "different_minor_version"
    Copy to Clipboard Toggle word wrap

    例如:

    name = "tmux"
    description = "tmux image with openssh"
    version = "1.2.16"
    distro = "rhel-9.5"
    Copy to Clipboard Toggle word wrap

将 "different_minor_version" 替换为构建不同的次版本,例如,如果要构建 RHEL 8.10 镜像,请使用 distro = "rhel-810"。在 RHEL 8.10 镜像中,您可以构建次版本,如 RHEL 8.9 及更早的版本。

9.3.8.2. 选择一个软件包组

使用软件包组自定义蓝图。groups 列表描述了您要安装到镜像中的软件包组。软件包组在存储库元数据中定义。每个组都有一个描述性名称,主要用于在用户界面中显示,以及一个 ID,通常在 Kickstart 文件中使用。在这种情况下,您必须使用 ID 来列出组。组有三种不同的方法来对软件包进行分类:mandatory、default 和 optional。蓝图中只安装了 mandatory 和 default 软件包。无法选择 optional 软件包。

name 属性是必需的字符串,必须与存储库中的软件包组 id 完全匹配。

注意

目前,osbuild-composer 中的软件包和模块之间没有区别。两者都被视为 RPM 软件包依赖项。

  • 自定义带有软件包的蓝图:

    [[groups]]
    name = "group_name"
    Copy to Clipboard Toggle word wrap

    使用组名称替换 group_name。例如:anaconda-tools

    [[groups]]
    name = "anaconda-tools"
    Copy to Clipboard Toggle word wrap
9.3.8.3. 嵌入容器中

您可以自定义蓝图来嵌入最新的 RHEL 容器中。容器列表包含具有源的对象,以及可选的 tls-verify 属性。

容器列表条目描述了要嵌入到镜像中的容器镜像。

  • source - 必需的字段。它是对 registry 中的容器镜像的引用。这个示例使用 registry.access.redhat.com 注册中心。您可以指定标签版本。默认标签版本为 latest。
  • name - 本地注册中心中容器的名称。
  • tls-verify - 布尔值字段。tls-verify 布尔值字段控制传输层安全性。默认值为 true。

嵌入的容器不会自动启动。要启动它,请使用文件自定义创建 systemd 单元文件或 四元组

  • 要从 registry.access.redhat.com/ubi9/ubi:latest 和来自主机的容器嵌入容器,请在蓝图中添加以下自定义:

    [[containers]]
    source = "registry.access.redhat.com/ubi9/ubi:latest"
    name =  "local-name"
    tls-verify = true
    
    [[containers]]
    source = "localhost/test:latest"
    local-storage = true
    Copy to Clipboard Toggle word wrap

您可以使用 containers-auth.json 文件访问受保护的容器资源。请参阅 容器注册中心凭证

9.3.8.4. 设置镜像主机名

customizations.hostname 是一个可选字符串,您可以用来配置最终镜像主机名。此自定义是可选的,如果您未设置它,则蓝图使用默认主机名。

  • 自定义蓝图以配置主机名:

    [customizations]
    hostname = "baseimage"
    Copy to Clipboard Toggle word wrap
9.3.8.5. 指定其他用户

将用户添加到镜像中,并可选择设置其 SSH 密钥。本节的所有字段都是可选的,但 name 除外。

流程

  • 自定义蓝图来将用户添加到镜像中:

    [[customizations.user]]
    name = "USER-NAME"
    description = "USER-DESCRIPTION"
    password = "PASSWORD-HASH"
    key = "PUBLIC-SSH-KEY"
    home = "/home/USER-NAME/"
    shell = "/usr/bin/bash"
    groups = ["users", "wheel"]
    uid = NUMBER
    gid = NUMBER
    Copy to Clipboard Toggle word wrap
    [[customizations.user]]
    name = "admin"
    description = "Administrator account"
    password = "$6$CHO2$3rN8eviE2t50lmVyBYihTgVRHcaecmeCk31L..."
    key = "PUBLIC SSH KEY"
    home = "/srv/widget/"
    shell = "/usr/bin/bash"
    groups = ["widget", "users", "wheel"]
    uid = 1200
    gid = 1200
    expiredate = 12345
    Copy to Clipboard Toggle word wrap

    GID 是可选的,且必须在镜像中已存在。(可选)软件包会创建它,或者蓝图使用 [[customizations.group] 条目创建 GID。

    PASSWORD-HASH 替换为实际的 密码哈希。要生成 密码哈希,请使用如下命令:

    $ python3 -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'
    Copy to Clipboard Toggle word wrap

    使用适当的值替换其他占位符。

    输入 name 值,并省略您不需要的任何行。

    为每个要包含的用户重复这个块。

9.3.8.6. 指定附加组

为生成的系统镜像指定一个组。namegid 属性都是必需的。

  • 自定义带有组的蓝图:

    [[customizations.group]]
    name = "GROUP-NAME"
    gid = NUMBER
    Copy to Clipboard Toggle word wrap

    为每个组重复此块。例如:

    [[customizations.group]]
    name = "widget"
    gid = 1130
    Copy to Clipboard Toggle word wrap
9.3.8.7. 为现有用户设置 SSH 密钥

您可以使用 customizations.sshkey 为最终镜像中的现有用户设置 SSH 密钥。userkey 属性是必需的。

  • 通过为现有用户设置 SSH 密钥来自定义蓝图:

    [[customizations.sshkey]]
    user = "root"
    key = "PUBLIC-SSH-KEY"
    Copy to Clipboard Toggle word wrap

    例如:

    [[customizations.sshkey]]
    user = "root"
    key = "SSH key for root"
    Copy to Clipboard Toggle word wrap
    注意

    您只能为现有用户配置 customizations.sshkey 自定义。要创建用户并设置 SSH 密钥,请参阅 指定其他用户 自定义。

9.3.8.8. 附加一个内核参数

您可以向引导装载程序内核命令行中附加参数。默认情况下,RHEL 镜像构建器将默认内核构建到镜像中。但是,您可以通过在蓝图中配置它来自定义内核。

  • 在默认值中附加内核引导选项:

    [customizations.kernel]
    append = "KERNEL-OPTION"
    Copy to Clipboard Toggle word wrap

    例如:

    [customizations.kernel]
    name = "kernel-debug"
    append = "nosmt=force"
    Copy to Clipboard Toggle word wrap
9.3.8.9. 使用实时内核构建 RHEL 镜像

要使用实时内核(kernel-rt)构建 RHEL 镜像,您需要覆盖存储库,以便您可以构建镜像,其中 kernel-rt 被正确地选为默认内核。使用 /usr/share/osbuild-composer/repositories/ 目录中的 .json。然后,您可以部署您构建到系统的镜像,并使用实时内核功能。

注意

实时内核在经过认证可运行 Red Hat Enterprise Linux 的 AMD64 和 Intel 64 服务器平台上运行。

先决条件

流程

  1. 创建以下目录:

    # mkdir /etc/osbuild-composer/repositories/
    Copy to Clipboard Toggle word wrap
  2. /usr/share/osbuild-composer/repositories/rhel-8.版本.json 文件中的内容复制到新目录中:

    # cp /usr/share/osbuild-composer/repositories/rhel-8.version.json /etc/osbuild-composer/repositories
    Copy to Clipboard Toggle word wrap
  3. 编辑 /etc/osbuild-composer/repositories/rhel-8.版本.json 文件,使其包含 RT 内核存储库:

    # grep -C 6 kernel-rt /etc/osbuild-composer/repositories/rhel-8.version.json
          "baseurl": "https://cdn.redhat.com/content/dist/rhel8/8.version/x86_64/appstream/os",
          "gpgkey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nm………..=\n=UZd/\n-----END PGP PUBLIC KEY BLOCK-----\n",
          "rhsm": true,
          "check_gpg": true
        },
        {
          "name": "kernel-rt",
          "baseurl": "https://cdn.redhat.com/content/dist/rhel8/8.version/x86_64/rt/os",
          "gpgkey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQINBEr………fg==\n=UZd/\n-----END PGP PUBLIC KEY BLOCK-----\n",
          "rhsm": true,
          "check_gpg": true
        },
    Copy to Clipboard Toggle word wrap
  4. 重启服务:

    # systemctl restart osbuild-composer
    Copy to Clipboard Toggle word wrap
  5. 确认 kernel-rt 已包含在 .json 文件中:

    # composer-cli sources list
    # composer-cli sources info kernel-rt
    Copy to Clipboard Toggle word wrap

    您将看到之前配置的 URL。

  6. 创建一个蓝图。在蓝图中,添加 "[customizations.kernel]" 自定义。以下是在蓝图中包含 "[customizations.kernel]" 的示例:

    name = "rt-kernel-image"
    description = ""
    version = "2.0.0"
    modules = []
    groups = []
    distro = "rhel-8_version_"
    [[customizations.user]]
    name = "admin"
    password = "admin"
    groups = ["users", "wheel"]
    [customizations.kernel]
    name = "kernel-rt"
    append = ""
    Copy to Clipboard Toggle word wrap
  7. 将蓝图推送到服务器:

    # composer-cli blueprints push rt-kernel-image.toml
    Copy to Clipboard Toggle word wrap
  8. 从您创建的蓝图构建镜像。以下示例构建一个(.qcow2)镜像:

    # composer-cli compose start rt-kernel-image qcow2
    Copy to Clipboard Toggle word wrap
  9. 将您构建的镜像部署到您要使用实时内核功能的系统。

验证

  • 从镜像引导虚拟机后,验证镜像是否是使用正确选择的 kernel-rt 作为默认内核而构建的。

    $ cat /proc/cmdline
    BOOT_IMAGE=(hd0,got3)/vmlinuz-5.14.0-362.24.1..el8_version_.x86_64+rt...
    Copy to Clipboard Toggle word wrap
9.3.8.10. 设置时区和 NTP

您可以自定义蓝图来配置时区和 网络时间协议 (NTP)。timezonentpservers 属性是可选字符串。如果您没有自定义时区,系统将使用 Universal Time, Coordinated (UTC)。如果您没有设置 NTP 服务器,系统将使用默认发行版。

  • 自定义带有您想要的 timezonentpservers 的蓝图:

    [customizations.timezone]
    timezone = "TIMEZONE"
    ntpservers = "NTP_SERVER"
    Copy to Clipboard Toggle word wrap

    例如:

    [customizations.timezone]
    timezone = "US/Eastern"
    ntpservers = ["0.north-america.pool.ntp.org", "1.north-america.pool.ntp.org"]
    Copy to Clipboard Toggle word wrap
    注意

    有些镜像类型,如 Google Cloud,已经建立了 NTP 服务器。您无法覆盖它,因为镜像需要 NTP 服务器来在所选环境中引导。但是,您可以在蓝图中自定义时区。

9.3.8.11. 自定义区域设置

您可以为生成的系统镜像自定义区域设置。languagekeyboard 属性是必需的。您可以添加许多其他语言。您添加的第一个语言是主语言,其他语言是次要语言。

流程

  • 设置区域设置:

    [customizations.locale]
    languages = ["LANGUAGE"]
    keyboard = "KEYBOARD"
    Copy to Clipboard Toggle word wrap

    例如:

    [customizations.locale]
    languages = ["en_US.UTF-8"]
    keyboard = "us"
    Copy to Clipboard Toggle word wrap
  • 要列出语言支持的值,请运行以下命令:

    $ localectl list-locales
    Copy to Clipboard Toggle word wrap
  • 要列出键盘支持的值,请运行以下命令:

    $ localectl list-keymaps
    Copy to Clipboard Toggle word wrap
9.3.8.12. 自定义防火墙

为生成的系统镜像设置防火墙。默认情况下,防火墙阻止进入的连接,但明确启用其端口的服务除外,如 sshd

如果您不想使用 [customizations.firewall][customizations.firewall.services],可以删除属性,或者将它们设置为空列表 []。如果您只想使用默认的防火墙设置,您可以从蓝图中省略自定义。

注意

Google 和 OpenStack 模板为其环境明确禁用防火墙。您无法通过设置蓝图来覆盖此行为。

流程

  • 使用以下设置自定义蓝图,以打开其他端口和服务:

    [customizations.firewall]
    ports = ["PORTS"]
    Copy to Clipboard Toggle word wrap

    其中 ports 是包含要打开的端口或一系列端口和协议的可选字符串列表。您可以使用以下格式配置端口:port:protocol 格式。您可以使用 portA-portB:protocol 格式配置端口范围。例如:

    [customizations.firewall]
    ports = ["22:tcp", "80:tcp", "imap:tcp", "53:tcp", "53:udp", "30000-32767:tcp", "30000-32767:udp"]
    Copy to Clipboard Toggle word wrap

    您可以使用数字端口或 /etc/services 中的名称来启用或禁用端口列表。

  • customizations.firewall.service 部分中指定要启用或禁用哪个防火墙服务:

    [customizations.firewall.services]
    enabled = ["SERVICES"]
    disabled = ["SERVICES"]
    Copy to Clipboard Toggle word wrap
  • 您可以检查可用的防火墙服务:

    $ firewall-cmd --get-services
    Copy to Clipboard Toggle word wrap

    例如:

    [customizations.firewall.services]
    enabled = ["ftp", "ntp", "dhcp"]
    disabled = ["telnet"]
    Copy to Clipboard Toggle word wrap
    注意

    firewall.services 中列出的服务与 /etc/services 文件中提供的 service-names 不同。

9.3.8.13. 启用或禁用服务

您可以控制在引导期间要启用哪些服务。有些镜像类型已经启用或禁用了服务,以确保镜像正常工作,您无法覆盖此设置。蓝图中的 [customizations.services] 设置不会替代这些服务,但可以将服务添加到已在镜像模板中存在的服务列表中。

  • 自定义在引导时要启用哪些服务:

    [customizations.services]
    enabled = ["SERVICES"]
    disabled = ["SERVICES"]
    Copy to Clipboard Toggle word wrap

    例如:

    [customizations.services]
    enabled = ["sshd", "cockpit.socket", "httpd"]
    disabled = ["postfix", "telnetd"]
    Copy to Clipboard Toggle word wrap
9.3.8.14. 在 ISO 镜像中注入 Kickstart 文件

您可以使用 [customization.installer] 蓝图自定义在构建中为 ISO 安装程序(如镜像安装程序或 边缘 安装程序)添加自己的 Kickstart 文件,并在为裸机部署构建 ISO 镜像时获得更大的灵活性。

警告

在带有现有操作系统或数据的机器上引导 ISO 可能具有破坏性,因为 Kickstart 被配置为自动重新格式化系统上的第一个磁盘。

您可以选择以下选项来添加自己的 Kickstart 文件:

  • 在安装过程中设置所有值。
  • 在 Kickstart 中启用 unattended = true 字段,并使用默认值获得完全无人值守的安装。
  • 使用 Kickstart 字段注入您自己的 Kickstart。如果您指定了所有必填字段,或者安装程序询问一些可能缺少的字段,则可能会导致完全无人值守安装。

Anaconda 安装程序 ISO 镜像类型支持以下蓝图自定义:

[customizations.installer]
unattended = true
sudo-nopasswd = ["user", "%wheel"]
Copy to Clipboard Toggle word wrap

无人值守 :创建可完全自动安装的 Kickstart 文件。这包括默认设置以下选项:

  • 文本显示模式
  • en_US.UTF-8 语言/locale
  • us 键盘布局
  • UTC 时区
  • zerombr、clearpart 和 autopart 用于自动擦除和分区第一个磁盘
  • 启用 dhcp 和自动激活的网络选项

以下是一个示例:

liveimg --url file:///run/install/<_repo_>/liveimg.tar.gz
lang en_US.UTF-8
keyboard us
timezone UTC
zerombr
clearpart --all --initlabel
text
autopart --type=plain --fstype=xfs --nohome
reboot --eject
network --device=link --bootproto=dhcp --onboot=on --activate
Copy to Clipboard Toggle word wrap

sudo-nopasswd:在安装后在 Kickstart 文件中添加代码片段,该文件会在 /etc/sudoers.d 中创建置入文件,以允许指定的用户和组在没有密码的情况下运行 sudo。组必须加上前缀 %。例如,将值设为 ["user", "%wheel"] 会创建以下 Kickstart %post 部分:

%post
echo -e "user\tALL=(ALL)\tNOPASSWD: ALL" > "/etc/sudoers.d/user"
chmod 0440 /etc/sudoers.d/user
echo -e "%wheel\tALL=(ALL)\tNOPASSWD: ALL" > "/etc/sudoers.d/%wheel"
chmod 0440 /etc/sudoers.d/%wheel
restorecon -rvF /etc/sudoers.d
%end
Copy to Clipboard Toggle word wrap

安装程序 Kickstart

另外,您可以使用以下自定义包括自定义 Kickstart:

[customizations.installer.kickstart]
contents = """
text --non-interactive
zerombr
clearpart --all --initlabel --disklabel=gpt
autopart --noswap --type=lvm
network --bootproto=dhcp --device=link --activate --onboot=on
"""
Copy to Clipboard Toggle word wrap

osbuild-composer 会自动添加安装 system: liveimgostreesetup 的命令(如果与 image-installer,或 edge-installer 镜像类型相关)。您不能将 [customizations.installer.kickstart] 自定义与任何其他安装程序自定义结合使用。

9.3.8.15. 指定分区模式

使用 partitioning_mode 变量选择如何对您要构建的磁盘镜像进行分区。您可以使用以下支持的模式自定义镜像:

  • auto-lvm :它使用原始分区模式,除非有一个或多个文件系统自定义。在这种情况下,它使用 LVM 分区模式。
  • LVM :它总是使用 LVM 分区模式,即使没有额外的挂载点。
  • raw :它使用原始分区,即使有一个或多个挂载点。
  • 您可以使用以下自定义,使用 partitioning_mode 变量自定义蓝图:

    [customizations]
    partitioning_mode = "lvm"
    Copy to Clipboard Toggle word wrap
9.3.8.16. 指定自定义文件系统配置

您可以在蓝图中指定自定义文件系统配置,因此创建带有特定磁盘布局的镜像,而不是默认的布局配置。通过使用蓝图中的非默认布局配置,您可以:

  • 安全基准合规性
  • 防止磁盘不足错误
  • 提高的性能
  • 与现有设置的一致性
注意

OSTree 系统不支持文件系统自定义,因为 OSTree 镜像有自己的挂载规则,如只读。不支持以下镜像类型:

  • image-installer
  • edge-installer
  • edge-simplified-installer

另外,以下镜像类型不支持文件系统自定义,因为这些镜像类型不会创建分区的操作系统镜像:

  • edge-commit
  • edge-container
  • tar
  • container

但是,以下镜像类型支持文件系统自定义:

  • simplified-installer
  • edge-raw-image
  • edge-ami
  • edge-vsphere

对于 OSTree 系统的一些额外的例外,您可以在文件系统的 /root 级别中选择任意目录名称,例如: ' /local',' /mypartition', /$PARTITION。在逻辑卷中,这些更改在 LVM 分区系统之上进行。支持以下目录: /var、' /var/log' 和 /var/lib/containers。以下是根级别的例外:

  • "/home": {Deny: true},
  • "/mnt": {Deny: true},
  • "/opt": {Deny: true},
  • "/ostree": {Deny: true},
  • "/root": {Deny: true},
  • "/SRV": {Deny: true},
  • "/var/home": {Deny: true},
  • "/var/mnt": {Deny: true},
  • "/var/opt": {Deny: true},
  • "/var/roothome": {Deny: true},
  • "/var/srv": {Deny: true},
  • "/var/usrlocal": {Deny: true},

对于 RHEL 8.10 和 9.5 的发行版本发行版本,蓝图支持以下 挂载点 及其子目录:

  • / - root 挂载点
  • /var
  • /home
  • /opt
  • /srv
  • /usr
  • /app
  • /data
  • /tmp

在 RHEL 9.5 和 8.10 发行版本中,您可以指定任意自定义挂载点,除了为操作系统保留的特定路径。

您不能在以下挂载点及其子目录中指定任意自定义挂载点:

  • /bin
  • /boot/efi
  • /dev
  • /etc
  • /lib
  • /lib64
  • /lost+found
  • /proc
  • /run
  • /sbin
  • /sys
  • /sysroot
  • /var/lock
  • /var/run

您可以在蓝图中自定义 /usr 自定义挂载点的文件系统,但不允许其子目录。

注意

从 RHEL 8.5 发行版开始,才支持使用 CLI 自定义挂载点。在之前的发行版本中,您只能将 root 分区指定为挂载点,并将 size 参数指定为镜像大小的别名。从 RHEL 8.6 开始,对于 osbuild-composer-46.1-1.el8 RPM 及更新的版本,物理分区不再可用,文件系统自定义会创建逻辑卷。

如果您在自定义镜像中有多个分区,您可以在 LVM 上创建带有自定义文件系统分区的镜像,并在运行时调整这些分区大小。要做到这一点,您可以在蓝图中指定自定义文件系统配置,因此请使用所需的磁盘布局创建镜像。默认文件系统布局保持不变 - 如果您使用没有文件系统自定义的普通镜像,cloud-init 会调整 root 分区的大小。

蓝图自动将文件系统自定义转换为 LVM 分区。

您可以使用自定义文件蓝图自定义来创建新文件或替换现有文件。您指定的文件的父目录必须存在,否则镜像构建会失败。通过在 [[customizations.directories]] 自定义中指定它来确保父目录存在。

警告

如果您将文件自定义与其他蓝图自定义相结合,这可能会影响其他自定义的功能,或者可能会覆盖当前的文件自定义。

9.3.8.16.1. 在蓝图中指定自定义文件

使用 [[customizations.files]] 蓝图自定义,您可以:

  • 创建新文本文件。
  • 修改现有文件。警告:这可能会覆盖现有内容。
  • 为您要创建的文件设置用户和组所有权。
  • 以八进制格式设置模式权限。

您无法创建或替换以下文件:

  • /etc/fstab
  • /etc/shadow
  • /etc/passwd
  • /etc/group

您可以使用 [[customizations.files]][[customizations.directories]] 蓝图自定义在镜像中创建自定义文件和目录。您只能在 /etc 目录中使用这些自定义。

注意

这些蓝图自定义被所有镜像类型支持,但部署 OSTree 提交的镜像类型除外,如 edge-raw-imageedge-installeredge-simplified-installer

警告

如果您将 customizations.directories 与设置了 modeusergroup 的镜像中已存在的目录路径一起使用,则镜像构建无法防止更改现有目录的所有权或权限。

9.3.8.16.2. 在蓝图中指定自定义目录

使用 [[customizations.directory]] 蓝图自定义,您可以:

  • 创建新目录。
  • 为您要创建的目录设置用户和组所有权。
  • 以八进制格式设置目录模式权限。
  • 确保根据需要创建父目录。

使用 [[customizations.files]] 蓝图自定义,您可以:

  • 创建新文本文件。
  • 修改现有文件。警告:这可能会覆盖现有内容。
  • 为您要创建的文件设置用户和组所有权。
  • 以八进制格式设置模式权限。
注意

您无法创建或替换以下文件:

  • /etc/fstab
  • /etc/shadow
  • /etc/passwd
  • /etc/group

以下自定义可用:

  • 在蓝图中自定义文件系统配置:

    [[customizations.filesystem]]
    mountpoint = "MOUNTPOINT"
    minsize = MINIMUM-PARTITION-SIZE
    Copy to Clipboard Toggle word wrap

    MINIMUM-PARTITION-SIZE 值没有默认大小格式。蓝图自定义支持以下值和单位:kB 到 TB 以及 KiB 到 TiB。例如,您可以以字节为单位定义挂载点大小:

    [[customizations.filesystem]]
    mountpoint = "/var"
    minsize = 1073741824
    Copy to Clipboard Toggle word wrap
  • 使用单位定义挂载点大小。例如:

    [[customizations.filesystem]]
    mountpoint = "/opt"
    minsize = "20 GiB"
    Copy to Clipboard Toggle word wrap
    [[customizations.filesystem]]
    mountpoint = "/boot"
    minsize = "1 GiB"
    Copy to Clipboard Toggle word wrap
  • 通过设置 minsize 来定义最小分区。例如:

    [[customizations.filesystem]]
    mountpoint = "/var"
    minsize = 2147483648
    Copy to Clipboard Toggle word wrap
  • 使用 [[customizations.directories]],在 /etc 目录下为镜像创建自定义目录:

    [[customizations.directories]]
    path = "/etc/directory_name"
    mode = "octal_access_permission"
    user = "user_string_or_integer"
    group = "group_string_or_integer"
    ensure_parents = boolean
    Copy to Clipboard Toggle word wrap

    蓝图条目如下所述:

    • path - 必需 - 输入您要创建的目录的路径。它必须是 /etc 目录下的绝对路径。
    • mode - 可选 - 以八进制格式设置目录的访问权限。如果没有指定权限,则默认为 0755。前面的零是可选的。
    • user - 可选 - 将用户设置为目录的所有者。如果没有指定用户,则默认为 root。您可以将用户指定为字符串或整数。
    • group - 可选 - 将组设置为目录的所有者。如果没有指定组,则默认为 root。您可以将组指定为字符串或整数。
    • ensure_parents - 可选 - 指定是否要根据需要创建父目录。如果没有指定值,则默认为 false
  • 使用 [[customizations.directories]],在 /etc 目录下为镜像创建自定义文件:

    [[customizations.files]]
    path = "/etc/directory_name"
    mode = "octal_access_permission"
    user = "user_string_or_integer"
    group = "group_string_or_integer"
    data = "Hello world!"
    Copy to Clipboard Toggle word wrap

    蓝图条目如下所述:

    • path - 必需 - 输入您要创建的文件的路径。它必须是 /etc 目录下的绝对路径。
    • mode 可选 - 以八进制格式设置对文件的访问权限。如果没有指定权限,则默认为 0644。前面的零是可选的。
    • user - 可选 - 将用户设置为文件所有者。如果没有指定用户,则默认为 root。您可以将用户指定为字符串或整数。
    • group - 可选 - 将组设置为文件所有者。如果没有指定组,则默认为 root。您可以将组指定为字符串或整数。
    • data - 可选 - 指定纯文本文件的内容。如果没有指定内容,它会创建一个空文件。
9.3.8.17. 在蓝图中指定卷组和逻辑卷命名

您可以将 RHEL 镜像构建器用于以下操作:

  • 使用高级分区布局创建 RHEL 磁盘镜像。您可以使用自定义挂载点、基于 LVM 的分区和基于 LVM 的 SWAP 创建磁盘镜像。例如,使用 config.toml 文件更改 //boot 目录的大小。
  • 选择要使用的文件系统。您可以在 ext4xfs 之间进行选择。
  • 添加交换分区和 LV。磁盘镜像可以包含基于 LV 的 SWAP。
  • 更改 LVM 实体的名称。镜像中的逻辑卷(LV)和卷组(VG)可以具有自定义名称。

不支持以下选项:

  • 一个镜像中的多个 PV 或 VG。
  • SWAP 文件
  • 非物理分区的挂载选项,如 /dev/shm/tmp

例如:添加文件系统所在的 VG 和 LG 自定义名称。

[[customizations.disk.partitions]]
type = "plain"
label = "data"
mountpoint = "/data"
fs_type = "ext4"
minsize = "50 GiB"

[[customizations.disk.partitions]]
type = "lvm"
name = "mainvg"
minsize = "20 GiB"

[[customizations.disk.partitions.logical_volumes]]
name = "rootlv"
mountpoint = "/"
label = "root"
fs_type = "ext4"
minsize = "2 GiB"

[[customizations.disk.partitions.logical_volumes]]
name = "homelv"
mountpoint = "/home"
label = "home"
fs_type = "ext4"
minsize = "2 GiB"

[[customizations.disk.partitions.logical_volumes]]
name = "swaplv"
fs_type = "swap"
minsize = "1 GiB"
Copy to Clipboard Toggle word wrap

9.3.9. RHEL 镜像构建器安装的软件包

当使用 RHEL 镜像构建器创建系统镜像时,系统会安装一组基本软件包组。

注意

当您在蓝图中添加其他组件时,请确保添加的组件中的软件包不会与任何其他软件包组件冲突。否则,系统无法解决依赖项并创建自定义镜像失败。您可以通过运行以下命令检查软件包之间没有冲突:

# composer-cli blueprints depsolve BLUEPRINT-NAME
Copy to Clipboard Toggle word wrap

默认情况下,RHEL 镜像构建器使用 Core 组作为软件包的基本列表。

Expand
表 9.3. 支持创建镜像类型的默认软件包
镜像类型默认软件包

ami

checkpolicy, chrony, cloud-init, cloud-utils-growpart, @Core, dhcp-client, gdisk, insights-client, kernel, langpacks-en, net-tools, NetworkManager, redhat-release, redhat-release-eula, rng-tools, rsync, selinux-policy-targeted, tar, yum-utils

openstack

@core, langpacks-en

qcow2

@core, chrony, dnf, kernel, yum, nfs-utils, dnf-utils, cloud-init, python3-jsonschema, qemu-guest-agent, cloud-utils-growpart, dracut-norescue, tar, tcpdump, rsync, dnf-plugin-spacewalk, rhn-client-tools, rhnlib, rhnsd, rhn-setup, NetworkManager, dhcp-client, cockpit-ws, cockpit-system, subscription-manager-cockpit, redhat-release, redhat-release-eula, rng-tools, insights-client

tar

policycoreutils, selinux-policy-targeted

vhd

@core, langpacks-en

vmdk

@core, chrony, cloud-init, firewalld, langpacks-en, open-vm-tools, selinux-policy-targeted

edge-commit

redhat-release , glibc,glibc-minimal-langpack,nss-altfiles,dracut-config-generic,dracut-network,basesystem,bash,platform-python,shadow-utils,chrony,setup,shadow-utils,sudo,systemd,coreutils,util-linux,curl,vim- minimal , rpm, rpm- ostree, polkit, lvm 2, cryptsetup, pinentry, e2 fsprogs , dosfstools, keyutils ,gnupg 2, attr, xz, gzip, firewalld, iptables, NetworkManager, NetworkManager- wifi, NetworkManager-w wan , NetworkManager-wwan, wpa _supplicant, traceroute, hostname,iproute , iputils, openssh -clients ,procps-ng, rootfiles ,openssh-server , passwd ,policycoreutils,policycoreutils-python-utils,selinux-policy-targeted , setools -console, less, tar,rsync, usbguard , usbguard, bash-completion, tmux , tmux ,ima-evm-utils,audit,podman,containernetworking-plugins,container-selinux,skopeo , criu 4netns , fuse-overlayfs ,clevis,clevis-dracut,clevis-luks,greenboot,greenboot-default-health-checks,fdo-client,fdo-owner-cli,sos,

edge-container

dnf, dosfstools, e2fsprogs, glibc, lorax-templates-generic, lorax-templates-rhel, lvm2, policycoreutils, python36, python3-iniparse, qemu-img, selinux-policy-targeted, systemd, tar, xfsprogs, xz

edge-installer

aajohan-comfortaa-fonts, abattis-cantarell-fonts, alsa-firmware, alsa-tools-firmware, anaconda, anaconda-install-env-deps, anaconda-widgets, audit, bind-utils, bitmap-fangsongti-fonts, bzip2, cryptsetup, dbus-x11, dejavu-sans-fonts, dejavu-sans-mono-fonts, device-mapper-persistent-data, dnf, dump, ethtool, fcoe-utils, ftp, gdb-gdbserver, gdisk, gfs2-utils, glibc-all-langpacks, google-noto-sans-cjk-ttc-fonts, gsettings-desktop-schemas, hdparm, hexedit, initscripts, ipmitool, iwl3945-firmware, iwl4965-firmware, iwl6000g2a-firmware, iwl6000g2b-firmware, jomolhari-fonts, kacst-farsi-fonts, kacst-qurn-fonts, kbd, kbd-misc, kdump-anaconda-addon, khmeros-base-fonts, libblockdev-lvm-dbus, libertas-sd8686-firmware, libertas-sd8787-firmware, libertas-usb8388-firmware, libertas-usb8388-olpc-firmware, libibverbs, libreport-plugin-bugzilla, libreport-plugin-reportuploader, libreport-rhel-anaconda-bugzilla, librsvg2, linux-firmware, lklug-fonts, lldpad, lohit-assamese-fonts, lohit-bengali-fonts, lohit-devanagari-fonts, lohit-gujarati-fonts, lohit-gurmukhi-fonts, lohit-kannada-fonts, lohit-odia-fonts, lohit-tamil-fonts, lohit-telugu-fonts, lsof, madan-fonts, metacity, mtr, mt-st, net-tools, nmap-ncat, nm-connection-editor, nss-tools, openssh-server, oscap-anaconda-addon, pciutils, perl-interpreter, pigz, python3-pyatspi, rdma-core, redhat-release-eula, rpm-ostree, rsync, rsyslog, sg3_utils, sil-abyssinica-fonts, sil-padauk-fonts, sil-scheherazade-fonts, smartmontools, smc-meera-fonts, spice-vdagent, strace, system-storage-manager, thai-scalable-waree-fonts, tigervnc-server-minimal, tigervnc-server-module, udisks2, udisks2-iscsi, usbutils, vim-minimal, volume_key, wget, xfsdump, xorg-x11-drivers,xorg-x11-fonts-misc,xorg-x11-server-utils,xorg-x11-server-Xorg, xorg-x11-xauth

edge-simplified-installer

attr, basesystem, binutils, bsdtar, clevis-dracut, clevis-luks, cloud-utils-growpart, coreos-installer, coreos-installer-dracut, coreutils, device-mapper-multipath, dnsmasq, dosfstools, dracut-live, e2fsprogs, fcoe-utils, fdo-init, gzip, ima-evm-utils, iproute, iptables, iputils, iscsi-initiator-utils, keyutils, lldpad, lvm2, passwd, policycoreutils, policycoreutils-python-utils, procps-ng, rootfiles, setools-console, sudo, traceroute, util-linux

image-installer

aajohan-comfortaa-fonts,abattis-cantarell-fonts,alsa-firmware,alsa-tools-firmware,anaconda,anaconda-dracut,anaconda-install-env-deps,anaconda-widgets,audit,bind-utils,bitmap-fangsongti-fonts,bzip 2, cryptsetup, curl , curl, dbus-x 11, dejavu-sans- fonts, dejavu-sans-mono- fonts, device-mapper-persistent- data, dmidecode, dnf, dracut-config- generic, dracut- network ,efiboot mgr, ethtool , ethtool, fcoe -utils, ftp ,gdb-gdbserver , gdisk ,glibc-all-langpacks,gnome-kiosk,google-noto-sans-cjk-ttc-fonts,grub2-tools,grub2-tools-extra,grub2-tools-minimal , grubby ,gsettings-desktop-schemas ,hdparm,hexedit,hostname,initscripts,ipmitool , iwl 1000-firmware ,iwl100-firmware,iwl105-firmware,iwl135-firmware,iwl2000-firmware,iwl2030-firmware,iwl3160-firmware,iwl5000-firmware,iwl5150-firmware,iwl6000g2a-firmware,iwl6000g2b-firmware,iwl6050-firmware,iwl7260-firmware,jomolhari-fonts,kacst-farsi-fonts,kacst-qurn-fonts,kbd,kbd-misc,kdump-anaconda-addon ,kernel, khmer os-base -fonts , less ,libblockdev-lvm-dbus,libibverbs,libreport-plugin-bugzilla,libreport-plugin-reportuploader,librsvg2,linux-firmware,lklug-fonts ,lldpad, lo hit-assamese-fonts ,lohit-bengali-fonts,lohit-devanagari-fonts,lohit-gujarati-fonts,lohit-gurmukhi-fonts,lohit-kannada-fonts,lohit-odia-fonts,lohit-tamil-fonts,lohit-telugu-fonts,lsof , madan-fonts, mtr,mt -st , net -tools, nfs -utils, nmap-ncat,nm-connection -editor, nss -tools, openssh -clients, openssh-server,oscap -anaconda- addon, ostree,pciutils,perl -interpreter, pigz, plymouth,prefixdevname , python3-pyatspi , rdma- core, redhat- release-eula,rng-tools,rpcbind,rpm -ostree, rsync , rsyslog, selinux- policy-targeted , sg3_utils , sil-abyssinica- fonts, sil-padauk-fonts, sil- scheherazade-fonts , smartmontools, smc- meera- fonts, spice-vdagent,strace , systemd , tar , thai-scalable-waree -fonts, tigervnc- server-minimal, tigervnc-server- module, udisks2, udisks 2-iscsi, usbutils,vim -minimal, volume_key, wget , xfsdump,xfsprogs, xorg-x11-drivers,xorg-x11-fonts- misc , xorg-x11-server -utils, xorg-x11- server-Xorg, xorg-x11-xauth , xz ,

edge-raw-image

dnf, dosfstools, e2fsprogs, glibc, lorax-templates-generic, lorax-templates-rhel, lvm2, policycoreutils, python36, python3-iniparse, qemu-img, selinux-policy-targeted, systemd, tar, xfsprogs, xz

gce

@core, langpacks-en, acpid, dhcp-client, dnf-automatic, net-tools, python3, rng-tools, tar, vim

9.3.10. 在自定义镜像中启用服务

当使用镜像构建器配置自定义镜像时,镜像使用的默认服务由以下内容决定:

  • 使用 osbuild-composer 工具的 RHEL 发行版本
  • 镜像类型

例如,ami 镜像类型默认启用 sshdchronydcloud-init 服务。如果没有启用这些服务,则自定义镜像不会引导。

Expand
表 9.4. 启用服务来支持镜像类型创建
镜像类型默认启用的服务

ami

sshd, cloud-init, cloud-init-local, cloud-config, cloud-final

openstack

sshd, cloud-init, cloud-init-local, cloud-config, cloud-final

qcow2

cloud-init

rhel-edge-commit

默认没有启用任何额外服务

tar

默认没有启用任何额外服务

vhd

sshd, chronyd, waagent, cloud-init, cloud-init-local, cloud-config, cloud-final

vmdk

sshd、chronyd、vmtoolsd、cloud-init

备注:您可以自定义在系统引导期间要启用的服务。但是,自定义不会覆盖上述镜像类型默认启用的服务。

RHEL 镜像构建器是一个创建自定义系统镜像的工具。要控制 RHEL 镜像构建器并创建自定义系统镜像,您可以使用 Web 控制台界面。

使用 RHEL web 控制台的 cockpit-composer 插件,您可以使用图形界面管理镜像构建器蓝图和 compose。

先决条件

  • 您必须有对该系统的根权限。
  • 您已安装了 RHEL 镜像构建器。
  • 您已安装了 cockpit-composer 软件包。

流程

  1. 在主机上,在网页浏览器中打开 https://<_localhost_>:9090/
  2. 以 root 用户身份登录 Web 控制台。
  3. 要显示 RHEL 镜像构建器控制,请单击窗口左上角的 Image Builder 按钮。

    RHEL 镜像构建器仪表盘打开,列出现有的蓝图(若有的话)。

9.4.2. 在 web 控制台界面中创建蓝图

在构建自定义 RHEL 系统镜像前,创建蓝图是一个必要的步骤。可用的自定义都是可选的。您可以使用以下选项创建自定义蓝图:

注意

Red Hat Enterprise Linux 9.2 或更高版本,以及 Red Hat Enterprise Linux 8.8 或更高版本提供这些蓝图自定义。

先决条件

流程

  1. 点右上角的 Create Blueprint

    此时会打开一个对话框向导,其中包含蓝图名称和描述字段。

  2. Details 页面上:

    1. 输入蓝图的名称,以及可选的描述。
    2. 点击 Next
  3. 可选:在 Packages 页面中:

    1. Available packages 搜索中,输入软件包名称
    2. > 按钮将其移到 Chosen packages 字段中。
    3. 重复前面的步骤,以搜索并包含尽可能多的软件包。
    4. 点击 Next

      注意

      除非另有指定,否则这些自定义都是可选的。

  4. Kernel 页面上,输入内核名称和命令行参数。
  5. File system 页面中,您可以对镜像文件系统分区选择 Use automatic partitioningManually configure partitions 。要手动配置分区,请完成以下步骤:

    1. Manually configure partitions 按钮。

      此时会打开 Configure partitions 部分,显示基于红帽标准和安全指南的配置。

    2. 在下拉菜单中,提供配置分区的详情:

      1. 对于 Mount point 字段,选择以下挂载点类型选项之一:

        • / - root 挂载点
        • /app
        • /boot
        • /data
        • /home
        • /opt
        • /srv
        • /usr
        • /usr/local
        • /var

          您还可以向 挂载点 添加附加路径,如 /tmp。例如:/var 作为前缀,/tmp 作为额外路径会产生 /var/tmp

          注意

          根据您选择的挂载点类型,文件系统类型变为 xfs

      2. 对于文件系统的 Minimum size partition 字段,请输入所需的最小分区大小。在最小大小下拉菜单中,您可以使用通用的大小单位,如 GiBMiBKiB。默认单位为 GiB

        注意

        Minimum size 意味着 RHEL 镜像构建器仍然可以增加分区大小,以防它们太小而不能创建可正常工作的镜像。

    3. 要添加更多分区,请点击 Add partition 按钮。如果您看到以下出错信息:重复分区:每个挂载点处只能创建一个分区。,您可以

      1. Remove 按钮删除重复的分区。
      2. 为您要创建的分区选择一个新的挂载点。
    4. 完成分区配置后,点 Next
  6. Services 页面中,您可以启用或禁用服务:

    1. 输入您要启用或禁用的服务名称,用逗号、空格或按 Enter 键分开。点 Next
    2. 输入 Enabled 服务
    3. 输入 Disabled 服务
  7. Firewall 页面中,设置防火墙设置:

    1. 输入 Ports,以及您要启用或禁用的防火墙服务。
    2. Add zone 按钮,为每个区域单独管理您的防火墙规则。点 Next
  8. Users 页面中,按照以下步骤添加用户:

    1. 单击 Add user
    2. 输入用户名 、密码 和 SSH 密钥。您还可以单击 Server administrator 复选框,将用户标记为特权用户。点击 Next
  9. Groups 页面中,完成以下步骤来添加组:

    1. Add groups 按钮:

      1. 输入 组名称组 ID。您可以添加更多的组。点击 Next
  10. SSH keys 页面中,添加一个密钥:

    1. Add key 按钮。

      1. 输入 SSH 密钥。
      2. 输入 用户。点 Next
  11. Timezone 页面上,设置您的时区设置:

    1. Timezone 字段中,输入您要添加到系统镜像的时区。例如,添加以下时区格式:"US/Eastern"。

      如果您没有设置时区,系统将使用 Universal Time, Coordinated (UTC)作为默认值。

    2. 输入 NTP 服务器。点 Next
  12. Locale 页面中完成以下步骤:

    1. Keyboard 搜索字段中,输入您要添加到系统镜像的软件包名称。例如:["en_US.UTF-8"]。
    2. Languages 搜索字段中,输入您要添加到系统镜像的软件包名称。例如:"us"。点 Next
  13. Others 页面中,完成以下步骤:

    1. Hostname 字段中输入您要添加到系统镜像的主机名。如果没有添加主机名,操作系统会决定主机名。
    2. 只对 Simplifier Installer 镜像强制:在 Installation Devices 字段中输入您的系统镜像的有效节点。例如:dev/sda1。点击 Next
  14. 仅在为 FDO 构建镜像时强制实现:在 FIDO device onboarding 页面中完成以下步骤:

    1. Manufacturing server URL 字段中输入以下信息:

      1. DIUN public key insecure 字段中,输入不安全的公钥。
      2. DIUN public key hash 字段中,输入公钥哈希。
      3. DIUN public key root certs 字段中,输入公钥根证书。点 Next
  15. OpenSCAP 页面中,完成以下步骤:

    1. Datastream 字段中输入您要添加到系统镜像的 datastream 补救指令。
    2. Profile ID 字段中,输入您要添加到系统镜像的 profile_id 安全配置文件。点击 Next
  16. 仅在构建使用 Ignition 的镜像时强制实现:在 Ignition 页面中,完成以下步骤:

    1. Firstboot URL 字段中输入您要添加到系统镜像的软件包名称。
    2. Embedded Data 字段中,拖动或上传您的文件。点 Next
  17. .在 Review 页面中,查看蓝图的详情。点 Create

RHEL 镜像构建器视图打开,列出现有的蓝图。

您可以导入并使用已存在的蓝图。系统会自动解决所有依赖项。

先决条件

  • 您已在浏览器中从 web 控制台打开了 RHEL 镜像构建器应用程序。
  • 您有一个要导入到 RHEL 镜像构建器 web 控制台界面中使用的蓝图。

流程

  1. 在 RHEL 镜像构建器仪表盘上,点 Import blueprint。此时会打开 Import blueprint 向导。
  2. Upload 字段中,拖放或上传现有的蓝图。此蓝图可以是 TOMLJSON 格式。
  3. Import。仪表盘列出了您导入的蓝图。

验证

当您点您导入的蓝图时,您可以访问带有您导入蓝图的所有自定义的仪表盘。

  • 要验证已为导入蓝图选择的软件包,请导航到 Packages 选项卡。

    • 要列出所有软件包依赖项,请单击 All。列表是可搜索的,并可排序。

后续步骤

  • 可选:要修改任何自定义:

    • Customizations 仪表盘中,点击您要更改的自定义。另外,您可以点击 Edit blueprint 来导航到所有可用的自定义选项。

您可以导出蓝图以便在另一个系统中使用自定义。您可以以 TOMLJSON 格式导出蓝图。这两个格式在 CLI 和 API 接口中都可以工作。

先决条件

  • 您已在浏览器中从 web 控制台打开了 RHEL 镜像构建器应用程序。
  • 您有一个要导出的蓝图。

流程

  1. 在镜像构建器仪表盘上,选择您要导出的蓝图。
  2. Export blueprint。此时会打开 Export blueprint 向导。
  3. Export 按钮将蓝图下载为一个文件,或者点击 Copy 按钮将蓝图复制到剪贴板。

    1. 可选:点 Copy 按钮来复制蓝图。

验证

  • 在文本编辑器中打开导出的蓝图,以检查并审核它。

您可以通过完成以下步骤,从蓝图创建一个自定义 RHEL 系统镜像。

先决条件

  • 在浏览器中从 web 控制台打开 RHEL 镜像构建器应用程序。
  • 您创建了蓝图。

流程

  1. 在 RHEL 镜像构建器仪表盘中,点 blueprint 标签页。
  2. 在蓝图表中,找到您要构建镜像的蓝图。
  3. 在所选蓝图的右侧,点 Create ImageCreate image 对话框向导将打开。
  4. Image 输出页面中完成以下步骤:

    1. Select a blueprint 列表中,选择您想要的镜像类型。
    2. Image output type 列表中,选择您想要的镜像输出类型。

      根据您选择的镜像类型,您需要添加更多详细信息。

  5. 点击 Next
  6. Review 页面上,查看关于镜像创建的详情,并点 Create image

    镜像构建启动,需要 20 分钟完成。

验证

镜像完成构建后,您可以:

  • 下载镜像。

    • 在 RHEL 镜像构建器仪表盘上,点 Node options(⫶) 菜单,然后选择 Download image
  • 下载镜像的日志以检查元素,并验证是否发现了任何问题。

    • 在 RHEL 镜像构建器仪表盘上,点 Node options(⫶) 菜单,然后选择 Download logs

9.5. 使用 RHEL 镜像构建器准备并上传云镜像

RHEL 镜像构建器可以创建准备在各种云平台上使用的自定义系统镜像。要在云中使用自定义的 RHEL 系统镜像,请使用 RHEL 镜像构建器,使用所选的输出类型创建系统镜像,配置您的系统以上传镜像,并将镜像上传到您的云帐户中。您可以通过 RHEL web 控制台中的 Image Builder 应用程序将自定义镜像推送到云,其可用于我们支持的服务提供商的子集,如 AWSMicrosoft Azure 云。请参阅 创建镜像并直接将其自动上传到 AWS Cloud AMI创建 VHD 镜像并直接将其自动上传到 Microsoft Azure 云

9.5.1. 准备 AMI 镜像,并将其上传到 AWS

您可以创建自定义镜像,并使用 RHEL 镜像构建器,手动或自动将其更新到 AWS 云。

9.5.1.1. 准备手动上传 AWS AMI 镜像

在上传 AWS AMI 镜像前,您必须配置系统来上传镜像。

先决条件

流程

  1. 安装 Python 3 和 pip 工具:

    # yum install python3 python3-pip
    Copy to Clipboard Toggle word wrap
  2. 使用 pip 安装 AWS 命令行工具

    # pip3 install awscli
    Copy to Clipboard Toggle word wrap
  3. 设置您的配置文件。终端提示您提供凭证、地区和输出格式:

    $ aws configure
    AWS Access Key ID [None]:
    AWS Secret Access Key [None]:
    Default region name [None]:
    Default output format [None]:
    Copy to Clipboard Toggle word wrap
  4. 为存储桶定义名称,并创建存储桶:

    $ BUCKET=bucketname
    $ aws s3 mb s3://$BUCKET
    Copy to Clipboard Toggle word wrap

    使用实际的存储桶名称替换 bucketname。它必须是全局唯一的名称。因此,您的存储桶会被创建。

  5. 要授予访问 S3 存储桶的权限,如果您还没有这样做,请在 AWS Identity and Access Management (IAM) 中创建一个 vmimport S3 角色:

    1. 创建一个 JSON 格式的带有信任策略配置的 trust-policy.json 文件。例如:

      {
          "Version": "2022-10-17",
          "Statement": [{
              "Effect": "Allow",
              "Principal": {
                  "Service": "vmie.amazonaws.com"
              },
              "Action": "sts:AssumeRole",
              "Condition": {
                  "StringEquals": {
                      "sts:Externalid": "vmimport"
                  }
              }
          }]
      }
      Copy to Clipboard Toggle word wrap
    2. 创建一个 JSON 格式的带有角色策略配置的 role-policy.json 文件。例如:

      {
          "Version": "2012-10-17",
          "Statement": [{
              "Effect": "Allow",
              "Action": ["s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket"],
              "Resource": ["arn:aws:s3:::%s", "arn:aws:s3:::%s/"] }, { "Effect": "Allow", "Action": ["ec2:ModifySnapshotAttribute", "ec2:CopySnapshot", "ec2:RegisterImage", "ec2:Describe"],
              "Resource": "*"
          }]
      }
      $BUCKET $BUCKET
      Copy to Clipboard Toggle word wrap
    3. 使用 trust-policy.json 文件为您的 Amazon Web Services 帐户创建一个角色:

      $ aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json
      Copy to Clipboard Toggle word wrap
    4. 使用 role-policy.json 文件嵌入一个内联策略文档:

      $ aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json
      Copy to Clipboard Toggle word wrap
9.5.1.2. 使用 CLI 手动将 AMI 镜像上传到 AWS

您可以使用 RHEL 镜像构建器构建 ami 镜像,并使用 CLI 手动将它们直接上传到 Amazon AWS Cloud 服务提供商。

先决条件

  • 您在 AWS IAM 帐户管理器中配置了 Access Key ID
  • 您必须准备一个可写的 S3 存储桶。请参阅 创建 S3 存储桶
  • 您有一个定义的蓝图。

流程

  1. 使用文本编辑器,使用以下内容创建配置文件:

    provider = "aws"
    [settings]
    accessKeyID = "AWS_ACCESS_KEY_ID"
    secretAccessKey = "AWS_SECRET_ACCESS_KEY"
    bucket = "AWS_BUCKET"
    region = "AWS_REGION"
    key = "IMAGE_KEY"
    Copy to Clipboard Toggle word wrap

    将字段中的值替换为您的 accessKeyIDsecretAccessKeybucketregion 的凭证。IMAGE_KEY 值是要上传到 EC2 的虚拟机镜像的名称。

  2. 将文件保存为 CONFIGURATION-FILE.toml,再关闭文本编辑器。
  3. 启动 compose 来将其上传到 AWS:

    # composer-cli compose start blueprint-name image-type image-key configuration-file.toml
    Copy to Clipboard Toggle word wrap

    替换:

    • 使用您创建的蓝图名称替换 blueprint-name
    • 使用 ami 镜像类型替换 image-type
    • 使用要上传到 EC2 的虚拟机镜像的名称替换 image-key
    • 带有云提供商的配置文件名称的 configuration-file.toml。

      注意

      您必须有要将自定义镜像发送到的存储桶的正确 AWS 身份和访问管理(IAM)设置。在将镜像上传到存储桶前,您必须先将策略设置为存储桶。

  4. 检查镜像构建的状态:

    # composer-cli compose status
    Copy to Clipboard Toggle word wrap

    在映像上传过程完成后,您可以看到"FINISHED"状态。

验证

确认镜像上传成功:

  1. 访问菜单中的 EC2,并在 AWS 控制台中选择正确的区域。镜像必须具有 available 状态,以指示它已被成功上传。
  2. 在仪表盘上,选择您的镜像并点击 Launch
9.5.1.3. 创建镜像并自动将其上传到 AWS Cloud AMI

您可以使用 RHEL 镜像构建器创建 (.raw) 镜像,并选择 Upload to AWS 复选框,自动将您创建的输出镜像直接推送到 Amazon AWS Cloud AMI 服务提供商。

先决条件

流程

  1. 在 RHEL 镜像构建器仪表盘中,点之前创建的 blueprint name
  2. 选择 映像 选项卡。
  3. Create Image 创建自定义镜像。

    Create Image 窗口打开。

    1. Type 下拉菜单中选择 Amazon Machine Image Disk (.raw)
    2. 选中 Upload to AWS 复选框,来将您的镜像上传到 AWS 云,然后点 Next
    3. 要验证您是否可以访问 AWS ,请在对应的字段中输入您的"AWS access key ID""AWS secret access key"。点击 Next

      注意

      您只能在创建新访问密钥 ID 时查看 AWS secret 访问密钥。如果您不知道您的 Secret 密钥,请生成一个新的 Access Key ID。

    4. Image name 字段中输入镜像名称,在 Amazon S3 bucket name 字段中输入 Amazon bucket 名称,并为您要添加自定义镜像的存储桶输入 AWS region 字段。点击 Next
    5. 查看信息并点 Finish

      可选,点 Back 来修改任何不正确的详情。

      注意

      您必须具有要发送自定义镜像的存储桶的正确 IAM 设置。此流程使用 IAM 导入和导出,因此您必须在将镜像上传到存储桶前为存储桶设置 策略。如需更多信息,请参阅 IAM 用户所需的权限

  4. 右上角的弹出窗口告诉您保存的进度。它还告知镜像创建过程、创建此镜像的过程以及后续的上传到 AWS Cloud。

    完成这个过程后,您可以看到 镜像构建完成状态。

  5. 在浏览器中,访问 Service→EC2

    1. 在 AWS 控制台仪表盘菜单中,选择 correct region。镜像必须具有 Available 状态,以指示它已被上传。
    2. 在 AWS 仪表盘上,选择您的镜像并点 Launch
  6. 此时会打开一个新窗口。根据启动镜像所需的资源选择实例类型。点 Review and Launch
  7. 查看您的实例启动详情。如果需要进行任何更改,您可以编辑任何部分。点 Launch
  8. 在启动实例之前,选择一个访问它的公钥。

    您可以使用您已有的密钥对,也可以创建新的密钥对。

    按照以下步骤在 EC2 中创建新密钥对,并将它连接到新实例。

    1. 在下拉菜单中选择 "Create a new key pair"
    2. 输入新密钥对名称。它生成一个新的密钥对。
    3. "下载密钥对" 在您的本地系统中保存新密钥对。
  9. 然后,您可以点 Launch Instance 启动您的实例。

    您可以检查实例的状态,它显示为 Initializing

  10. 实例状态变为 running 后,连接按钮将变为可用。
  11. 连接。此时会出现一个窗口,其中包含有关如何使用 SSH 进行连接的说明。

    1. 选择 A standalone SSH client 作为首选连接方法并打开终端。
    2. 在您存储私钥的位置,确保您的密钥是公开可见的,以便 SSH 可以正常工作。要做到这一点,请运行以下命令:

      $ chmod 400 <_your-instance-name.pem_>
      Copy to Clipboard Toggle word wrap
    3. 使用其公共 DNS 连接到您的实例:

      $ ssh -i <_your-instance-name.pem_> ec2-user@<_your-instance-IP-address_>
      Copy to Clipboard Toggle word wrap
    4. 键入 yes 以确认您要继续连接。

      因此,您通过 SSH 连接到您的实例。

验证

  • 检查在使用 SSH 连接到您的实例的过程中是否能够执行任何操作。

您可以创建自定义镜像,并使用 RHEL 镜像构建器,手动或自动将它们更新到 Microsoft Azure 云。

9.5.2.1. 准备手动上传 Microsoft Azure VHD 镜像

要创建一个可手动上传到 Microsoft Azure 云的 VHD 镜像,您可以使用 RHEL 镜像构建器。

先决条件

  • 您必须有 Microsoft Azure 资源组和存储帐户。
  • 您已安装了 Python。AZ CLI 工具依赖 python。

流程

  1. 导入 Microsoft 存储库密钥:

    # rpm --import https://packages.microsoft.com/keys/microsoft.asc
    Copy to Clipboard Toggle word wrap
  2. 使用以下信息创建一个本地 azure-cli.repo 存储库:将 azure-cli.repo 存储库保存在 /etc/yum.repos.d/ 下:

    [azure-cli]
    name=Azure CLI
    baseurl=https://packages.microsoft.com/yumrepos/vscode
    enabled=1
    gpgcheck=1
    gpgkey=https://packages.microsoft.com/keys/microsoft.asc
    Copy to Clipboard Toggle word wrap
  3. 安装 Microsoft Azure CLI:

    # yumdownloader azure-cli
    # rpm -ivh --nodeps azure-cli-2.0.64-1.el7.x86_64.rpm
    Copy to Clipboard Toggle word wrap
    注意

    下载的 Microsoft Azure CLI 软件包版本可能会因当前可用的版本而异。

  4. 运行 Microsoft Azure CLI:

    $ az login
    Copy to Clipboard Toggle word wrap

    终端会显示以下信息 Note, we have launched a browser for you to login.For old experience with device code, use "az login --use-device-code.然后,终端会打开浏览器,其中包含可从其登录 https://microsoft.com/devicelogin 的链接。

    注意

    如果您正在运行一个远程(SSH)会话,则登录页面链接不会在浏览器中打开。在这种情况下,您可以将链接复制到浏览器,并登录以验证您的远程会话。要登录,使用网页浏览器打开页面 https://microsoft.com/devicelogin 并输入要进行身份验证的设备代码。

  5. 列出 Microsoft Azure 中存储帐户的密钥:

    $ az storage account keys list --resource-group <resource_group_name> --account-name <storage_account_name>
    Copy to Clipboard Toggle word wrap

    resource-group-name 替换为 Microsoft Azure 资源组的名称,将 storage-account-name 替换为 Microsoft Azure 存储帐户的名称。

    注意

    您可以使用以下命令列出可用资源:

    $ az resource list
    Copy to Clipboard Toggle word wrap

    记录上一命令输出中 key1 的值。

  6. 创建存储容器:

    $ az storage container create --account-name <storage_account_name>\
    --account-key <key1_value> --name <storage_account_name>
    Copy to Clipboard Toggle word wrap

    storage-account-name 替换为存储帐户的名称。

9.5.2.2. 手动将 VHD 镜像上传到 Microsoft Azure 云

在创建了自定义 VHD 镜像后,您可以手动将其上传到 Microsoft Azure 云。

先决条件

  • 必须设置您的系统以上传 Microsoft Azure VHD 镜像。请参阅 准备上传 Microsoft Azure VHD 镜像
  • 您必须有由 RHEL 镜像构建器创建的 Microsoft Azure VHD 镜像。

    • 在 GUI 中,使用 Azure Disk Image (.vhd) 镜像类型。
    • 在 CLI 中,使用 vhd 输出类型。

流程

  1. 将镜像推送到 Microsoft Azure 并从中创建一个实例:

    $ az storage blob upload --account-name <_account_name_> --container-name <_container_name_> --file <_image_-disk.vhd> --name <_image_-disk.vhd> --type page
    ...
    Copy to Clipboard Toggle word wrap
  2. 上传到 Microsoft Azure Blob 存储后,从其创建一个 Microsoft Azure 镜像:

    $ az image create --resource-group <_resource_group_name_> --name <_image_>-disk.vhd --os-type linux --location <_location_> --source https://$<_account_name_>.blob.core.windows.net/<_container_name_>/<_image_>-disk.vhd
     - Running ...
    Copy to Clipboard Toggle word wrap
    注意

    因为您使用 RHEL 镜像构建器生成混合镜像的镜像支持 V1 = BIOS 和 V2 = UEFI 实例类型,所以您可以指定 --hyper-v-generation 参数。默认的实例类型是 V1。

验证

  1. 使用 Microsoft Azure 门户创建实例,或者使用以下命令:

    $ az vm create --resource-group <_resource_group_name_> --location <_location_> --name <_vm_name_> --image <_image_>-disk.vhd --admin-username azure-user --generate-ssh-keys
     - Running ...
    Copy to Clipboard Toggle word wrap
  2. 通过 SSH 使用您的私钥访问生成的实例。以 azure-user 用户身份登录。此用户名在上一步中设置了。

您可以使用 RHEL 镜像构建器创建 .vhd 镜像,该镜像将被自动上传到 Microsoft Azure Cloud 服务提供商的 Blob 存储中。

先决条件

流程

  1. 在 RHEL 镜像构建器仪表盘中,选择要使用的蓝图。
  2. Images 选项卡。
  3. Create Image 创建自定义的 .vhd 镜像。

    Create image 向导将打开。

    1. Type 下拉菜单中选择 Microsoft Azure (.vhd)
    2. 选中 Upload to Azure 复选框,来将镜像上传到 Microsoft Azure Cloud。
    3. 输入 Image Size ,并点 Next
  4. Upload to Azure 页面行,输入以下信息:

    1. 在 Authentication 页面上,输入:

      1. 您的 存储帐户 名称。您可以在 Storage account 页面的 Microsoft Azure 门户 中找到它。
      2. 您的存储访问密钥 :您可以在 Access Key Storage 页面中找到它。
      3. 点击 Next
    2. Authentication 页面上,输入:

      1. 镜像名称。
      2. 存储容器.它是您将镜像上传到的 blob 容器。您可以在 Microsoft Azure 门户Blob service 部分中找到它。
      3. 点击 Next
  5. Review 页面上,点 Create。RHEL 镜像构建器和上传进程启动。

    访问推送到 Microsoft Azure Cloud 的镜像。

  6. 访问 Microsoft Azure 门户网站
  7. 在搜索栏中,输入"storage account",然后从列表中单击 Storage accounts
  8. 在搜索栏中输键入"Images",然后在 Services 下选择第一个条目。您将被重定向到 镜像仪表盘
  9. 在导航面板上,单击 Containers
  10. 查找您创建的容器。容器中是您使用 RHEL 镜像构建器创建并推送的 .vhd 文件。

验证

  1. 验证您能否创建虚拟机镜像并启动它。

    1. 在搜索栏中,输入镜像帐户,并单击列表中的 Images
    2. 单击 +Create
    3. 从下拉列表中,选择您之前使用的资源组。
    4. 输入镜像的名称。
    5. 对于 OS type,请选择 Linux
    6. 对于 VM generation,请选择 Gen 2
    7. Storage Blob 下,点 Browse ,并点存储账户和容器,直到您到达 VHD 文件。
    8. 点页面末尾的 Select
    9. 选择一个帐户类型,例如 Standard SSD
    10. Review + Create,然后点 Create。等待几分钟,以便创建镜像。
  2. 要启动虚拟机,请按照以下步骤执行:

    1. Go to resource
    2. 从标题的菜单栏中,单击 + Create VM
    3. 输入虚拟机的名称。
    4. 完成 SizeAdministrator account 部分。
    5. Review + Create,然后点 Create。您可以查看部署进度。

      部署完成后,单击虚拟机名称,以检索使用 SSH 连接的实例的公用 IP 地址。

    6. 打开一个终端,创建一个 SSH 连接来连接到虚拟机。

使用 RHEL 镜像构建器,您可以创建自定义的 VMware vSphere 系统镜像,可以是 Open virtualization 格式(.ova),也可以是 Virtual disk (.vmdk)格式。您可以将这些镜像上传到 VMware vSphere 客户端。您可以使用 govc import.vmdk CLI 工具将 .vmdk.ova 镜像上传到 VMware vSphere。您创建的 vmdk 包含安装的 cloud-init 软件包,您可以使用它,通过使用用户数据来提供给用户:

注意

不支持使用 VMware vSphere GUI 上传 vmdk 镜像。

先决条件

  • 您已使用用户名和密码自定义创建了一个蓝图。
  • 您已使用 RHEL 镜像构建器创建了 .ova.vmdk 格式的 VMware vSphere 镜像,并将其下载到主机系统。
  • 您安装并配置了 govc CLI 工具,以便能够使用 import.vmdk 命令。

流程

  1. 使用 GOVC 环境变量在用户环境中配置以下值:

    GOVC_URL
    GOVC_DATACENTER
    GOVC_FOLDER
    GOVC_DATASTORE
    GOVC_RESOURCE_POOL
    GOVC_NETWORK
    Copy to Clipboard Toggle word wrap
  2. 进入到您下载 VMware vSphere 镜像的目录。
  3. 按照以下步骤在 vSphere 上启动 VMware vSphere 镜像:

    1. 将 VMware vSphere 镜像导入到 vSphere:

      $ govc import.vmdk ./composer-api.vmdk foldername
      Copy to Clipboard Toggle word wrap

      对于 .ova 格式:

      $ govc import.ova ./composer-api.ova foldername
      Copy to Clipboard Toggle word wrap
    2. 在 vSphere 中创建虚拟机而不开机:

      govc vm.create \
      -net.adapter=vmxnet3 \
      -m=4096 -c=2 -g=rhel8_64Guest \
      -firmware=efi -disk=”foldername/composer-api.vmdk” \
      -disk.controller=scsi -on=false \
       vmname
      Copy to Clipboard Toggle word wrap

      对于 .ova 格式,将行 -firmware=efi -disk=”foldername/composer-api.vmdk” \ 替换为 `-firmware=efi -disk=”foldername/composer-api.ova”\

    3. 打开虚拟机:

      govc vm.power -on vmname
      Copy to Clipboard Toggle word wrap
    4. 检索虚拟机 IP 地址:

      govc vm.ip vmname
      Copy to Clipboard Toggle word wrap
    5. 使用您在蓝图中指定的用户名和密码,使用 SSH 登录到虚拟机:

      $ ssh admin@<_ip_address_of_the_vm_>
      Copy to Clipboard Toggle word wrap
      注意

      如果您使用 govc datastore.upload 命令将 .vmdk 镜像从本地主机复制到目的地,则不支持使用生成的镜像。在 vSphere GUI 中没有使用 import.vmdk 命令的选项,因此 vSphere GUI 不支持直接上传。因此,.vmdk 镜像无法从 vSphere GUI 使用。

您可以使用 RHEL 镜像构建器 GUI 工具构建 VMware 镜像,并自动将镜像直接推送到 vSphere 实例中。这可避免下载镜像文件并手动推送它。您创建的 vmdk 包含安装的 cloud-init 软件包,您可以使用它来使用用户数据提供给用户,例如:要使用 RHEL 镜像构建器构建 .vmdk 镜像,并将它们直接推送到 vSphere 实例服务提供商,请按照以下步骤执行:

先决条件

流程

  1. 对于您创建的蓝图,点 Images 选项卡。
  2. Create Image 创建自定义镜像。

    此时将打开 Image 类型窗口。

  3. Image 类型 窗口中:

    1. 从下拉菜单中选择类型:VMware vSphere (.vmdk)。
    2. 选中 Upload to VMware 复选框,将镜像上传到 vSphere。
    3. 可选:设置您要实例化的镜像的大小。最小的默认大小为 2 GB。
    4. 点击 Next
  4. Upload to VMware 窗口中,在 Authentication 下输入以下详情:

    1. 用户名 :vSphere 帐户的用户名。
    2. Password :vSphere 帐户的密码。
  5. Upload to VMware 窗口中,在 Destination 下输入有关镜像上传目的地的以下详情:

    1. Image name :镜像的名称。
    2. 主机 :VMware vSphere 的 URL。
    3. cluster:集群的名称。
    4. 数据中心 :数据中心的名称。
    5. Data store :数据存储的名称。
    6. Next
  6. Review 窗口中,查看镜像创建的详情并点 Finish

    您可以点 Back 来修改任何不正确的详情。

    RHEL 镜像构建器将 RHEL vSphere 镜像的组成添加到队列中,创建镜像并将其上传到您指定的 vSphere 实例的集群上。

    注意

    完成镜像构建和上传过程需要几分钟时间。

    完成这个过程后,您可以看到 镜像构建完成状态。

验证

成功完成镜像状态上传后,您可以从上传并登录的镜像创建一个虚拟机(VM)。要做到这一点:

  1. 访问 VMware vSphere 客户端。
  2. 在您指定的 vSphere 实例的 Cluster 中搜索镜像。
  3. 选择您上传的镜像。
  4. 右键点所选镜像。
  5. New Virtual Machine

    此时将打开 New Virtual Machine 窗口。

    New Virtual Machine 窗口中提供以下详情:

    1. 选择 New Virtual Machine
    2. 为您的虚拟机选择一个名称和文件夹。
    3. 选择计算机资源:为此操作选择一个目标计算机资源。
    4. 选择存储:例如,选择 NFS-Node1
    5. 选择兼容性:映像应仅为 BIOS。
    6. 选择客户端操作系统:例如,选择 LinuxRed Hat Fedora (64 位)。
    7. 自定义硬件 :创建虚拟机时,在右上角的 Device Configuration 按钮,删除默认的 New Hard Disk,并使用下拉菜单来选择 Existing Hard Disk 磁盘镜像:
    8. 准备完成:检查详情,再单击 Finish 以创建镜像。
  6. 导航至 VM 选项卡。

    1. 从列表中选择您创建的虚拟机。
    2. 单击面板中的 Start 按钮。此时将显示一个新窗口,显示 VM 映像加载。
    3. 使用您为蓝图创建的凭证登录。
    4. 您可以验证添加到蓝图中的软件包是否已安装。例如:

      $ rpm -qa | grep firefox
      Copy to Clipboard Toggle word wrap

9.5.3. 准备自定义 GCE 镜像,并将其上传到 GCP

您可以创建自定义镜像,然后使用 RHEL 镜像构建器将其自动更新到 Oracle Cloud Infrastructure (OCI)实例。

9.5.3.1. 使用 RHEL 镜像构建器将镜像上传到 GCP

使用 RHEL 镜像构建器,您可以构建 gce 镜像,为用户或 GCP 服务帐户提供凭证,然后将 gce 镜像直接上传到 GCP 环境。

使用凭证建立一个配置文件,以使用 RHEL 镜像构建器 CLI 将 gce 镜像上传到 GCP。

警告

您无法手动将 gce 镜像导入到 GCP,因为镜像不能引导。您必须使用 gcloud 或 RHEL 镜像构建器上传它。

先决条件

  • 您有一个有效的 Google 帐户和凭证,以便将镜像上传到 GCP。凭据可以从用户帐户或服务帐户获取。与凭证关联的帐户必须至少分配以下 IAM 角色:

    • roles/storage.admin - 用于创建和删除存储对象
    • roles/compute.storageAdmin - 将虚拟机镜像导入到 Compute Engine。
  • 您有一个现有的 GCP 存储桶。

流程

  1. 使用文本编辑器创建一个包含以下内容的 gcp-config.toml 配置文件:

    provider = "gcp"
    [settings]
    bucket = "GCP_BUCKET"
    region = "GCP_STORAGE_REGION"
    object = "OBJECT_KEY"
    credentials = "GCP_CREDENTIALS"
    Copy to Clipboard Toggle word wrap
    • GCP_BUCKET 指向现有的存储桶。它用于存储正在上传的镜像的中间存储对象。
    • GCP_STORAGE_REGION 既是一个常规的 Google 存储区域,又是一个双区域或多区域。
    • OBJECT_KEY 是中间存储对象的名称。它在上传过程前不能存在,并在上传过程完成后被删除。如果对象名称不以 .tar.gz 结尾,则扩展会自动添加到对象名称中。
    • GCP_CREDENTIALS 是从 GCP 下载的凭证 JSON 文件的 Base64 编码的方案。凭证决定了 GCP 将镜像上传到的项目。

      注意

      如果您使用不同的机制来使用 GCP 进行身份验证,在 gcp-config.toml 文件中指定 GCP_CREDENTIALS 是可选的。有关其他验证方法,请参阅 使用 GCP 进行验证

  2. 从 GCP 下载的 JSON 文件中检索 GCP_CREDENTIALS

    $ sudo base64 -w 0 cee-gcp-nasa-476a1fa485b7.json
    Copy to Clipboard Toggle word wrap
  3. 使用附加镜像名称和云供应商配置集创建 compose:

    $ sudo composer-cli compose start BLUEPRINT-NAME gce IMAGE_KEY gcp-config.toml
    Copy to Clipboard Toggle word wrap

    镜像构建、上传和云注册过程最多可能需要十分钟才能完成。

验证

  • 验证镜像状态为 FINISHED:

    $ sudo composer-cli compose status
    Copy to Clipboard Toggle word wrap

您可以在 RHEL 镜像构建器中使用几种不同类型的凭证来使用 GCP 进行身份验证。如果 RHEL 镜像构建器配置被设置为使用多组凭证使用 GCP 进行身份验证,它会按以下首选顺序使用凭证:

  1. 在配置文件中,使用 composer-cli 命令指定的凭证。
  2. 凭证在 osbuild-composer worker 配置中被配置。
  3. Google GCP SDK 库中的 应用程序默认凭证,它尝试使用以下选项自动找到一个身份验证的方法:

    1. 如果设置了 GOOGLE_APPLICATION_CREDENTIALS 环境变量,应用程序默认凭据会尝试加载并从文件中使用由变量指向的凭证。
    2. 应用默认凭据尝试使用附加到运行代码的资源的服务帐户进行身份验证。例如,Google Compute Engine 虚拟机。

      注意

      您必须使用 GCP 凭证来决定将镜像上传到的 GCP 项目。因此,除非要将所有镜像上传到同一 GCP 项目,您必须使用 composer-cli 命令指定 gcp-config.toml 配置文件中的凭证。

9.5.3.1.2.1. 使用 composer-cli 命令指定 GCP 凭证

您可以在上传目标配置 gcp-config.toml 文件中指定 GCP 验证凭证。使用 Google 帐户凭证 JSON 文件的 Base64 编码方案来节省时间。

流程

  1. 运行以下命令,使用存储在 GOOGLE_APPLICATION_CREDENTIALS 环境变量中的路径获取 Google 帐户凭证文件的编码内容:

    $ base64 -w 0 "${GOOGLE_APPLICATION_CREDENTIALS}"
    Copy to Clipboard Toggle word wrap
  2. 在上传目标配置 gcp-config.toml 文件中,设置凭证:

    provider = "gcp"
    
    [settings]
    provider = "gcp"
    
    [settings]
    credentials = "GCP_CREDENTIALS"
    Copy to Clipboard Toggle word wrap

您可以将 GCP 身份验证凭据配置为全局用于 GCP 用于所有镜像构建。这样,如果您想要将镜像导入到同一 GCP 项目,则您可以对上传到 GCP 的所有镜像使用相同的凭据。

流程

  • /etc/osbuild-worker/osbuild-worker.toml worker 配置中,设置以下凭证值:

    [gcp]
    credentials = "PATH_TO_GCP_ACCOUNT_CREDENTIALS"
    Copy to Clipboard Toggle word wrap

9.5.4. 准备自定义镜像,并将其直接上传到 OCI

您可以创建自定义镜像,然后使用 RHEL 镜像构建器将其自动更新到 Oracle Cloud Infrastructure (OCI)实例。

使用 RHEL 镜像构建器,构建自定义镜像,并自动直接将其推送到 Oracle Cloud Infrastructure (OCI)实例。然后,您可以从 OCI 仪表盘中启动镜像实例。

先决条件

  • 您有访问系统的 rootweldr 组用户权限。
  • 您有一个 Oracle Cloud 帐户。
  • 您必须为管理员授予 OCI 策略中的安全访问权限。
  • 您已在您选择的 OCI_REGION 中创建了 OCI Bucket。

流程

  1. 在浏览器中打开 web 控制台的 RHEL 镜像构建器界面。
  2. 点击 Create blueprintCreate blueprint 向导将打开。
  3. Details 页面中,输入蓝图的名称,以及可选的描述。点 Next
  4. Packages 页面中,选择要在镜像中包含的组件和软件包。点 Next
  5. Customizations 页面中,配置您要用于蓝图的自定义。点 Next
  6. Review 页面上,点 Create
  7. 要创建镜像,请单击 Create ImageCreate image 向导将打开。
  8. Image 输出页面中完成以下步骤:

    1. "Select a blueprint" 下拉菜单中选择您想要的蓝图。
    2. "Image output type" 下拉菜单中选择 Oracle Cloud Infrastructure (.qcow2)
    3. 选中 "Upload OCI 复选框,来将您的镜像上传到 OCI。
    4. 输入 "镜像大小 "。点 Next
  9. Upload to OCI - Authentication 页面中,输入以下强制详情:

    1. 用户 OCID:您可以在显示用户详情的页面的控制台中找到它。
    2. 私钥
  10. Upload to OCI - Destination 页面中,输入以下强制详情,并点 Next

    1. 镜像名称:要上传的镜像的名称。
    2. OCI 存储桶
    3. bucket 命名空间
    4. bucket 区域
    5. bucket 划分
    6. bucket 租户
  11. 查看向导中的详情并点 Finish

RHEL 镜像构建器将 RHEL .qcow2 镜像的组成添加到队列中。

验证

  1. 访问 OCI 仪表板 → Custom Images。
  2. 选择您为镜像指定的 Compartment,并在 Import image 表中找到镜像。
  3. 点镜像名称并验证镜像信息。

您可以使用 RHEL 镜像构建器创建自定义 .qcow2 镜像,并手动将它们上传到 OpenStack 云部署。

9.5.5.1. 将 QCOW2 镜像上传到 OpenStack

使用 RHEL 镜像构建器工具,您可以创建适合上传到 OpenStack 云部署的自定义 .qcow2 镜像,并在那里启动实例。RHEL 镜像构建器以 QCOW2 格式创建镜像,但针对 OpenStack 有进一步的更改。

警告

不要将使用 RHEL 镜像构建器创建的通用 QCOW2 镜像类型输出格式与 OpenStack 镜像类型混淆,后者也是 QCOW2 格式,但包含特定于 OpenStack 的进一步更改。

先决条件

  • 您已创建了蓝图。

流程

  1. 启动 QCOW2 镜像的 compose。

    # composer-cli compose start blueprint_name openstack
    Copy to Clipboard Toggle word wrap
  2. 检查构建的状态。

    # composer-cli compose status
    Copy to Clipboard Toggle word wrap

    镜像构建完成后,您可以下载镜像。

  3. 下载 QCOW2 镜像:

    # composer-cli compose image UUID
    Copy to Clipboard Toggle word wrap
  4. 访问 OpenStack 仪表盘,并单击 +Create Image
  5. 在左侧菜单中,选择 Admin 选项卡。
  6. 系统面板中,点镜像

    Create An Image 向导将打开。

  7. Create An Image 向导中:

    1. 输入镜像的名称
    2. Browse,上传 QCOW2 镜像。
    3. 格式 下拉列表中,选择 QCOW2 - QEMU Emulator
    4. Create Image

      composer openstack upload image

  8. 在左侧菜单中,选择 Project 选项卡。

    1. Compute 菜单中,选择 Instances
    2. 单击 Launch Instance 按钮。

      此时会打开 Launch Instance 向导。

    3. Details 页面中,输入实例的名称。点 Next
    4. Source 页面中,选择您上传的镜像的名称。点 Next
    5. Flavor 页面中,选择最适合您的需要的机器资源。点 Launch

      composer openstack start instance

  9. 您可以使用任何机制(CLI 或 OpenStack Web UI)来从镜像运行镜像实例。通过 SSH 使用您的私钥访问生成的实例。以 cloud-user 用户身份登录。

您可以将使用 RHEL 镜像构建器创建的自定义 .ami 镜像上传到 Alibaba Cloud。

要将自定义 RHEL 镜像部署到 Alibaba Cloud 中,您首先需要验证自定义镜像。镜像需要特定的配置才能成功引导,因为在使用镜像前,Alibaba Cloud 需要自定义镜像来满足某些要求。

注意

RHEL 镜像构建器生成符合 Alibaba 要求的镜像。但是,红帽建议使用 Alibaba image_check 工具来验证镜像的格式合规性。

先决条件

  • 您必须已使用 RHEL 镜像构建器创建了一个 Alibaba 镜像。

流程

  1. 使用 Alibaba image_check 工具连接到包含您要检查的镜像的系统。
  2. 下载 image_check 工具:

    $ curl -O https://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/73848/cn_zh/1557459863884/image_check
    Copy to Clipboard Toggle word wrap
  3. 更改镜像合规工具的文件权限:

    # chmod +x image_check
    Copy to Clipboard Toggle word wrap
  4. 运行命令启动镜像合规工具检查:

    # ./image_check
    Copy to Clipboard Toggle word wrap

    该工具会验证系统配置并生成屏幕中显示的报告。image_check 工具将此报告保存在与运行镜像合规工具同样的文件夹中。

故障排除

如果任何检测项失败,请按照终端中的说明进行更正。

9.5.6.2. 将自定义 RHEL 镜像上传到 Alibaba

您可以使用 RHEL 镜像构建器将您创建的自定义 AMI 镜像上传到对象存储服务(OSS)。

先决条件

流程

  1. 登录到 OSS 控制台
  2. 在左侧的 Bucket 菜单中,选择要将镜像上传到的存储桶。
  3. 在右菜单中点 Files 标签页。
  4. Upload。一个对话框窗口会在右侧打开。配置以下内容:

    • 上传至 :选择将该文件上传到 Current 目录或一个 指定的目录
    • 文件 ACL :选择上传的文件的权限类型。
  5. Upload
  6. 选择您要上传到 OSS 控制台的镜像。
  7. Open
9.5.6.3. 将镜像导入到 Alibaba Cloud

要将使用 RHEL 镜像构建器创建的自定义 Alibaba RHEL 镜像导入到 Elastic Compute Service (ECS),请按照以下步骤操作:

先决条件

流程

  1. 登录到 ECS 控制台。

    1. 在左侧菜单中,点 Images
    2. 在右上角,点 Import Image。此时会打开一个对话框窗口。
    3. 确认您已设置了镜像所在的正确区域。输入以下信息:

      1. OSS 对象地址 :了解如何获取 OSS 对象地址.
      2. 镜像名称
      3. 操作系统
      4. 系统磁盘大小
      5. 系统架构
      6. 平台 :红帽
    4. 可选:提供以下详情:

      1. 镜像格式:qcow2ami,具体取决于上传的镜像格式。
      2. 镜像描述
      3. 添加数据磁盘的镜像

        地址可以在 OSS 管理控制台中确定。在左侧菜单中选择所需的存储桶之后:

  2. 选择 Files 部分。
  3. 点相应镜像右侧的 Details 链接。

    窗口会出现在屏幕右侧,显示镜像详情。OSS 对象地址位于 URL 框中。

  4. 确定

    注意

    导入过程的时间可能因镜像大小而异。

自定义镜像导入到 ECS 控制台。

您可以使用 Alibaba ECS 控制台创建自定义 RHEL 镜像的实例。

先决条件

流程

  1. 登录到 ECS 控制台。
  2. 在左侧菜单中,选择 Instances
  3. 在右上角,点 Create Instance。您会被重新定向到新窗口。
  4. 完成所有必需的信息。如需了解更多详细信息,请参阅使用向导创建实例
  5. Create Instance 并确认顺序。

    注意

    根据您的订阅,您可以看到 Create Order 选项而不是 Create Instance

因此,您有一个活跃的实例准备好从 Alibaba ECS 控制台进行部署

第 10 章 使用 Kickstart 执行自动安装

10.1. 自动化安装工作流

Kickstart 安装可以使用本地 DVD、本地磁盘或 NFS、FTP、HTTP 或者 HTTPS 服务器来执行。这部分提供了 Kickstart 使用的高级概述。

  1. 创建一个 Kickstart 文件。您可以手动写入该文件,复制手动安装后保存的 Kickstart 文件,或者使用在线生成器工具创建该文件,之后再编辑该文件。
  2. 使 Kickstart 文件对可移动介质、磁盘上的安装程序或者使用 HTTP (S)、FTP 或者 NFS 服务器的网络位置可用。
  3. 创建用来开始安装的引导介质。
  4. 使安装源可供安装程序使用。
  5. 使用引导介质和 Kickstart 文件开始安装。如果 Kickstart 文件包含所有强制命令和部分,则会自动完成安装。如果缺少一个或多个这些强制部分,或者出现错误,则安装需要手动干预才能完成。

10.2. 创建 Kickstart 文件

您可以使用以下方法创建 Kickstart 文件:

  • 使用在线 Kickstart 配置工具。
  • 复制手动安装后创建的 Kickstart 文件。
  • 手动编写整个 Kickstart 文件。
  • 为 Red Hat Enterprise Linux 8 安装转换 Red Hat Enterprise Linux 7 Kickstart 文件。

    有关转换工具的更多信息,请参阅 Kickstart 生成器实验室

  • 如果是虚拟和云环境,请使用 Image Builder 创建自定义系统镜像。

某些高度特定的安装选项只能通过手动编辑 Kickstart 文件来配置。

有红帽客户门户网站帐户的用户可以使用客户门户网站 Labs 中的 Kickstart Generator 工具在线生成 Kickstart 文件。这个工具可帮助您完成基本配置,并下载得到的 Kickstart 文件。

先决条件

  • 您有一个红帽客户门户网站帐户,以及一个有效的红帽订阅。

流程

  1. https://access.redhat.com/labsinfo/kickstartconfig 打开 Kickstart 生成器实验室信息页面。
  2. 点击标题左侧的 Go to Application 按钮并等待下一个页面加载。
  3. 从下拉菜单中选择 Red Hat Enterprise Linux 8 ,并等待页面更新。
  4. 使用表单中的字段描述要安装的系统。

    您可以使用表单左侧的链接来快速导航表表单的部分内容。

  5. 要下载生成的 Kickstart 文件,请点击本页顶部的红色 下载 按钮。

    浏览器会保存该文件。

  6. 安装 pykickstart 软件包。

    # yum install pykickstart
    Copy to Clipboard Toggle word wrap
  7. 对您的 Kickstart 文件运行 ksvalidator

    $ ksvalidator -v RHEL8 /path/to/kickstart.ks
    Copy to Clipboard Toggle word wrap

    使用要验证的 Kickstart 文件的路径替换 /path/to/kickstart.ks

    验证工具并不能保证安装过程可以成功。它只检查语法是否正确,且该文件不包含已弃用的选项。它不会验证 Kickstart 文件的 %pre%post%packages 部分。

10.2.2. 执行手动安装来创建 Kickstart 文件

创建 Kickstart 文件的建议方法是使用手动安装 Red Hat Enterprise Linux 创建的文件。安装完成后,安装过程中进行的所有选择都会保存到名为 anaconda-ks.cfg 的 Kickstart 文件中,该文件位于安装的系统上的 /root/ 目录中。您可以使用这个文件来重现安装。另外,复制此文件,根据需要进行修改,并使用得到的配置文件进行进一步安装。

流程

  1. 安装 RHEL。详情请参阅 从安装介质交互式安装 RHEL

    在安装过程中,创建一个具有管理员权限的用户。

  2. 完成安装并重启系统。
  3. 使用管理员帐户登录该系统。
  4. 将文件 /root/anaconda-ks.cfg 复制到您选择的位置。该文件包含用户和密码的信息。

    • 在终端显示文件内容:

      # cat /root/anaconda-ks.cfg
      Copy to Clipboard Toggle word wrap

      您可以复制输出并保存到您选择的其他文件中。

    • 要将文件复制到另一个位置,请使用文件管理器。请记住需要修改副本的权限,以便非 root 用户可读取该文件。
  5. 安装 pykickstart 软件包。

    # yum install pykickstart
    Copy to Clipboard Toggle word wrap
  6. 对您的 Kickstart 文件运行 ksvalidator

    $ ksvalidator -v RHEL8 /path/to/kickstart.ks
    Copy to Clipboard Toggle word wrap

    使用要验证的 Kickstart 文件的路径替换 /path/to/kickstart.ks

重要

验证工具并不能保证安装过程可以成功。它只检查语法是否正确,且该文件不包含已弃用的选项。它不会验证 Kickstart 文件的 %pre%post%packages 部分。

您可以使用 Kickstart 转换器工具转换成一个 RHEL 7 Kickstart 文件,用于 RHEL 8 或 9 安装,或者转换成一个 RHEL 8 Kickstart 文件,用于 RHEL 9 。有关工具以及如何使用它来转换 RHEL Kickstart 文件的详情,请参考 https://access.redhat.com/labs/kickstartconvert/

流程

  • 准备 kickstart 文件后,安装 pykickstart 软件包。

    # yum install pykickstart
    Copy to Clipboard Toggle word wrap
  • 对您的 Kickstart 文件运行 ksvalidator

    $ ksvalidator -v RHEL8 /path/to/kickstart.ks
    Copy to Clipboard Toggle word wrap

    使用要验证的 Kickstart 文件的路径替换 /path/to/kickstart.ks

重要

验证工具并不能保证安装过程可以成功。它只检查语法是否正确,且该文件不包含已弃用的选项。它不会验证 Kickstart 文件的 %pre%post%packages 部分。

10.2.4. 使用 Image Builder 创建自定义镜像

您可以使用 Red Hat Image Builder 为虚拟和云部署创建自定义系统镜像。

有关使用镜像构建器创建自定义镜像的更多信息,请参阅 制作自定义的 RHEL 系统镜像 文档。

在 Kickstart 文件就绪后,您可以使其用于目标系统上的安装。

10.3.1. 基于网络安装的端口

下表列出了必须在服务器上打开的端口,以便为每种基于网络的安装提供文件。

Expand
表 10.1. 基于网络安装的端口
使用的协议打开端口

HTTP

80

HTTPS

443

FTP

21

NFS

2049, 111, 20048

TFTP

69

10.3.2. 在 NFS 服务器上共享安装文件

您可以在 NFS 服务器上存储 Kickstart 脚本文件。将其存储在 NFS 服务器上使您能够从单个源安装多个系统,而无需对 Kickstart 文件使用物理介质。

先决条件

  • 您对本地网络上的 Red Hat Enterprise Linux 8 服务器有管理员级别的访问权限。
  • 要安装的系统可以连接到服务器。
  • 服务器上的防火墙允许来自您要安装的系统的连接。
重要

确保您在 inst.ksinst.repo 中使用不同的路径。当使用 NFS 托管 Kickstart 时,您不能使用相同的 nfs 共享来托管安装源。

流程

  1. 作为 root 运行以下命令安装 nfs-utils 软件包:

    # yum install nfs-utils
    Copy to Clipboard Toggle word wrap
  2. 将 Kickstart 文件复制到 NFS 服务器的目录中。
  3. 使用文本编辑器打开 /etc/exports 文件,并使用以下语法添加一行:

    /exported_directory/ clients
    Copy to Clipboard Toggle word wrap

    使用到包含 Kickstart 文件的目录的完整路径替换 /exported_directory/。要从这个 NFS 服务器安装计算机的主机名或 IP 地址替换 clients,如果您想允许任何可访问该 NFS 服务器的计算机都能使用该 ISO 镜像,则使用该系统所在的子网络访问该 ISO 镜像,或者使用星号(*)。有关此格式的详细信息,请参见 exports(5) 手册页。以下是一个基本配置,它使 /rhel8-install/ 目录以只读方式对所有客户端可用:

    /rhel8-install *
    Copy to Clipboard Toggle word wrap
  4. 保存 /etc/exports 文件并退出文本编辑器。
  5. 启动 nfs 服务:

    # systemctl start nfs-server.service
    Copy to Clipboard Toggle word wrap

    如果在更改 /etc/exports 文件前运行该服务,请输入以下命令以便运行的 NFS 服务器重新载入其配置:

    # systemctl reload nfs-server.service
    Copy to Clipboard Toggle word wrap

    Kickstart 文件现在可以通过 NFS 访问并准备用于安装。

注意

在指定 Kickstart 源时,使用 nfs: 协议、服务器的主机名或 IP 地址、冒号 (:) 以及包含该文件的目录内的路径。例如:如果服务器的主机名为 myserver.example.com,且您已将文件保存在 /rhel8-install/my-ks.cfg 中,指定 inst.ks=nfs:myserver.example.com:/rhel8-install/my-ks.cfg 作为安装源引导选项。

10.3.3. 在 HTTP 或 HTTPS 服务器上共享安装文件

您可以将 Kickstart 脚本文件存储在 HTTP 或 HTTPS 服务器上。在 HTTP 或 HTTPS 服务器中存储 Kickstart 文件可让您从一个源安装多个系统,而无需对 Kickstart 文件使用物理介质。

先决条件

  • 您对本地网络上的 Red Hat Enterprise Linux 8 服务器有管理员级别的访问权限。
  • 要安装的系统可以连接到服务器。
  • 服务器上的防火墙允许来自您要安装的系统的连接。

流程

  1. 要在 HTTP 上存储 Kickstart 文件,请安装 httpd 软件包:

    # yum install httpd
    Copy to Clipboard Toggle word wrap

    要在 HTTPS 上存储 Kickstart 文件,请安装 httpdmod_ssl 软件包:

    # yum install httpd mod_ssl
    Copy to Clipboard Toggle word wrap
    警告

    如果您的 Apache 网页服务器配置启用了 SSL 安全性,请确定您只启用 TLSv1 协议,并禁用 SSLv2 和 SSLv3。这是因为 POODLE SSL 漏洞(CVE-2014-3566)。如需更多信息,请参阅红帽知识库解决方案 解决 POODLE SSLv3.0 漏洞

    重要

    如果您使用带有自签名证书的 HTTPS 服务器,则必须使用 inst.noverifyssl 选项引导安装程序。

  2. 将 Kickstart 文件复制到 HTTP(S) 服务器的 /var/www/html/ 目录的子目录中。
  3. 启动 httpd 服务:

    # systemctl start httpd.service
    Copy to Clipboard Toggle word wrap

    Kickstart 文件现在可以访问并可用于安装。

    当指定 Kickstart 文件的位置时,请使用 http://https:// 作为协议、服务器的主机名或 IP 地址,以及 Kickstart 文件的路径(相对于 HTTP 服务器 root)。例如:如果您使用 HTTP,则服务器的主机名为 myserver.example.com,并且您已将 Kickstart 文件复制为 /var/www/html/rhel8-install/my-ks.cfg,将 http://myserver.example.com/rhel8-install/my-ks.cfg 指定为文件的位置。

10.3.4. 在 FTP 服务器上共享安装文件

您可以将 Kickstart 脚本文件存储在 FTP 服务器上。将脚本存储在 FTP 服务器上使您能够从单个源安装多个系统,而无需将物理介质用于 Kickstart 文件。

先决条件

  • 您对本地网络上的 Red Hat Enterprise Linux 8 服务器有管理员级别的访问权限。
  • 要安装的系统可以连接到服务器。
  • 服务器上的防火墙允许来自您要安装的系统的连接。

流程

  1. 安装 vsftpd 软件包。请作为 root 运行以下命令完成此步骤:

    # yum install vsftpd
    Copy to Clipboard Toggle word wrap
  2. 在文本编辑器中打开并编辑 /etc/vsftpd/vsftpd.conf 配置文件。

    1. anonymous_enable=NO 行改为 anonymous_enable=YES
    2. write_enable=YES 行改为 write_enable=NO
    3. 添加行 pasv_min_port=min_portpasv_max_port=max_port。使用被动模式下 FTP 服务器使用的端口范围替换 min_portmax_port,例如 1002110031

      在带有各种防火墙/NAT 设置的网络环境中,这个步骤可能是必要的。

    4. 可选:在您的配置中添加自定义更改。可用选项请查看 vsftpd.conf(5) 手册页。这个步骤假设使用了默认选项。

      警告

      如果在 vsftpd.conf 文件中配置了 SSL/TLS 安全性,请确保只启用 TLSv1 协议,并禁用 SSLv2 和 SSLv3。这是因为 POODLE SSL 漏洞(CVE-2014-3566)。如需更多信息,请参阅红帽知识库解决方案 解决 POODLE SSLv3.0 漏洞

  3. 配置服务器防火墙。

    1. 启用防火墙:

      # systemctl enable firewalld
      # systemctl start firewalld
      Copy to Clipboard Toggle word wrap
    2. 在您的防火墙中启用前一步中的 FTP 端口和端口范围:

      # firewall-cmd --add-port min_port-max_port/tcp --permanent
      # firewall-cmd --add-service ftp --permanent
      # firewall-cmd --reload
      Copy to Clipboard Toggle word wrap

      min_port-max_port 替换为您输入到 /etc/vsftpd/vsftpd.conf 配置文件的端口号。

  4. 将 Kickstart 文件复制到 FTP 服务器的 /var/ftp/ 目录或其子目录中。
  5. 请确定在文件中正确设置了正确的 SELinux 上下文和访问模式:

    # restorecon -r /var/ftp/your-kickstart-file.ks
    # chmod 444 /var/ftp/your-kickstart-file.ks
    Copy to Clipboard Toggle word wrap
  6. 启动 vsftpd 服务:

    # systemctl start vsftpd.service
    Copy to Clipboard Toggle word wrap

    如果在更改 /etc/vsftpd/vsftpd.conf 文件前运行该服务,重启该服务以载入经过编辑的文件:

    # systemctl restart vsftpd.service
    Copy to Clipboard Toggle word wrap

    在引导过程中启用 vsftpd 服务:

    # systemctl enable vsftpd
    Copy to Clipboard Toggle word wrap

    Kickstart 文件现在可以访问,并可用于同一网络中的系统安装。

    注意

    在配置安装源时,使用 ftp:// 作为协议、服务器的主机名或 IP 地址以及 Kickstart 文件的路径(相对于 FTP 服务器 root)。例如:如果服务器的主机名是 myserver.example.com,且您已将文件复制到 /var/ftp/my-ks.cfg 中,请指定 ftp://myserver.example.com/my-ks.cfg 作为安装源。

Kickstart 文件就绪后,就可以将其用于目标系统上的安装。

10.4.1. 在本地卷上共享安装文件

这个步骤描述了如何在要安装的系统中的卷中保存 Kickstart 脚本文件。这个方法可让您绕过其他系统的要求。

先决条件

  • 您有一个可移动到要安装的机器上的驱动器,如 USB 盘。
  • 驱动器包含可由安装程序读取的分区。支持的类型有 ext2ext3ext4xfsfat
  • 该驱动器连接到系统,其卷已挂载。

流程

  1. 列出卷信息并记录您想要复制 Kickstart 文件的卷 UUID。

    # lsblk -l -p -o name,rm,ro,hotplug,size,type,mountpoint,uuid
    Copy to Clipboard Toggle word wrap
  2. 导航到卷中的文件系统。
  3. 将 Kickstart 文件复制到这个文件系统中。
  4. 记录以后要与 inst.ks= 选项一起使用的字符串。这个字符串采用 hd:UUID=volume-UUID: path/to/kickstart-file.cfg 的形式。请注意,该路径相对于文件系统根目录,而不是文件系统层次结构的 / root。使用之前记录的 UUID 替换 volume-UUID
  5. 卸载所有驱动器卷:

    # umount /dev/xyz ...
    Copy to Clipboard Toggle word wrap

    在命令中添加所有卷,用空格分开。

在要安装的系统中特殊命名的卷的根目录中会出现一个名为 Kickstart 文件。这可让您避开另一个系统的需要,让安装程序自动载入该文件。

先决条件

  • 您有一个可移动到要安装的机器上的驱动器,如 USB 盘。
  • 驱动器包含可由安装程序读取的分区。支持的类型有 ext2ext3ext4xfsfat
  • 该驱动器连接到系统,其卷已挂载。

流程

  1. 列出您要将 Kickstart 文件复制到的卷信息。

    # lsblk -l -p
    Copy to Clipboard Toggle word wrap
  2. 导航到卷中的文件系统。
  3. 将 Kickstart 文件复制到文件系统的根目录下。
  4. 将 Kickstart 文件重命名为 ks.cfg
  5. 将卷重命名为 OEMDRV:

    • 对于 ext2ext3ext4 文件系统:

      # e2label /dev/xyz OEMDRV
      Copy to Clipboard Toggle word wrap
    • 对于 XFS 文件系统:

      # xfs_admin -L OEMDRV /dev/xyz
      Copy to Clipboard Toggle word wrap

    使用卷块设备的路径替换 /dev/xyz

  6. 卸载所有驱动器卷:

    # umount /dev/xyz ...
    Copy to Clipboard Toggle word wrap

    在命令中添加所有卷,用空格分开。

10.5. 启动 Kickstart 安装

您可以以多种方式启动 Kickstart 安装:

  • 通过在 PXE 引导中自动编辑引导选项。
  • 通过使用特定名称在卷中自动提供文件。

您可以使用 Red Hat Content Delivery Network (CDN)注册 RHEL。CDN 是地理上分散的一系列 Web 服务器。例如,这些服务器使用有效的订阅为 RHEL 主机提供软件包和更新。

在安装过程中,从 CDN 注册并安装 RHEL 有以下优点:

  • 在安装后立即为最新的系统使用最新的软件包,并为
  • 对连接到 Red Hat Insights 和启用系统目提供集成的支持。

10.5.1. 使用 PXE 自动启动 Kickstart 安装

AMD64、Intel 64 和 64 位 ARM 系统以及 IBM Power Systems 服务器能够使用 PXE 服务器引导。当您配置 PXE 服务器时,可以在引导装载程序配置文件中添加引导选项,以便您可以自动启动安装。使用这个方法,可以完全自动化安装,包括引导过程。

这个过程旨在作为一般参考。具体步骤因您的系统架构有所不同,且不是所有架构上都提供所有的选项(例如,在 64 位 IBM Z 上无法使用 PXE 引导)。

先决条件

  • 您有一个准备好的 Kickstart 文件,位于要安装的系统可访问的位置。
  • 您有一个可用于引导系统并开始安装的 PXE 服务器。

流程

  1. 打开 PXE 服务器中的引导装载程序配置文件,并在适当的行中添加 inst.ks= 引导选项。该文件的名称及其句法取决于您系统的架构和硬件:

    • 在使用 BIOS 的 AMD64 和 Intel 64 系统中,该文件名称可以是 default,或取决于您的系统 IP 地址。在这种情况下,在安装条目的附加行中添加 inst.ks= 选项。在配置文件中添加的行示例类似如下:

      append initrd=initrd.img inst.ks=http://10.32.5.1/mnt/archive/RHEL-8/8.x/x86_64/kickstarts/ks.cfg
      Copy to Clipboard Toggle word wrap
    • 在使用 GRUB 引导装载程序(带有 UEFI 固件的 AMD64、Intel 64 和 64 位 ARM 系统系统,以及 IBM Power Systems 服务器)上,文件名称为 grub.cfg。在这个文件中,在安装条目的 kernel 行中添加 inst.ks= 选项。该配置文件 kernel 行示例类似如下:

      kernel vmlinuz inst.ks=http://10.32.5.1/mnt/archive/RHEL-8/8.x/x86_64/kickstarts/ks.cfg
      Copy to Clipboard Toggle word wrap
  2. 从网络服务器引导安装。

    现在开始使用在 Kickstart 文件中指定的安装选项安装。如果 Kickstart 文件有效并包含全部所需命令,则安装将是全自动的。

注意

如果您已在启用了 UEFI 安全引导的系统中安装了 Red Hat Enterprise Linux Beta 版本,然后将 Beta 公钥添加到系统的 Machine Owner Key (MOK) 列表中。

10.5.2. 使用本地卷自动启动 Kickstart 安装

您可以通过在指定标记的存储卷上加上特定名称的 Kickstart 文件启动 Kickstart 安装。

先决条件

  • 您有一个带有标签 OEMDRV 的卷,以及 root 中以 ks.cfg 形式存在的一个 Kickstart 文件。
  • 安装程序启动时,包含此卷的驱动器在系统上可用。

流程

  1. 使用本地介质(CD、DVD 或者 USB 闪存驱动器)引导系统。
  2. 在 boot 提示符后指定所需的引导选项。

    1. 如果所需的存储库位于网络位置,您可能需要使用 ip= 选项配置网络。在没有这个选项时,安装程序会默认尝试使用 DHCP 协议配置所有网络设备。
    2. 要访问安装所需软件包的软件源,您可能需要添加 inst.repo= 选项。如果您没有指定这个选项,则必须在 Kickstart 文件中指定安装源。

      有关安装源的更多信息,请参阅 用于安装程序配置和流控制的 Kickstart 命令

  3. 通过确认您添加的引导选项启动安装。

    现在开始安装,Kickstart 文件会被自动探测,并用来自动启动 Kickstart 安装。

注意

如果您已在启用了 UEFI 安全引导的系统中安装了 Red Hat Enterprise Linux Beta 版本,然后将 Beta 公钥添加到系统的 Machine Owner Key (MOK) 列表中。有关 UEFI 安全引导和 Red Hat Enterprise Linux Beta 版本的更多信息,请参阅 UEFI 安全引导和 Beta 版本要求

您可以使用 SFTP、FTPS 或 FTP 服务器将 RHEL 安装到 LPAR 。

流程

  1. 以具有足够特权的用户身份登录 IBM Z 硬件管理控制台(HMC)或Support Element(SE),来将新的操作系统安装到 LPAR。
  2. Systems 选项卡中,选择您要使用的大型机,然后在 Partitions 选项卡中选择您要安装到的 LPAR。
  3. 在屏幕底部,在 Daily 下找到 Operating System Messages。双击 Operating System Messages 会显示将出现 Linux 引导信息的文本控制台。
  4. 双击 Load from Removable Media or Server
  5. 在以下对话框中,选择 SFTP/FTPS/FTP Server,并输入以下信息:

    • Host Computer - 要从其安装的 FTP 服务器的主机名或 IP 地址,例如 ftp.redhat.com
    • User ID - FTP 服务器上的用户名。或者,指定 anonymous。
    • Password - 您的密码。如果以匿名身份登录,使用您的电子邮件地址。
    • File location (optional) - FTP 服务器上保存用于 IBM Z 的 Red Hat Enterprise Linux 的目录,如 /rhel/s390x/
  6. Continue
  7. 在随后的对话框中,保留默认选择的 generic.ins,然后点 Continue

当使用已准备好的 DASD 将 Red Hat Enterprise Linux 安装到 LPAR 时使用此流程。

流程

  1. 以具有足够特权的用户身份登录 IBM Z 硬件管理控制台(HMC)或Support Element(SE),来将新的操作系统安装到 LPAR。
  2. Systems 选项卡中,选择您要使用的大型机,然后在 Partitions 选项卡中选择您要安装到的 LPAR。
  3. 在屏幕底部,在 Daily 下找到 Operating System Messages。双击 Operating System Messages 会显示将出现 Linux 引导信息的文本控制台。
  4. 双击 Load
  5. 在随后的对话框中,选择 Normal 作为 Load type
  6. 在 Load address,使用 DASD 的设备号。
  7. OK按钮。

当使用准备好的连接 FCP 的 SCSI 磁盘将 Red Hat Enterprise Linux 安装到 LPAR 时,使用此流程。

流程

  1. 以具有足够特权的用户身份登录 IBM Z 硬件管理控制台(HMC)或Support Element(SE),来将新的操作系统安装到 LPAR。
  2. Systems 选项卡中,选择您要使用的大型机,然后在 Partitions 选项卡中选择您要安装到的 LPAR。
  3. 在屏幕底部,在 Daily 下找到 Operating System Messages。双击 Operating System Messages 会显示将出现 Linux 引导信息的文本控制台。
  4. 双击 Load
  5. 在随后的对话框中,选择 SCSI 作为 Load type
  6. 输入与 SCSI 磁盘连接的 FCP 通道的设备号来作为 Load address
  7. 以 16 位十六进制数填写包含磁盘的存储系统的 WWPN,来作为 World wide port name
  8. Logical unit number 中输入 16 位十六进制数字到磁盘的 LUN。
  9. Boot record logical block address 设置为 0Operating system specific load parameters 为空。
  10. OK按钮。

这需要一个连接到 FCP-to-SCSI 网桥的 SCSI DVD 驱动器,该网接又连接到 IBM Z 机器中的 FCP 适配器。必须配置这个 FCP 适配器并使其可用。

流程

  1. 以具有足够特权的用户身份登录 IBM Z 硬件管理控制台(HMC)或Support Element(SE),来将新的操作系统安装到 LPAR。
  2. 在 Systems 选项卡中,选择您要使用的大型机,然后在 Partitions 选项卡中选择您要安装到的 LPAR。
  3. 在 Daily 屏幕底部,找到操作系统信息。双击 Operating System Messages 会显示将出现 Linux 引导信息的文本控制台。
  4. 将用于 64 位 IBM Z 的 Red Hat Enterprise Linux DVD 插入到 DVD 驱动器中。
  5. 双击 Load
  6. 在随后的对话框中,选择 SCSI 作为 Load type
  7. Load address 中输入与 FCP-to-SCSI 网桥连接的 FCP 渠道的设备号。
  8. World wide port name 中输入 16 位十六进制数字作为 FCP-to-SCSI 桥接的 WWPN。
  9. Logical unit number 中输入 16 位十六进制数字作为 DVD 驱动器的 LUN。
  10. Boot program selector 中输入 1 来选择 Red Hat Enterprise Linux for 64 位 IBM Z DVD 的引导条目。
  11. Boot record logical block address 设置为 0Operating system specific load parameters 为空。
  12. OK按钮。

当在 z/VM 中安装时,您可以使用以下设备引导:

  • z/VM 虚拟读取器
  • 使用 zipl 引导装载程序准备的 DASD 或者连接了 FCP 的 SCSI 磁盘
  • 附加 FCP 的 SCSI DVD 驱动器
10.5.4.1. 使用 z/VM 读卡器引导 RHEL 安装

您可以从 z/VM 读卡器引导。

流程

  1. 如有必要,将包含 z/VM TCP/IP 工具的设备添加到 CMS 磁盘列表中。例如:

    cp link tcpmaint 592 592
    acc 592 fm
    Copy to Clipboard Toggle word wrap

    用任何 FILEMODE 字母替换 fm

  2. 对于到 FTPS 服务器的连接,请输入:

    ftp <host> (secure
    Copy to Clipboard Toggle word wrap

    其中 host 是提供引导镜像(kernel.imginitrd.img)的 FTP 服务器的主机名或 IP 地址。

  3. 登录并执行以下命令。如果要覆盖现有的 kernel.imginitrd.imggeneric.prm 或者 redhat.exec 文件,使用 (repl 选项:

    cd /location/of/install-tree/images/
    ascii
    get generic.prm (repl
    get redhat.exec (repl
    locsite fix 80
    binary
    get kernel.img (repl
    get initrd.img (repl
    quit
    Copy to Clipboard Toggle word wrap
  4. 可选:使用 CMS 命令 filelist 显示收到的文件及其格式,以检查文件是否已正确传输。kernel.imginitrd.img 有在 Format 列中用 F 表示,在 Lrecl 列中记录长度为 80 的固定记录长度格式很重要。例如:

    VMUSER FILELIST A0 V 169 Trunc=169 Size=6 Line=1 Col=1 Alt=0
    Cmd Filename	Filetype	Fm	Format	Lrecl	Records	Blocks	Date	Time
    REDHAT	EXEC		B1	V	22	1 	1	4/15/10	9:30:40
    GENERIC	PRM		B1	V	44	1	1	4/15/10	9:30:32
    INITRD	IMG		B1	F	80	118545	2316	4/15/10	9:30:25
    KERNEL	IMG		B1	F	80	74541	912	4/15/10	9:30:17
    Copy to Clipboard Toggle word wrap

    PF3 键退出 filelist 并返回到 CMS 提示符。

  5. 根据需要自定义 generic.prm 中的引导参数。详情请参阅 自定义引导参数

    配置存储和网络设备的另外一种方法是使用 CMS 配置文件。在这种情况下,把 CMSDASD=CMSCONFFILE= 参数添加到 generic.prm

  6. 最后,执行 REXX 脚本 redhat.exec 来引导安装程序:

    redhat
    Copy to Clipboard Toggle word wrap
10.5.4.2. 使用准备的 DASD 引导 RHEL 安装

执行以下步骤使用准备的 DASD:

流程

  • 从准备的 DASD 引导,并选择指向 Red Hat Enterprise Linux 安装程序的 zipl 引导菜单条目。使用以下命令格式:

    cp ipl DASD_device_number loadparm boot_entry_number
    Copy to Clipboard Toggle word wrap

    使用引导设备的设备号替换 DASD_device_number,使用这个设备的 zipl 配置菜单替换boot_entry_number。例如:

    cp ipl eb1c loadparm 0
    Copy to Clipboard Toggle word wrap

执行以下步骤来从准备好的连接 FCP 的 SCSI 磁盘引导:

流程

  1. 配置 z/VM 的 SCSI 引导加载程序,来访问 FCP 存储区域网络中准备好的 SCSI 磁盘。选择准备的 zipl 引导菜单中指向 Red Hat Enterprise Linux 安装程序的条目。使用以下命令格式:

    cp set loaddev portname WWPN lun LUN bootprog boot_entry_number
    Copy to Clipboard Toggle word wrap

    使用存储系统的全球端口名称和带有磁盘逻辑单元号的 LUN 来替换 WWPN。16 位十六进制数必须分成两对,每对八位数。例如:

    cp set loaddev portname 50050763 050b073d lun 40204011 00000000 bootprog 0
    Copy to Clipboard Toggle word wrap
  2. 可选:使用以下命令确认您的设置:

    query loaddev
    Copy to Clipboard Toggle word wrap
  3. 使用以下命令引导与包含磁盘的存储系统连接的 FCP 设备:

    cp ipl FCP_device
    Copy to Clipboard Toggle word wrap

    例如:

    cp ipl fc00
    Copy to Clipboard Toggle word wrap

执行以下步骤使用附加的 SCSI DVD 驱动器:

先决条件

  1. 这需要一个附加到 FCP-to-SCSI 桥接的 SCSI DVD 驱动器,该桥接又连接到您 64 位 IBM Z 中的 FCP 适配器。FCP 适配器必须在 z/VM 下配置并可用。

流程

  1. 将用于 64 位 IBM Z 的 Red Hat Enterprise Linux DVD 插入到 DVD 驱动器中。
  2. 配置 z/VM 的 SCSI 引导装载程序以访问 FCP 存储区域网络中的 DVD 驱动器,并为用于 64 位 IBM Z 的 Red Hat Enterprise Linux DVD 上的引导条目指定 1。使用以下命令格式:

    cp set loaddev portname WWPN lun FCP_LUN bootprog 1
    Copy to Clipboard Toggle word wrap

    使用 FCP-to-SCSI 桥接的 WWPN 替换 WWPN,,使用 DVD 驱动器的 LUN 替换 FCP_LUN。16 位十六进制数必须分成两对,每对八个字符。例如:

    cp set loaddev portname 20010060 eb1c0103 lun 00010000 00000000 bootprog 1
    Copy to Clipboard Toggle word wrap
  3. 可选:使用以下命令确认您的设置:

    cp query loaddev
    Copy to Clipboard Toggle word wrap
  4. 使用 FCP-to-SCSI 桥接连接的 FCP 设备中 IPL。

    cp ipl FCP_device
    Copy to Clipboard Toggle word wrap

    例如:

    cp ipl fc00
    Copy to Clipboard Toggle word wrap

10.5.5. 安装过程中的控制台和日志记录

在主界面外,Red Hat Enterprise Linux 安装程序使用 tmux 终端显示和控制几个窗口。每个窗口都有不同的目的,它们会显示几个不同的日志,可用于在安装过程中排除问题。其中一个窗口提供带有 root 权限的互动 shell 提示符,除非使用一个引导选项或一个 Kickstart 命令特别禁用了这个提示符。

终端多路器在虚拟控制台 1 中运行。要从实际安装环境切换到 tmux,按Ctrl+Alt+F1。要回到在虚拟控制台 6 中运行的主安装界面,按 Ctrl+Alt+F6。在文本模式安装过程中,在虚拟控制台 1 (tmux)中启动,切换到控制台 6 将打开 shell 提示符而不是图形界面。

运行 tmux 的控制台有五个可用的窗口; 下表中描述了它们的内容以及键盘快捷键。请注意,键盘快捷键有两个部分:首先按 Ctrl+b 键,然后释放这两个键,再按您想要使用的窗口的数字键。

您还可以使用 Ctrl+b nAlt+ TabCtrl+b p 切换到下一个或前一个 tmux 窗口。

Expand
表 10.2. 可用的 tmux 窗口
快捷键内容

Ctrl+b 1

安装程序主窗口。包含基于文本的提示(在文本模式安装或者使用 VNC 直接模式时),以及一些调试信息。

Ctrl+b 2

root 权限的互动 shell 提示符。

Ctrl+b 3

安装日志; 显示信息保存在 /tmp/anaconda.log 中。

Ctrl+b 4

存储日志; 显示与存储设备和配置相关的消息,保存在 /tmp/storage.log 中。

Ctrl+b 5

程序日志; 显示安装过程中执行的实用程序的信息,保存在 /tmp/program.log 中。

第 11 章 高级配置选项

11.1. 配置系统目的

您可以使用系统目的记录 Red Hat Enterprise Linux 8 系统的预期使用。设置系统目的可让授权服务器自动附加最合适的订阅。这部分论述了如何使用 Kickstart 配置系统目的。

优点包括:

  • 为系统管理员和商业操作提供深入系统级的信息。
  • 降低管理成本以决定系统为什么及其预期目的。
  • 改进了 Subscription Manager 自动附加的客户体验,并自动发现并协调系统使用。

11.1.1. 概述

可以用以下方法之一输入系统目的:

  • 创建镜像期间
  • 在 GUI 安装过程中,使用 Connect to Red Hat 屏幕注册您的系统并附加您的红帽订阅
  • 在 Kickstart 安装过程中,使用 syspurpose Kickstart 命令
  • 在安装后,使用 syspurpose 命令行 ( CLI)工具进行

要记录系统的预期目的,您可以配置以下系统目的组件。注册时授权服务器会使用所选值为您的系统附加最合适的订阅。

Role
  • Red Hat Enterprise Linux Server
  • Red Hat Enterprise Linux Workstation
  • Red Hat Enterprise Linux Compute 节点
服务等级协议
  • Premium(高级)
  • Standard(标准)
  • Self-Support(自助)
使用
  • 生产环境
  • 开发/测试
  • 灾难恢复

11.1.2. 在 Kickstart 文件中配置系统目的

按照以下步骤在安装过程中配置系统目的。为此,请在 Kickstart 配置文件中使用 syspurpose Kickstart 命令。

尽管系统目的是 Red Hat Enterprise Linux 安装程序的可选功能,但我们强烈建议您将系统目的配置为自动附加最合适的订阅。

注意

您还可以在安装完成后启用系统目的。为此,请使用 syspurpose 命令行工具。syspurpose 工具命令与 syspurpose Kickstart 命令不同。

以下操作可用于 syspurpose Kickstart 命令:

role

设置系统预期的角色。这个操作使用以下格式:

syspurpose --role=
Copy to Clipboard Toggle word wrap

分配的角色可以是:

  • Red Hat Enterprise Linux Server
  • Red Hat Enterprise Linux Workstation
  • Red Hat Enterprise Linux Compute 节点
SLA

设置系统的预期 SLA。这个操作使用以下格式:

syspurpose --sla=
Copy to Clipboard Toggle word wrap

分配的 sla 可以是:

  • Premium(高级)
  • Standard(标准)
  • Self-Support(自助)
usage

设置系统的预期用法。这个操作使用以下格式:

syspurpose --usage=
Copy to Clipboard Toggle word wrap

分配的使用量可以是:

  • Production
  • Development/Test
  • Disaster Recovery
addon

任何其他分层的产品或功能.要添加多个项目,请多次指定 --addon,每个分层产品/功能指定一次。这个操作使用以下格式:

syspurpose --addon=
Copy to Clipboard Toggle word wrap

11.2. 准备一个 UEFI HTTP 安装源

作为本地网络上服务器的管理员,您可以配置 HTTP 服务器,以便为网络中的其他系统启用 HTTP 引导和网络安装。

11.2.1. 网络安装概述

网络安装允许您将 Red Hat Enterprise Linux 安装到可访问安装服务器的系统。网络安装至少需要两个系统:

服务器
运行 DHCP 服务器、HTTP、HTTPS、FTP 或 NFS 的服务器以及 PXE 引导情况下的TFTP 服务器。虽然每个服务器可以运行在不同的物理系统上,但本节中的流程假设单个系统正在运行所有服务器。
客户端
要安装 Red Hat Enterprise Linux 的系统。安装开始后,客户端会查询 DHCP 服务器,从 HTTP 或 TFTP 服务器接收引导文件,并从 HTTP、HTTPS、FTP 或者 NFS 服务器下载安装镜像。与其它安装方法不同,客户端不需要任何物理引导介质来启动安装。

要从网络引导客户端,请在固件中或客户端上的快速引导菜单中启用网络引导。在某些硬件上,从网络引导的选项可能被禁用了,或者不可用。

准备使用 HTTP 或 PXE 从网络安装 Red Hat Enterprise Linux 的工作流步骤如下:

流程

  1. 将安装 ISO 镜像或者安装树导出到 NFS、HTTPS、HTTP 或者 FTP 服务器中。
  2. 配置 HTTP 或 TFTP 服务器以及 DHCP 服务器,并在服务器上启动 HTTP 或 TFTP 服务。
  3. 引导客户端并开始安装。

您可以在以下网络引导协议之间进行选择:

HTTP
如果您的客户端 UEFI 支持,红帽建议使用 HTTP 引导。HTTP 引导通常更加可靠。
PXE (TFTP)
客户端系统更广泛地支持 PXE 引导,但通过此协议发送引导文件可能会很慢,并导致超时失败。

11.2.2. 为网络引导配置 DHCPv4 服务器

在您的服务器上启用 DHCP 版本 4 (DHCPv4)服务,以便它可以提供网络引导功能。

先决条件

  • 您通过 IPv4 协议准备网络安装。

    对于 IPv6 ,请参阅 为网络引导配置 DHCPv6 服务器

  • 查找服务器的网络地址。

    在以下示例中,服务器有一个具有此配置的网卡:

    IPv4 地址
    192.168.124.2/24
    IPv4 网关
    192.168.124.1

流程

  1. 安装 DHCP 服务器:

    yum install dhcp-server
    Copy to Clipboard Toggle word wrap
  2. 设置 DHCPv4 服务器。在 /etc/dhcp/dhcpd.conf 文件中输入以下配置。替换地址以匹配您的网卡。

    option architecture-type code 93 = unsigned integer 16;
    
    subnet 192.168.124.0 netmask 255.255.255.0 {
      option routers 192.168.124.1;
      option domain-name-servers 192.168.124.1;
      range 192.168.124.100 192.168.124.200;
      class "pxeclients" {
        match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
        next-server 192.168.124.2;
              if option architecture-type = 00:07 {
                filename "redhat/EFI/BOOT/BOOTX64.EFI";
              }
              else {
                filename "pxelinux/pxelinux.0";
              }
      }
      class "httpclients" {
        match if substring (option vendor-class-identifier, 0, 10) = "HTTPClient";
        option vendor-class-identifier "HTTPClient";
        filename "http://192.168.124.2/redhat/EFI/BOOT/BOOTX64.EFI";
      }
    }
    Copy to Clipboard Toggle word wrap
  3. 启动 DHCPv4 服务:

    # systemctl enable --now dhcpd
    Copy to Clipboard Toggle word wrap

11.2.3. 为网络引导配置 DHCPv6 服务器

在您的服务器上启用 DHCP 版本 6 (DHCPv4)服务,以便它可以提供网络引导功能。

先决条件

  • 您通过 IPv6 协议准备网络安装。

    对于 IPv4 ,请参阅 为网络引导配置 DHCPv4 服务器

  • 查找服务器的网络地址。

    在以下示例中,服务器有一个具有此配置的网卡:

    IPv6 地址
    fd33:eb1b:9b36::2/64
    IPv6 网关
    fd33:eb1b:9b36::1

流程

  1. 安装 DHCP 服务器:

    yum install dhcp-server
    Copy to Clipboard Toggle word wrap
  2. 设置 DHCPv6 服务器。在 /etc/dhcp/dhcpd6.conf 文件中输入以下配置。替换地址以匹配您的网卡。

    option dhcp6.bootfile-url code 59 = string;
    option dhcp6.vendor-class code 16 = {integer 32, integer 16, string};
    
    subnet6 fd33:eb1b:9b36::/64 {
            range6 fd33:eb1b:9b36::64 fd33:eb1b:9b36::c8;
    
            class "PXEClient" {
                    match substring (option dhcp6.vendor-class, 6, 9);
            }
    
            subclass "PXEClient" "PXEClient" {
                    option dhcp6.bootfile-url "tftp://[fd33:eb1b:9b36::2]/redhat/EFI/BOOT/BOOTX64.EFI";
            }
    
            class "HTTPClient" {
                    match substring (option dhcp6.vendor-class, 6, 10);
            }
    
            subclass "HTTPClient" "HTTPClient" {
                    option dhcp6.bootfile-url "http://[fd33:eb1b:9b36::2]/redhat/EFI/BOOT/BOOTX64.EFI";
                    option dhcp6.vendor-class 0 10 "HTTPClient";
            }
    }
    Copy to Clipboard Toggle word wrap
  3. 启动 DHCPv6 服务:

    # systemctl enable --now dhcpd6
    Copy to Clipboard Toggle word wrap
  4. 如果 DHCPv6 数据包被防火墙中的 RP 过滤器丢弃了,请检查其日志。如果日志包含 rpfilter_DROP 条目,请使用 /etc/firewalld/firewalld.conf 文件中的以下配置禁用过滤器:

    IPv6_rpfilter=no
    Copy to Clipboard Toggle word wrap

11.2.4. 为 HTTP 引导配置 HTTP 服务器

您必须在服务器上安装并启用 httpd 服务,以便服务器可以在网络上提供 HTTP 引导资源。

先决条件

  • 查找服务器的网络地址。

    在以下示例中,服务器有一个 IPv4 地址为 192.168.124.2 的网卡。

流程

  1. 安装 HTTP 服务器:

    # yum install httpd
    Copy to Clipboard Toggle word wrap
  2. 创建 /var/www/html/redhat/ 目录:

    # mkdir -p /var/www/html/redhat/
    Copy to Clipboard Toggle word wrap
  3. 下载 RHEL DVD ISO 文件。请参阅 所有 Red Hat Enterprise Linux 下载
  4. 为 ISO 文件创建一个挂载点:

    # mkdir -p /var/www/html/redhat/iso/
    Copy to Clipboard Toggle word wrap
  5. 挂载 ISO 文件:

    # mount -o loop,ro -t iso9660 path-to-RHEL-DVD.iso /var/www/html/redhat/iso
    Copy to Clipboard Toggle word wrap
  6. 将引导装载程序、内核和 initramfs 从挂载的 ISO 文件复制到 HTML 目录中:

    # cp -r /var/www/html/redhat/iso/images /var/www/html/redhat/
    # cp -r /var/www/html/redhat/iso/EFI /var/www/html/redhat/
    Copy to Clipboard Toggle word wrap
  7. 使引导装载程序配置可编辑:

    # chmod 644 /var/www/html/redhat/EFI/BOOT/grub.cfg
    Copy to Clipboard Toggle word wrap
  8. 编辑 /var/www/html/redhat/EFI/BOOT/grub.cfg 文件,并将其内容替换为以下内容:

    set default="1"
    
    function load_video {
      insmod efi_gop
      insmod efi_uga
      insmod video_bochs
      insmod video_cirrus
      insmod all_video
    }
    
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_gpt
    insmod ext2
    
    set timeout=60
    # END /etc/grub.d/00_header #
    
    search --no-floppy --set=root -l 'RHEL-9-3-0-BaseOS-x86_64'
    
    # BEGIN /etc/grub.d/10_linux #
    menuentry 'Install Red Hat Enterprise Linux 9.3' --class fedora --class gnu-linux --class gnu --class os {
        linuxefi ../../images/pxeboot/vmlinuz inst.repo=http://192.168.124.2/redhat/iso quiet
        initrdefi ../../images/pxeboot/initrd.img
    }
    menuentry 'Test this media & install Red Hat Enterprise Linux 9.3' --class fedora --class gnu-linux --class gnu --class os {
        linuxefi ../../images/pxeboot/vmlinuz inst.repo=http://192.168.124.2/redhat/iso quiet
        initrdefi ../../images/pxeboot/initrd.img
    }
    submenu 'Troubleshooting -->' {
        menuentry 'Install Red Hat Enterprise Linux 9.3 in text mode' --class fedora --class gnu-linux --class gnu --class os {
       	 linuxefi ../../images/pxeboot/vmlinuz inst.repo=http://192.168.124.2/redhat/iso inst.text quiet
       	 initrdefi ../../images/pxeboot/initrd.img
        }
        menuentry 'Rescue a Red Hat Enterprise Linux system' --class fedora --class gnu-linux --class gnu --class os {
       	 linuxefi ../../images/pxeboot/vmlinuz inst.repo=http://192.168.124.2/redhat/iso inst.rescue quiet
       	 initrdefi ../../images/pxeboot/initrd.img
        }
    }
    Copy to Clipboard Toggle word wrap

    在这个文件中,替换以下字符串:

    rhel-9-3-0-BaseOS-x86_64Red Hat Enterprise Linux 9.3
    编辑版本号,以使其与您下载的 RHEL 版本匹配。
    192.168.124.2
    使用服务器的 IP 地址替换。
  9. 使 EFI 引导文件可执行:

    # chmod 755 /var/www/html/redhat/EFI/BOOT/BOOTX64.EFI
    Copy to Clipboard Toggle word wrap
  10. 在防火墙中打开端口,以允许 HTTP (80)、DHCP (67, 68)和 DHCPv6 (546, 547)流量:

    # firewall-cmd --zone public \
                   --add-port={80/tcp,67/udp,68/udp,546/udp,547/udp}
    Copy to Clipboard Toggle word wrap

    这个命令启用了临时访问,直到下次服务器重启为止。

  11. 可选:若要启用永久访问权限,可在 命令中添加 --permanent 选项。
  12. 重新载入防火墙规则:

    # firewall-cmd --reload
    Copy to Clipboard Toggle word wrap
  13. 启动 HTTP 服务器:

    # systemctl enable --now httpd
    Copy to Clipboard Toggle word wrap
  14. 创建 html 目录,并使其内容可读和可执行:

    # chmod -cR u=rwX,g=rX,o=rX /var/www/html
    Copy to Clipboard Toggle word wrap
  15. 恢复 html 目录的 SELinux 上下文:

    # restorecon -FvvR /var/www/html
    Copy to Clipboard Toggle word wrap

第 12 章 准备一个 PXE 安装源

您必须在 PXE 服务器上配置 TFTP 和 DHCP ,以启用 PXE 引导和网络安装。

12.1. 网络安装概述

网络安装允许您将 Red Hat Enterprise Linux 安装到可访问安装服务器的系统。网络安装至少需要两个系统:

服务器
运行 DHCP 服务器、HTTP、HTTPS、FTP 或 NFS 的服务器以及 PXE 引导情况下的TFTP 服务器。虽然每个服务器可以运行在不同的物理系统上,但本节中的流程假设单个系统正在运行所有服务器。
客户端
要安装 Red Hat Enterprise Linux 的系统。安装开始后,客户端会查询 DHCP 服务器,从 HTTP 或 TFTP 服务器接收引导文件,并从 HTTP、HTTPS、FTP 或者 NFS 服务器下载安装镜像。与其它安装方法不同,客户端不需要任何物理引导介质来启动安装。

要从网络引导客户端,请在固件中或客户端上的快速引导菜单中启用网络引导。在某些硬件上,从网络引导的选项可能被禁用了,或者不可用。

准备使用 HTTP 或 PXE 从网络安装 Red Hat Enterprise Linux 的工作流步骤如下:

流程

  1. 将安装 ISO 镜像或者安装树导出到 NFS、HTTPS、HTTP 或者 FTP 服务器中。
  2. 配置 HTTP 或 TFTP 服务器以及 DHCP 服务器,并在服务器上启动 HTTP 或 TFTP 服务。
  3. 引导客户端并开始安装。

您可以在以下网络引导协议之间进行选择:

HTTP
如果您的客户端 UEFI 支持,红帽建议使用 HTTP 引导。HTTP 引导通常更加可靠。
PXE (TFTP)
客户端系统更广泛地支持 PXE 引导,但通过此协议发送引导文件可能会很慢,并导致超时失败。

12.2. 为网络引导配置 DHCPv4 服务器

在您的服务器上启用 DHCP 版本 4 (DHCPv4)服务,以便它可以提供网络引导功能。

先决条件

  • 您通过 IPv4 协议准备网络安装。

    对于 IPv6 ,请参阅 为网络引导配置 DHCPv6 服务器

  • 查找服务器的网络地址。

    在以下示例中,服务器有一个具有此配置的网卡:

    IPv4 地址
    192.168.124.2/24
    IPv4 网关
    192.168.124.1

流程

  1. 安装 DHCP 服务器:

    yum install dhcp-server
    Copy to Clipboard Toggle word wrap
  2. 设置 DHCPv4 服务器。在 /etc/dhcp/dhcpd.conf 文件中输入以下配置。替换地址以匹配您的网卡。

    option architecture-type code 93 = unsigned integer 16;
    
    subnet 192.168.124.0 netmask 255.255.255.0 {
      option routers 192.168.124.1;
      option domain-name-servers 192.168.124.1;
      range 192.168.124.100 192.168.124.200;
      class "pxeclients" {
        match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
        next-server 192.168.124.2;
              if option architecture-type = 00:07 {
                filename "redhat/EFI/BOOT/BOOTX64.EFI";
              }
              else {
                filename "pxelinux/pxelinux.0";
              }
      }
      class "httpclients" {
        match if substring (option vendor-class-identifier, 0, 10) = "HTTPClient";
        option vendor-class-identifier "HTTPClient";
        filename "http://192.168.124.2/redhat/EFI/BOOT/BOOTX64.EFI";
      }
    }
    Copy to Clipboard Toggle word wrap
  3. 启动 DHCPv4 服务:

    # systemctl enable --now dhcpd
    Copy to Clipboard Toggle word wrap

12.3. 为网络引导配置 DHCPv6 服务器

在您的服务器上启用 DHCP 版本 6 (DHCPv4)服务,以便它可以提供网络引导功能。

先决条件

  • 您通过 IPv6 协议准备网络安装。

    对于 IPv4 ,请参阅 为网络引导配置 DHCPv4 服务器

  • 查找服务器的网络地址。

    在以下示例中,服务器有一个具有此配置的网卡:

    IPv6 地址
    fd33:eb1b:9b36::2/64
    IPv6 网关
    fd33:eb1b:9b36::1

流程

  1. 安装 DHCP 服务器:

    yum install dhcp-server
    Copy to Clipboard Toggle word wrap
  2. 设置 DHCPv6 服务器。在 /etc/dhcp/dhcpd6.conf 文件中输入以下配置。替换地址以匹配您的网卡。

    option dhcp6.bootfile-url code 59 = string;
    option dhcp6.vendor-class code 16 = {integer 32, integer 16, string};
    
    subnet6 fd33:eb1b:9b36::/64 {
            range6 fd33:eb1b:9b36::64 fd33:eb1b:9b36::c8;
    
            class "PXEClient" {
                    match substring (option dhcp6.vendor-class, 6, 9);
            }
    
            subclass "PXEClient" "PXEClient" {
                    option dhcp6.bootfile-url "tftp://[fd33:eb1b:9b36::2]/redhat/EFI/BOOT/BOOTX64.EFI";
            }
    
            class "HTTPClient" {
                    match substring (option dhcp6.vendor-class, 6, 10);
            }
    
            subclass "HTTPClient" "HTTPClient" {
                    option dhcp6.bootfile-url "http://[fd33:eb1b:9b36::2]/redhat/EFI/BOOT/BOOTX64.EFI";
                    option dhcp6.vendor-class 0 10 "HTTPClient";
            }
    }
    Copy to Clipboard Toggle word wrap
  3. 启动 DHCPv6 服务:

    # systemctl enable --now dhcpd6
    Copy to Clipboard Toggle word wrap
  4. 如果 DHCPv6 数据包被防火墙中的 RP 过滤器丢弃了,请检查其日志。如果日志包含 rpfilter_DROP 条目,请使用 /etc/firewalld/firewalld.conf 文件中的以下配置禁用过滤器:

    IPv6_rpfilter=no
    Copy to Clipboard Toggle word wrap

12.4. 为基于 BIOS 的客户端配置 TFTP 服务器

您必须配置一个 TFTP 服务器和 DHCP 服务器,并在 PXE 服务器上为基于 BIOS 的 AMD 和 Intel 64 位系统启动 TFTP 服务。

流程

  1. 以 root 用户身份,安装以下软件包:

    # yum install tftp-server
    Copy to Clipboard Toggle word wrap
  2. 允许到防火墙中的 tftp 服务的传入连接:

    # firewall-cmd --add-service=tftp
    Copy to Clipboard Toggle word wrap

    这个命令启用了临时访问,直到下次服务器重启为止。

  3. 可选:若要启用永久访问权限,可在 命令中添加 --permanent 选项。

    根据安装 ISO 文件的位置,您可能需要允许 HTTP 或者其他服务的进入连接。

  4. 从 DVD ISO 镜像文件中的 SYSLINUX 软件包访问 pxelinux.0 文件,其中 my_local_directory 是您创建的目录的名称:

    # mount -t iso9660 /path_to_image/name_of_image.iso /mount_point -o loop,ro
    Copy to Clipboard Toggle word wrap
    # cp -pr /mount_point/BaseOS/Packages/syslinux-tftpboot-version-architecture.rpm /my_local_directory
    Copy to Clipboard Toggle word wrap
    # umount /mount_point
    Copy to Clipboard Toggle word wrap
  5. 解压软件包:

    # rpm2cpio syslinux-tftpboot-version-architecture.rpm | cpio -dimv
    Copy to Clipboard Toggle word wrap
  6. tftpboot/ 中创建 pxelinux/ 目录,并将该目录中的所有文件复制到 pxelinux/ 目录中:

    # mkdir /var/lib/tftpboot/pxelinux
    Copy to Clipboard Toggle word wrap
    # cp /my_local_directory/tftpboot/* /var/lib/tftpboot/pxelinux
    Copy to Clipboard Toggle word wrap
  7. pxelinux/ 目录中创建 pxelinux.cfg/ 目录:

    # mkdir /var/lib/tftpboot/pxelinux/pxelinux.cfg
    Copy to Clipboard Toggle word wrap
  8. 创建名为 default 的配置文件,并将其添加到 pxelinux.cfg/ 目录中,如下例所示:

    default vesamenu.c32
    prompt 1
    timeout 600
    
    display boot.msg
    
    label linux
      menu label ^Install system
      menu default
      kernel images/RHEL-8/vmlinuz
      append initrd=images/RHEL-8/initrd.img ip=dhcp inst.repo=http://192.168.124.2/RHEL-8/x86_64/iso-contents-root/
    label vesa
      menu label Install system with ^basic video driver
      kernel images/RHEL-8/vmlinuz
      append initrd=images/RHEL-8/initrd.img ip=dhcp inst.xdriver=vesa nomodeset inst.repo=http://192.168.124.2/RHEL-8/x86_64/iso-contents-root/
    label rescue
      menu label ^Rescue installed system
      kernel images/RHEL-8/vmlinuz
      append initrd=images/RHEL-8/initrd.img inst.rescue
      inst.repo=http:///192.168.124.2/RHEL-8/x86_64/iso-contents-root/
    label local
      menu label Boot from ^local drive
      localboot 0xffff
    Copy to Clipboard Toggle word wrap
    • 安装程序在没有运行时镜像的情况下无法引导。使用 inst.stage2 引导选项指定镜像的位置。另外,您可以使用 inst.repo= 选项指定镜像和安装源。
    • inst.repo 一起使用的安装源位置必须包含有效的 .treeinfo 文件。
    • 当您选择 RHEL8 安装 DVD 作为安装源时,.treeinfo 文件会指向 BaseOS 和 AppStream 软件仓库。您可以使用单个 inst.repo 选项来加载这两个软件仓库。
  9. 创建一个子目录,以将引导镜像文件存储在 /var/lib/tftpboot/ 目录中,并将引导镜像文件复制到 目录。在本例中,目录为 /var/lib/tftpboot/pxelinux/images/RHEL-8/

    # mkdir -p /var/lib/tftpboot/pxelinux/images/RHEL-8/
    # cp /path_to_x86_64_images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/pxelinux/images/RHEL-8/
    Copy to Clipboard Toggle word wrap
  10. 启动并启用 tftp.socket 服务:

    # systemctl enable --now tftp.socket
    Copy to Clipboard Toggle word wrap

    PXE 引导服务器现在可以提供 PXE 客户端。您可以启动客户端,即您要安装 Red Hat Enterprise Linux 的系统,在提示指定引导源时选择 PXE 引导,并启动网络安装。

12.5. 为基于 UEFI 的客户端配置 TFTP 服务器

您必须配置一个 TFTP 服务器和 DHCP 服务器,并为基于 UEFI 的 AMD64、Intel 64 和 64 位 ARM 系统的 PXE 服务器启动 TFTP 服务。

重要

Red Hat Enterprise Linux 8 UEFI PXE 引导支持基于 MAC 的 GRUB 菜单文件的小写文件格式。例如,GRUB 的 MAC 地址文件格式为 grub.cfg-01-aa-bb-cc-dd-ee-ff

流程

  1. 以 root 用户身份,安装以下软件包:

    # yum install tftp-server
    Copy to Clipboard Toggle word wrap
  2. 允许到防火墙中的 tftp 服务的传入连接:

    # firewall-cmd --add-service=tftp
    Copy to Clipboard Toggle word wrap

    这个命令启用了临时访问,直到下次服务器重启为止。

  3. 可选:若要启用永久访问权限,可在 命令中添加 --permanent 选项。

    根据安装 ISO 文件的位置,您可能需要允许 HTTP 或者其他服务的进入连接。

  4. 访问 DVD ISO 镜像中的 EFI 引导镜像文件:

    # mount -t iso9660 /path_to_image/name_of_image.iso /mount_point -o loop,ro
    Copy to Clipboard Toggle word wrap
  5. 复制 DVD ISO 镜像中的 EFI 引导镜像:

    # mkdir /var/lib/tftpboot/redhat
    # cp -r /mount_point/EFI /var/lib/tftpboot/redhat/
    # umount /mount_point
    Copy to Clipboard Toggle word wrap
  6. 修复复制的文件的权限:

    # chmod -R 755 /var/lib/tftpboot/redhat/
    Copy to Clipboard Toggle word wrap
  7. /var/lib/tftpboot/redhat/efi/boot/grub.cfg 的内容替换为以下示例:

    set timeout=60
    menuentry 'RHEL 8' {
      linux images/RHEL-8/vmlinuz ip=dhcp inst.repo=http://192.168.124.2/RHEL-8/x86_64/iso-contents-root/
      initrd images/RHEL-8/initrd.img
    }
    Copy to Clipboard Toggle word wrap
    • 安装程序在没有运行时镜像的情况下无法引导。使用 inst.stage2 引导选项指定镜像的位置。另外,您可以使用 inst.repo= 选项指定镜像和安装源。
    • inst.repo 一起使用的安装源位置必须包含有效的 .treeinfo 文件。
    • 当您选择 RHEL8 安装 DVD 作为安装源时,.treeinfo 文件会指向 BaseOS 和 AppStream 软件仓库。您可以使用单个 inst.repo 选项来加载这两个软件仓库。
  8. 创建一个子目录,以将引导镜像文件存储在 /var/lib/tftpboot/ 目录中,并将引导镜像文件复制到 目录。在这个示例中,目录为 /var/lib/tftpboot/images/RHEL-8/

    # mkdir -p /var/lib/tftpboot/images/RHEL-8/
    # cp /mount_point/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/images/RHEL-8/
    Copy to Clipboard Toggle word wrap
  9. 启动并启用 tftp.socket 服务:

    # systemctl enable --now tftp.socket
    Copy to Clipboard Toggle word wrap

    PXE 引导服务器现在可以提供 PXE 客户端。您可以启动客户端,即您要安装 Red Hat Enterprise Linux 的系统,在提示指定引导源时选择 PXE 引导,并启动网络安装。

12.6. 为 IBM Power 系统配置网络服务器

您可以使用 GRUB 为 IBM Power 系统配置网络引导服务器。

流程

  1. 以 root 用户身份,安装以下软件包:

    # yum install tftp-server dhcp-server
    Copy to Clipboard Toggle word wrap
  2. 在防火墙中,允许到 tftp 服务的进入连接:

    # firewall-cmd --add-service=tftp
    Copy to Clipboard Toggle word wrap

    这个命令启用了临时访问,直到下次服务器重启为止。

  3. 可选:若要启用永久访问权限,可在 命令中添加 --permanent 选项。

    根据安装 ISO 文件的位置,您可能需要允许 HTTP 或者其他服务的进入连接。

  4. 在 TFTP root 中创建一个 GRUB 网络引导目录:

    # grub2-mknetdir --net-directory=/var/lib/tftpboot
    Netboot directory for powerpc-ieee1275 created. Configure your DHCP server to point to /boot/grub2/powerpc-ieee1275/core.elf
    Copy to Clipboard Toggle word wrap

    命令输出会告诉您 DHCP 配置中需要配置的文件名,如下所述。

    1. 如果 PXE 服务器在 x86 机器上运行,则必须在 tftp root 中创建 GRUB2 网络引导目录前安装 grub2-ppc64le-modules

      # yum install grub2-ppc64le-modules
      Copy to Clipboard Toggle word wrap
  5. 创建一个 GRUB 配置文件:/var/lib/tftpboot/boot/grub2/grub.cfg,如下例中所示:

    set default=0
    set timeout=5
    
    echo -e "\nWelcome to the Red Hat Enterprise Linux 8 installer!\n\n"
    
    menuentry 'Red Hat Enterprise Linux 8' {
      linux grub2-ppc64/vmlinuz ro ip=dhcp inst.repo=http://192.168.124.2/RHEL-8/x86_64/iso-contents-root/
      initrd grub2-ppc64/initrd.img
    }
    Copy to Clipboard Toggle word wrap
    • 安装程序在没有运行时镜像的情况下无法引导。使用 inst.stage2 引导选项指定镜像的位置。另外,您可以使用 inst.repo= 选项指定镜像和安装源。
    • inst.repo 一起使用的安装源位置必须包含有效的 .treeinfo 文件。
    • 当您选择 RHEL8 安装 DVD 作为安装源时,.treeinfo 文件会指向 BaseOS 和 AppStream 软件仓库。您可以使用单个 inst.repo 选项来加载这两个软件仓库。
  6. 使用以下命令挂载 DVD ISO 镜像:

    # mount -t iso9660 /path_to_image/name_of_iso/ /mount_point -o loop,ro
    Copy to Clipboard Toggle word wrap
  7. 创建一个目录,并将 initrd.imgvmlinuz 文件从 DVD ISO 镜像复制到其中,例如:

    # cp /mount_point/ppc/ppc64/{initrd.img,vmlinuz} /var/lib/tftpboot/grub2-ppc64/
    Copy to Clipboard Toggle word wrap
  8. 将您的 DHCP 服务器配置为使用与 GRUB2 打包的引导镜像,如下例所示。如果您已经配置了 DHCP 服务器,那么请在 DHCP 服务器上执行此步骤。

    subnet 192.168.0.1 netmask 255.255.255.0 {
      allow bootp;
      option routers 192.168.0.5;
      group { #BOOTP POWER clients
        filename "boot/grub2/powerpc-ieee1275/core.elf";
        host client1 {
        hardware ethernet 01:23:45:67:89:ab;
        fixed-address 192.168.0.112;
        }
      }
    }
    Copy to Clipboard Toggle word wrap
  9. 调整示例参数 subnetnetmaskroutersfixed-addresshardware ethernet 以适合您的网络配置。file name 参数;这是此流程中前面的 grub2-mknetdir 命令输出的文件名。
  10. 在 DHCP 服务器上,启动并启用 dhcpd 服务。如果您已在 localhost 上配置了 DHCP 服务器,请在 localhost 上启动并启用 dhcpd 服务。

    # systemctl enable --now dhcpd
    Copy to Clipboard Toggle word wrap
  11. 启动并启用 tftp.socket 服务:

    # systemctl enable --now tftp.socket
    Copy to Clipboard Toggle word wrap

    PXE 引导服务器现在可以提供 PXE 客户端。您可以启动客户端,即您要安装 Red Hat Enterprise Linux 的系统,在提示指定引导源时选择 PXE 引导,并启动网络安装。

第 13 章 Kickstart 参考

附录 B. kickstart 脚本文件格式参考

这个参考详细描述了 kickstart 文件格式。

B.1. kickstart 文件格式

Kickstart 脚本是包含安装程序识别的关键字的纯文本文件,它们是安装指令。任何可将文件保存为 ASCII 文本的文本编辑,,比如 Geditvim(Linux 系统),或 Notepad(Windows 系统),都可以用来创建和编辑 Kickstart 文件。Kickstart 配置的文件名无关紧要,但建议使用简单名称,因为您需要在其他配置文件或对话框中指定这个名称。

命令
命令是作为安装指令的关键字。每个命令都必须位于一行。命令可以选择。指定命令和选项和在 shell 中使用 Linux 命令类似。
部分
某些以 % 字符开头的特殊命令可启动某个部分。部分中的命令解释与其它部分的命令不同。每个部分都必须使用 %end 命令结束。
部分类型

可用的部分有:

  • Add-on 部分。这些部分使用 %addon addon_name 命令。
  • 软件包选择部分。以 %packages 开始。使用它列出安装的软件包,包括间接方法,比如软件包组或者模块。
  • Script 部分。它们以 %pre%pre-install%post%onerror 开头。这些部分不是必需的。
command 部分
command 部分是那些不属于任何 script 部分或 %packages 部分的 Kickstart 文件中的命令的术语。
脚本部分计数和排序
除 command 部分外的所有部分都是可选的,并可以多次出现。当要评估特定类型的脚本部分时,Kickstart 中存在的所有部分都会按照外观顺序进行评估:两个 %post 部分会按照出现的顺序进行评估。但是,您不必按任何顺序指定各种脚本部分类型: %pre 部分前是否有 %post 部分无关紧要。
注释
Kickstart 注释是以 hash # 字符开头的行。安装程序会忽略这些行。

不必需的项目可以被省略。省略安装程序中所有需要的项目,这样用户就可以象常规互动安装一样,提供对相关项目的回答。也可以将 kickstart 脚本声明为非交互式,通过 cmdline 命令。在非互动模式中,任何缺少的回答都会中止安装过程。

注意

如果在文本或图形模式下进行 kickstart 安装过程中需要用户交互,则仅进入要强制更新的窗口以完成安装。输入 spoke 可能会导致重置 kickstart 配置。在进入 Installation Destination 窗口后,重置配置专门应用于与存储相关的 kickstart 命令。

B.2. Kickstart 中的软件包选择

Kickstart 使用 %packages 命令启动的部分来选择要安装的软件包。您可以以这种方式安装软件包、组、环境、模块流和模块配置集。

B.2.1. 软件包选择部分

使用 %packages 命令启动一个 Kickstart 部分,该部分描述了要安装的软件包。%packages 部分必须以 %end 命令结尾。

您可以根据环境、组、模块流、模块配置集或者它们的软件包名称指定软件包。定义了包含相关软件包的几个环境和组。请参考有关环境和组列表的 Red Hat Enterprise Linux 8 安装 DVD 上的 repository/repodata/*-comps-repository.architecture.xml 文件。

*-comps-repository.architecture.xml 文件包含描述可用环境(使用 <environment> 标签标记)和组( <group> 标签)的结构。每个条目都有一个 ID、用户可见值、名称、描述和软件包列表。如果为安装选择了组,则在软件包列表中标记了 mandatory 的软件包总会被安装;如果其它位置没有特别排除,标记了 default 的软件包也会被安装,标记为 optional 的软件包需要在其他地方被指定包括时才会安装,即使已经选择该组也是如此。

您可以使用其 ID(标签)或名称( <id> 标签)指定软件包组或环境 <name>

如果您不确定应该安装什么软件包,红帽建议您选择 Minimal Install 环境。Minimal Install 只提供运行 Red Hat Enterprise Linux 8 所必需的软件包。这将显著降低系统受某个漏洞影响的机会。如果需要,可以在安装后再添加附加软件包。有关 Minimal Install 的详情,请参阅 安全强化 文档中的安装最小软件包挂载部分Initial Setup 无法在从 Kickstart 文件安装系统后运行,除非桌面环境和 X Window 系统包含在安装中,且启用了图形登录。

重要

要在 64 位系统中安装 32 位软件包:

  • %packages 部分指定 --multilib 选项
  • 使用构建该软件包的 32 位架构附加软件包名称;例如:glibc.i686

B.2.2. 软件包选择命令

这些命令可以在 Kickstart 文件的 %packages 部分中使用。

指定一个环境

@^ 符号开头的行形式指定要安装的整个环境:

%packages
@^Infrastructure Server
%end
Copy to Clipboard Toggle word wrap

这将安装属于 Infrastructure Server 环境一部分的所有软件包。所有可用环境都在 Red Hat Enterprise Linux 8 安装 DVD 上的 repository/repodata/*-comps-repository.architecture.xml 文件中进行了描述。

在 Kickstart 文件中只能指定一个环境。如果指定了多个环境,则只使用最后指定的环境。

指定组

指定组,每个条目一行,以 @ 符号开头,然后是 *-comps-repository.architecture.xml 文件中给出的完整组群名称或者组群 ID。例如:

%packages
@X Window System
@Desktop
@Sound and Video
%end
Copy to Clipboard Toggle word wrap

Core 组总是被选择 - 不需要在 %packages 部分指定它。

指定单独的软件包

根据名称指定单个软件包,每个条目对应一行。您可以在软件包名称中使用星号字符 (*) 作为通配符。例如:

%packages
sqlite
curl
aspell
docbook*
%end
Copy to Clipboard Toggle word wrap

docbook* 条目包含软件包 docbook-dtdsdocbook-style,它们与通配符表示的模式匹配。

指定模块流的配置集

使用配置集语法为模块流指定配置集(一个条目为一行):

%packages
@module:stream/profile
%end
Copy to Clipboard Toggle word wrap

这会安装模块流指定配置集中列出的所有软件包。

  • 当模块指定了默认流时,您可以将其退出。如果没有指定默认流,您必须指定它。
  • 当模块流指定默认配置集时,您可以将其退出。如果没有指定默认配置集,您必须指定它。
  • 无法多次使用不同流安装模块。
  • 有可能安装同一模块和流的多个配置集。

模块和组使用以 @ 符号开头的相同语法。当某个模块和软件包组具有相同名称时,该模块会优先使用。

在 Red Hat Enterprise Linux 8 中,模块只存在于 AppStream 存储库中。要列出提供的模块,请在安装的 Red Hat Enterprise Linux 8 系统上使用 yum module list 命令。

也可以使用模块 Kickstart 命令启用模块流,然后通过直接命名模块流中包含的软件包来安装它们。

排除环境、组群或者软件包

使用前导短划线 (-) 指定安装中排除的软件包或组。例如:

%packages
-@Graphical Administration Tools
-autofs
-ipa*compat
%end
Copy to Clipboard Toggle word wrap
重要

不支持在 Kickstart 文件中只使用 * 安装所有可用软件包。

您可以使用多个选项更改 %packages 部分的默认行为。有些选项可以用于整个软件包选择,其它选项只与特定的组一起使用。

B.2.3. 通用软件包选择选项

以下选项可用于 %packages 部分。要使用某个选项,请将其附加到软件包选择部分的开头。例如:

%packages --multilib --ignoremissing
Copy to Clipboard Toggle word wrap
--default
安装默认软件包组。这与在互动安装过程中的软件包选择页面中没有其他选择时要安装的软件包组对应。
--excludedocs
不要安装软件包中的任何文档。在大多数情况下,这不包括通常安装在 /usr/share/doc 目录中的任何文件,但要排除的特定文件取决于各个软件包。
--ignoremissing
忽略安装源中缺少的软件包、组、模块流、模块配置集和环境,而不是停止安装来询问安装是中止还是继续。
--instLangs=
指定要安装的语言列表。这与软件包组级别选择不同。这个选项没有描述应该安装哪些软件包组,而是设定 RPM 宏控制应该安装单个软件包的转换文件。
--multilib

为多 lib 软件包配置安装的系统,允许在 64 位系统中安装 32 位软件包,并安装在这部分中指定的软件包。

通常在 AMD64 和 Intel 64 系统中,您只能安装 x86_64 和 noarch 软件包。但是,使用 --multilib 选项,您可以自动安装 32 位 AMD 和 i686 Intel 系统软件包(若有)可用。

这只适用于 %packages 部分明确指定的软件包。那些只作为相依性安装而没有在 Kickstart 文件中指定的软件包只能安装到需要它们的架构版本中,即使它们可用于更多构架。

用户可将 Anaconda 配置为在安装系统期间以 multilib 模式安装软件包。使用以下选项之一启用 multilib 模式:

  1. 使用以下行配置 Kickstart 文件:

    %packages --multilib --default
    %end
    Copy to Clipboard Toggle word wrap
  2. 在引导安装镜像时添加 inst.multilib 引导选项。
--nocore

禁用 @Core 软件包组的安装,否则该安装默认为始终安装。使用 --nocore 禁用 @Core 软件包组应当仅用于创建轻量级容器;使用 --nocore 安装桌面或服务器系统将导致系统不可用。

备注
  • 使用 -@Core 来排除 @Core 软件包组中的软件包不起作用。排除 @Core 软件包组的唯一方式是使用 --nocore 选项。
  • @Core 软件包组定义为安装工作系统所需的一组最小软件包。它与软件包清单覆盖范围中定义的核心软件包无关。
--excludeWeakdeps
禁用从弱依赖项安装软件包。这些软件包都链接到由 Recommends 和 supplements 标记组成的所选软件包。默认情况下会安装弱依赖项。
--retries=
设置 YUM 试图下载软件包的次数(尝试)。默认值为 10。这个选项只适用于安装过程中,不会影响安装的系统上的 YUM 配置。
--timeout=
以秒为单位设置 YUM 超时。默认值为 30。这个选项只适用于安装过程中,不会影响安装的系统上的 YUM 配置。

B.2.4. 特定软件包组的选项

这个列表中的选项仅适用于单个软件包组。不要在 Kickstart 文件中的 %packages 命令中使用它们,而是将它们附加到组名称中。例如:

%packages
@Graphical Administration Tools --optional
%end
Copy to Clipboard Toggle word wrap
--nodefaults
只安装组的强制软件包,而不是默认选择。
--optional

除了安装默认选择外,还要安装在 *-comps-repository.architecture.xml 文件中的组定义中标记为可选的软件包。

有些软件包组(如 Scientific Support )没有指定任何强制或默认软件包 - 仅指定了可选软件包。在这种情况下,必须始终使用 --optional 选项,否则不会安装该组中的软件包。

重要

--nodefaults--optional 选项不能一起使用。在安装过程中,您可以使用 --nodefaults 只安装必需的软件包,并在安装后在安装的系统上安装可选软件包。

B.3. Kickstart 文件中的脚本

kickstart 文件可以包括以下脚本:

  • %pre
  • %pre-install
  • %post

本节提供有关脚本的以下详情:

  • 执行时间
  • 可以包含在脚本中的命令类型
  • 脚本的目的
  • 脚本选项

B.3.1. %pre 脚本

%pre 脚本在加载 Kickstart 文件后立即在系统中运行,但在完全解析并开始安装之前。每个部分必须以 %pre 开头并以 %end 结尾。

%pre 脚本可用于激活和配置联网和存储设备。还可以使用安装环境中可用的脚本来运行脚本。如果您在继续安装之前有需要特殊配置的联网和存储,或者具有设置其他日志参数或环境变量的脚本,则添加 %pre 脚本非常有用。

使用 %pre 脚本调试问题可能比较困难,因此建议仅在需要时使用 %pre 脚本。

重要

Kickstart 的 %pre 部分会在安装阶段执行,该阶段发生在安装程序镜像(inst.stage2)被提取后:这意味着在 root 切换到安装程序环境(安装程序镜像),以及 Anaconda 安装程序本身启动 。然后,应用 %pre 中的配置被应用,可用于从配置的安装存储库中获取软件包,例如,通过Kickstart 中的 URL。但是,它 不能 用于配置网络,以从网络获取镜像(inst.stage2)。

除了安装环境 /sbin/bin 目录中的大多数实用程序外,还可在 %pre 脚本中使用与网络、存储和文件系统相关的命令。

您可以在 %pre 部分中访问网络。然而,命名服务还没有被配置,所以只能使用 IP 地址,而不能使用 URL。

注意

pre 脚本不会在 chroot 环境中运行。

B.3.1.1. %pre 脚本部分选项

以下选项可以用来改变预安装脚本的行为。要使用某个选项,请将其附加到脚本开头的 %pre 行中。例如:

%pre --interpreter=/usr/libexec/platform-python
-- Python script omitted --
%end
Copy to Clipboard Toggle word wrap
--interpreter=

允许指定不同的脚本语言,如 Python。可以使用系统中可用的脚本语言;在大多数情况下,它们是 /usr/bin/sh/usr/bin/bash/usr/libexec/platform-python

请注意,platform-python 解释器使用 Python 版本 3.6。对于新路径和版本,您必须将您的针对以前的 RHEL 版本的 Python 脚本进行更改,以适用于新的路径和版本。另外,platform-python 用于系统工具:使用安装环境之外的 python36 软件包。有关 Red Hat Enterprise Linux 中 Python 的详情,请参考 配置基本系统设置 中的 Python 简介

--erroronfail
如果脚本失败,显示错误并停止安装。错误消息会指示您记录故障原因的位置。安装的系统可能会处于不稳定且无法引导的状态。您可以使用 inst.nokill 选项调试脚本。
--log=

将脚本的输出记录到指定的日志文件中。例如:

%pre --log=/tmp/ks-pre.log
Copy to Clipboard Toggle word wrap

B.3.2. %pre-install 脚本

pre-install 脚本中的命令会在以下任务完成后运行:

  • 系统已被分区
  • 文件系统创建并挂载在 /mnt/sysroot 下
  • 网络已根据任何引导选项和 kickstart 命令进行配置

每个 %pre-install 部分必须以 %pre-install 开头并以 %end 结尾。

%pre-install 脚本可用于修改安装,并在软件包安装之前添加带有保证 ID 的用户和组。

建议您在安装所需的任何修改中使用 %post 脚本。只有在 %post 脚本对所需修改不够时才使用 %pre-install 脚本。

pre-install 脚本不在 chroot 环境中运行。

B.3.2.1. %pre-install script 部分选项

以下选项可用于更改 pre-install 脚本的行为。要使用某个选项,请将其附加到脚本开头的 %pre-install 行中。例如:

%pre-install --interpreter=/usr/libexec/platform-python
-- Python script omitted --
%end
Copy to Clipboard Toggle word wrap

您可以有多个 %pre-install 部分,它们具有相同的或不同的解释器。它们按照它们在 Kickstart 文件中的顺序进行评估。

--interpreter=

允许指定不同的脚本语言,如 Python。可以使用系统中可用的脚本语言;在大多数情况下,它们是 /usr/bin/sh/usr/bin/bash/usr/libexec/platform-python

platform-python 解释器使用 Python 版本 3.6。对于新路径和版本,您必须将您的针对以前的 RHEL 版本的 Python 脚本进行更改,以适用于新的路径和版本。另外,platform-python 用于系统工具:使用安装环境之外的 python36 软件包。有关 Red Hat Enterprise Linux 中 Python 的详情,请参考 配置基本系统设置 中的 Python 简介

--erroronfail
如果脚本失败,显示错误并停止安装。错误消息会指示您记录故障原因的位置。安装的系统可能会处于不稳定且无法引导的状态。您可以使用 inst.nokill 选项调试脚本。
--log=

将脚本的输出记录到指定的日志文件中。例如:

%pre-install --log=/mnt/sysroot/root/ks-pre.log
Copy to Clipboard Toggle word wrap

B.3.3. %post 脚本

%post 脚本是安装后脚本,可在安装完成后运行,但在第一次重启系统前运行。您可以使用这部分来运行任务,比如系统订阅。

您可以添加系统在安装结束后但在第一次重启该系统之前要运行的命令,。此部分必须以 %post 开头并以 %end 结尾。

%post 部分可用于安装其他软件或配置其他名称服务器等功能。post-install 脚本是一个 chroot 环境中运行的,因此,从安装介质中复制脚本或 RPM 软件包等任务在默认情况下不起作用。您可以使用 --nochroot 选项更改此行为,如下所述。然后 %post 脚本将在安装环境中运行,而不是在安装的目标系统中的 chroot 中运行。

由于安装后脚本在 chroot 环境中运行,因此大多数 systemctl 命令将拒绝执行任何操作。

在执行 %post 部分的过程中,必须仍然插入安装介质。

B.3.3.1. %post 脚本部分选项

以下选项可以用来改变安装后脚本的行为。要使用某个选项,请将其附加到脚本开头的 %post 行中。例如:

%post --interpreter=/usr/libexec/platform-python
-- Python script omitted --
%end
Copy to Clipboard Toggle word wrap
--interpreter=

允许指定不同的脚本语言,如 Python。例如:

%post --interpreter=/usr/libexec/platform-python
Copy to Clipboard Toggle word wrap

可以使用系统中可用的脚本语言;在大多数情况下,它们是 /usr/bin/sh/usr/bin/bash/usr/libexec/platform-python

platform-python 解释器使用 Python 版本 3.6。对于新路径和版本,您必须将您的针对以前的 RHEL 版本的 Python 脚本进行更改,以适用于新的路径和版本。另外,platform-python 用于系统工具:使用安装环境之外的 python36 软件包。有关 Red Hat Enterprise Linux 中 Python 的详情,请参考 配置基本系统设置 中的 Python 简介

--nochroot

允许您指定在 chroot 环境之外运行的命令。

以下示例将 /etc/resolv.conf 文件复制到刚安装的文件系统中。

%post --nochroot
cp /etc/resolv.conf /mnt/sysroot/etc/resolv.conf
%end
Copy to Clipboard Toggle word wrap
--erroronfail
如果脚本失败,显示错误并停止安装。错误消息会指示您记录故障原因的位置。安装的系统可能会处于不稳定且无法引导的状态。您可以使用 inst.nokill 选项调试脚本。
--log=

将脚本的输出记录到指定的日志文件中。无论是否使用 --nochroot 选项,都必须考虑日志文件的路径。例如,没有 --nochroot:

%post --log=/root/ks-post.log
Copy to Clipboard Toggle word wrap

使用 --nochroot:

%post --nochroot --log=/mnt/sysroot/root/ks-post.log
Copy to Clipboard Toggle word wrap
B.3.3.2. 例如:在安装后脚本中挂载 NFS

这个 %post 部分的示例挂载 NFS 共享并执行位于 /usr/new-machines/ 上的名为 runme 的脚本。在 Kickstart 模式下不支持 NFS 文件锁定,因此需要使用 -o nolock 选项。

# Start of the %post section with logging into /root/ks-post.log
%post --log=/root/ks-post.log

# Mount an NFS share
mkdir /mnt/temp
mount -o nolock 10.10.0.2:/usr/new-machines /mnt/temp
openvt -s -w -- /mnt/temp/runme
umount /mnt/temp

# End of the %post section
%end
Copy to Clipboard Toggle word wrap

Kickstart 安装中最常用的安装脚本之一就是使用 Red Hat Subscription Manager 自动注册安装的系统。以下是 %post 脚本中的自动订阅示例:

%post --log=/root/ks-post.log
subscription-manager register --username=admin@example.com --password=secret --auto-attach
%end
Copy to Clipboard Toggle word wrap

subscription-manager 命令行脚本在红帽订阅管理服务器(客户门户网站订阅管理、Satellite 6 或者 CloudForms System Engine)中注册系统。这个脚本还可用来自动在该系统中分配或者附加与该系统最匹配的订阅。在客户门户网站中注册时,请使用红帽网络登录证书。当在 Satellite 6 或者 CloudForms System Engine 中注册时,您可能需要指定更多 subscription-manager 选项 --serverurl--org--environment 以及您的本地管理员提供的凭证。请注意,以 --org --activationkey 组合格式的凭证是避免在共享的 kickstart 文件中公开 --username --password 值的好方法。

注册命令中可以使用附加选项为系统设置首选服务等级,并为那些需要在旧流中继续修复的延长更新支持订阅客户限制对特定 RHEL 次要版本的更新和勘误。

有关使用 subscription-manager 命令的更多信息,请参阅红帽知识库解决方案 如何在 kickstart 文件中使用 subscription-manager?.

B.4. Anaconda 配置部分

可以在 Kickstart 文件的 %anaconda 部分配置其他安装选项。这部分控制安装系统的用户界面行为。

这部分必须放在 Kickstart 文件的末尾(在 Kickstart 命令后面),且必须以 %anaconda 开头并以 %end 结尾。

目前,%anaconda 部分中唯一可以使用的命令是 pwpolicy

例 B.1. %anaconda 脚本示例

以下是 %anaconda 部分示例:

%anaconda
pwpolicy root --minlen=10 --strict
%end
Copy to Clipboard Toggle word wrap

这个示例 %anaconda 部分设置了一个密码策略,它要求 root 密码长度至少为 10 个字符,并严格禁止不满足此要求的密码。

B.5. Kickstart 错误处理部分

从 Red Hat Enterprise Linux 7 开始,当安装程序中遇到严重错误时,Kickstart 安装会运行自定义脚本。示例场景在为安装请求的软件包中的一个错误,如果在配置中指定了,VNC 无法启动,或者在扫描存储设备时出现一个错误。如果是此类事件,安装将中止。要分析这些事件,安装程序会按照 Kickstart 文件中提供时间顺序运行所有 %onerror 脚本。如果出现回溯,您可以运行 %onerror 脚本。

每个 %onerror 脚本都需要以 %end 结尾。

您可以使用 inst.cmdline 对任何错误强制实施错误处理程序,以使每个错误都成为致命错误。

错误处理部分接受以下选项:

--erroronfail
如果脚本失败,显示错误并停止安装。错误消息会指示您记录故障原因的位置。安装的系统可能会处于不稳定且无法引导的状态。您可以使用 inst.nokill 选项调试脚本。
--interpreter=

允许指定不同的脚本语言,如 Python。例如:

%onerror --interpreter=/usr/libexec/platform-python
Copy to Clipboard Toggle word wrap

可以使用系统中可用的脚本语言;在大多数情况下,它们是 /usr/bin/sh/usr/bin/bash/usr/libexec/platform-python

platform-python 解释器使用 Python 版本 3.6。对于新路径和版本,您必须将您的针对以前的 RHEL 版本的 Python 脚本进行更改,以适用于新的路径和版本。另外,platform-python 用于系统工具:使用安装环境之外的 python36 软件包。有关 Red Hat Enterprise Linux 中 Python 的详情,请参考 配置基本系统设置 中的 Python 简介

--log=
将脚本的输出记录到指定的日志文件中。

B.6. Kickstart 附加组件部分

从 Red Hat Enterprise Linux 7 开始,Kickstart 安装支持附加组件。这些附加组件可以在很多方面扩展基本 Kickstart(Anaconda)功能。

要在 Kickstart 文件中使用附加组件,请使用 %addon addon_name options 命令,并使用 %end 语句结束命令,这和预安装和安装后脚本部分类似。例如:如果要使用默认由 Anaconda 分配的 Kdump 附加组件,请使用以下命令:

%addon com_redhat_kdump --enable --reserve-mb=auto
%end
Copy to Clipboard Toggle word wrap

%addon 命令不包含任何自己的选项 - 所有选项都依赖于实际附加组件。

附录 C. Kickstart 命令和选项参考

这个参考是 Red Hat Enterprise Linux 安装程序支持的所有 Kickstart 命令的完整列表。这些命令按字母顺序排序为几个广泛类别。如果某个命令可位于多个类别下,它将列在所有这些类别中。

C.1. Kickstart 的修改

以下章节描述了 Red Hat Enterprise Linux 8 中 Kickstart 命令和选项的更改。

在 RHEL 8 中弃用了 auth 或 authconfig

因为已经删除了 authconfig 工具和软件包,Red Hat Enterprise Linux 8 中弃用了 authauthconfig Kickstart 命令。

与命令行中的 authconfig 命令类似,Kickstart 脚本中的 authconfig 命令现在使用 authselect-compat 工具运行新的 authselect 工具。有关此兼容性层及其已知问题的描述,请参阅 authselect-migration(7) 手册页。安装程序将自动检测弃用命令的使用并在系统上安装 authselect-compat 软件包来提供兼容性层。

Kickstart 不再支持 Btrfs

从 Red Hat Enterprise Linux 8 起不再支持 Btrfs 文件系统。因此,图形用户界面(GUI)和 Kickstart 命令不再支持 Btrfs。

使用之前 RHEL 发行本中的 Kickstart 文件

如果您正在使用之前的 RHEL 版本中的 Kickstart 文件,请参阅 RHEL 8 文档中Repositories 部分,以了解有关 Red Hat Enterprise Linux 8 BaseOS 和 AppStream 软件仓库的详情。

C.1.1. 弃用的 Kickstart 命令和选项

在Red Hat Enterprise Linux 8 中弃用了以下 Kickstart 命令和选项。

如果只列出具体选项,则基础命令及其它选项仍可用且没有弃用。

  • authauthconfig - 使用 authselect 替代
  • device
  • deviceprobe
  • dmraid
  • install - 使用子命令或者方法作为命令
  • multipath
  • bootloader --upgrade
  • ignoredisk --interactive
  • partition --active
  • reboot --kexec
  • syspurpose - 使用 subscription-manager syspurpose 替代

authauthconfig 命令外,使用 Kickstart 文件中的命令会在日志中打印警告信息。

您可以使用 inst.ksstrict 引导选项将已弃用的命令警告转换为错误,但 authauthconfig 命令除外。

C.1.2. 删除的 Kickstart 命令和选项

在 Red Hat Enterprise Linux 8 中完全删除了以下 Kickstart 命令和选项。在 Kickstart 文件中使用它们将导致错误。

  • device
  • deviceprobe
  • dmraid
  • install - 使用子命令或者方法作为命令
  • multipath
  • bootloader --upgrade
  • ignoredisk --interactive
  • partition --active
  • harddrive --biospart
  • upgrade(该命令之前已经弃用。)
  • btrfs
  • part/partition btrfs
  • part --fstype btrfspartition --fstype btrfs
  • logvol --fstype btrfs
  • raid --fstype btrfs
  • unsupported_hardware

如果只列出具体选项和值,则基础命令及其它选项仍可用且没有被删除。

这个列表中的 Kickstart 命令可控制安装模式和安装过程,以及最后发生什么。

C.2.1. cdrom

cdrom Kickstart 命令是可选的。它使用系统上的第一个光驱执行安装。仅使用此命令一次。

语法

cdrom
Copy to Clipboard Toggle word wrap

备注

  • 在以前的版本中,cdrom 命令必须与 install 命令一同使用。install 命令已弃用,cdrom 可以自行使用,因为它表示 install
  • 这个命令没有选项。
  • 要实际运行安装,您必须指定 cdrom,harddrive,hmc,nfs,liveimg,ostreesetup,rhsm, 或 url 其中之一,除非inst.repo 选项在内核命令行上指定了。

C.2.2. cmdline

cmdline Kickstart 命令是可选的。它以完全非互动的命令行模式执行安装。任何互动提示都会终止安装。仅使用此命令一次。

语法

cmdline
Copy to Clipboard Toggle word wrap

备注

  • 对于完全自动安装,您必须在 Kickstart 文件中指定可用模式之一(图形文本命令行),或者必须使用 console= 引导选项。如果没有指定模式,系统会尽可能使用图形模式,或者提示您从 VNC 和文本模式中选择。
  • 这个命令没有选项。
  • 这个模式在带有 x3270 终端的 64 位 IBM Z 系统上很有用。

C.2.3. driverdisk

driverdisk Kickstart 命令是可选的。使用它为安装程序提供额外的驱动程序。

可在 Kickstart 安装过程中使用驱动程序磁盘提供默认不包括的额外驱动程序。您必须将驱动程序磁盘内容复制到系统的磁盘上分区的根目录中。然后,您必须使用 driverdisk 命令指定安装程序是否应该查找驱动程序磁盘及其位置。仅使用此命令一次。

语法

driverdisk [partition|--source=url|--biospart=biospart]
Copy to Clipboard Toggle word wrap

选项

您必须以以下一种方式指定驱动程序磁盘的位置:

  • partition - 包含驱动程序磁盘的分区。分区必须被指定为完整路径(例如 /dev/sdb1 ),而 仅仅是分区名称(例如 sdb1)。
  • --source= - 驱动程序磁盘的 URL。示例包括:

    driverdisk --source=ftp://path/to/dd.img
    driverdisk --source=http://path/to/dd.img
    driverdisk --source=nfs:host:/path/to/dd.img
    Copy to Clipboard Toggle word wrap
  • --biospart= - 包含驱动程序磁盘(如 82p2)的 BIOS 分区。

也可以从本地磁盘或类似的设备加载驱动程序磁盘,而不是通过网络或从 initrd 加载。按照以下步骤操作:

  1. 在磁盘驱动器、USB 或者任何类似的设备上载入驱动程序磁盘。
  2. 将标签(如 DD )设置为这个设备。
  3. 在您的 Kickstart 文件中添加以下行:

    driverdisk LABEL=DD:/e1000.rpm
    Copy to Clipboard Toggle word wrap

使用特定标签替换 DD,使用特定名称替换 e1000.rpm。使用 inst.repo 命令支持的任何内容,而不是 LABEL 来指定您的磁盘驱动器。

C.2.4. EULA

eula Kickstart 命令是可选的。使用这个选项在没有用户互动的情况下接受最终用户许可证协议(End User License Agreement,EULA)。指定这个选项可防止 Initial Setup 在完成安装并第一次重启系统后提示您接受该许可证。仅使用此命令一次。

语法

eula [--agreed]
Copy to Clipboard Toggle word wrap

选项

  • --agreed (必需)- 接受 EULA。必须始终使用这个选项,否则 eula 命令就无意义。

C.2.5. firstboot

firstboot Kickstart 命令是可选的。它决定了系统首次启动时 Initial Setup 应用程序是否启动。如果启用,则必须安装 initial-setup 软件包。如果没有指定,这个选项默认是禁用的。仅使用此命令一次。

语法

firstboot OPTIONS
Copy to Clipboard Toggle word wrap

选项

  • --enable--enabled - 系统第一次启动时启动 Initial Setup。
  • --disable--disabled - 系统第一次引导时不会启动 Initial Setup。
  • --reconfig - 以重新配置模式在引导时启用 Initial Setup。这个模式除了默认选项外,还启用了 root 密码、时间和日期以及网络和主机名配置选项。

C.2.6. 图形化

graphical Kickstart 命令是可选的。它在图形模式下执行安装。这是默认值。仅使用此命令一次。

语法

graphical [--non-interactive]
Copy to Clipboard Toggle word wrap

选项

  • --non-interactive - 以完全非互动模式执行安装。这个模式将在用户交互需要时终止安装。

备注

  • 对于完全自动安装,您必须在 Kickstart 文件中指定可用模式之一(图形文本命令行),或者必须使用 console= 引导选项。如果没有指定模式,系统会尽可能使用图形模式,或者提示您从 VNC 和文本模式中选择。

C.2.7. halt

halt Kickstart 命令是可选的。

在成功完成安装后停止系统。这和手动安装相似,Anaconda 会显示一条信息并等待用户按任意键来重启系统。在 Kickstart 安装过程中,如果没有指定完成方法,将使用这个选项作为默认选项。仅使用此命令一次。

语法

halt
Copy to Clipboard Toggle word wrap

备注

  • halt 命令等同于 shutdown -H 命令。详情请查看您系统上的 shutdown (8) 手册页。
  • 有关其他完成方法,请查看 poweroffrebootshutdown 命令。
  • 这个命令没有选项。

C.2.8. harddrive

harddrive Kickstart 命令是可选的。它使用红帽安装树或者本地驱动器中的完整安装 ISO 镜像执行安装。驱动器必须使用安装程序可挂载的文件系统格式化: ext2ext3ext4vfatxfs。仅使用此命令一次。

语法

harddrive OPTIONS
Copy to Clipboard Toggle word wrap

选项

  • --partition= - 要从中安装的分区(如 sdb2)。
  • --dir= - 包含安装树 variant 目录或完整安装 DVD 的 ISO 镜像的目录。

示例

harddrive --partition=hdb2 --dir=/tmp/install-tree
Copy to Clipboard Toggle word wrap

备注

  • 在以前的版本中,harddrive 命令必须与 install 命令一同使用。install 命令已弃用,并且可以自行使用 harddrive,因为它表示 安装
  • 要实际运行安装,您必须指定 cdrom,harddrive,hmc,nfs,liveimg,ostreesetup,rhsm, 或 url 其中之一,除非inst.repo 选项在内核命令行上指定了。

C.2.9. install (已弃用)

重要

install Kickstart 命令在 Red Hat Enterprise Linux 8 中已弃用。使用它的方法作为单独的命令。

install Kickstart 命令是可选的。它指定了默认的安装模式。

语法

install
installation_method
Copy to Clipboard Toggle word wrap

备注

  • install 命令后必须跟随安装方法命令。安装方法命令必须位于单独的行中。
  • 方法包括:

    • cdrom
    • harddrive
    • hmc
    • nfs
    • liveimg
    • url

    有关方法的详情,请查看其独立参考页面。

C.2.10. liveimg

liveimg Kickstart 命令是可选的。它从磁盘镜像而不是软件包执行安装。仅使用此命令一次。

语法

liveimg --url=SOURCE [OPTIONS]
Copy to Clipboard Toggle word wrap

必填选项

  • --url= - 从其中安装的位置。支持的协议包括 HTTPHTTPSFTPfile

可选选项

  • --url= - 从其中安装的位置。支持的协议包括 HTTPHTTPSFTPfile
  • --proxy= - 指定在执行安装时要使用的 HTTPHTTPS 或者 FTP 代理。
  • --checksum= - 包含镜像文件的 SHA256 校验和的可选参数,用于验证。
  • --noverifyssl - 连接到 HTTPS 服务器时禁用 SSL 验证。

示例

liveimg --url=file:///images/install/squashfs.img --checksum=03825f567f17705100de3308a20354b4d81ac9d8bed4bb4692b2381045e56197 --noverifyssl
Copy to Clipboard Toggle word wrap

备注

  • 镜像可以是来自实时 ISO 镜像的 squashfs.img 文件、压缩的 tar 文件(.tar.tbz.tgz.txz.tar.bz2.tar.gz.tar.xz.),或者安装介质可以挂载的任何文件系统。支持的文件系统有 ext2ext3ext4vfatxfs
  • liveimg 安装模式与驱动程序磁盘一起使用时,磁盘中的驱动程序不会自动包含在安装的系统中。如有必要,应手动安装这些驱动程序,或在 kickstart 脚本的 %post 部分中安装这些驱动程序。
  • 要实际运行安装,您必须指定 cdrom,harddrive,hmc,nfs,liveimg,ostreesetup,rhsm, 或 url 其中之一,除非inst.repo 选项在内核命令行上指定了。
  • 在以前的版本中,liveimg 命令必须与 install 命令一同使用。install 命令已弃用,liveimg 可以自行使用,因为它代表 install

C.2.11. logging

logging Kickstart 命令是可选的。它控制在安装过程中 Anaconda 的错误日志。它对安装的系统没有影响。仅使用此命令一次。

只支持使用 TCP 记录日志。对于远程日志记录,请确保在远程服务器上打开您在 --port= 选项中指定的端口号。默认端口为 514。

语法

logging OPTIONS
Copy to Clipboard Toggle word wrap

可选选项

  • --host= - 向给定的远程主机发送日志信息,该主机必须配置有一个 syslogd 进程,以接受远程记录。
  • --port= - 如果远程 syslogd 进程使用默认端口以外的端口,请使用这个选项进行设置。
  • --level= - 指定 tty3 上出现的最小信息级别。无论这个级别是什么,仍会将所有的信息发送到日志文件。可能的值有 debuginfowarningerrorcritical

C.2.12. mediacheck

mediacheck Kickstart 命令是可选的。该命令强制安装程序在开始安装前执行介质检查。因为这个命令需要在执行安装时有人工参与,因此它默认被禁用。仅使用此命令一次。

语法

mediacheck
Copy to Clipboard Toggle word wrap

备注

  • 这个 Kickstart 命令等同于 rd.live.check 引导选项。
  • 这个命令没有选项。

C.2.13. nfs

nfs Kickstart 命令是可选的。它从指定的 NFS 服务器执行安装。仅使用此命令一次。

语法

nfs OPTIONS
Copy to Clipboard Toggle word wrap

选项

  • --server= - 要从中安装的服务器(主机名或 IP)。
  • --dir= - 包含安装树 variant 目录的目录。
  • --opts= - 用于挂载 NFS 导出的挂载选项(可选)。

示例

nfs --server=nfsserver.example.com --dir=/tmp/install-tree
Copy to Clipboard Toggle word wrap

备注

  • 在以前的版本中,nfs 命令必须与 install 命令一同使用。install 命令已弃用,NFS 可以自行使用,因为它代表 install
  • 要实际运行安装,您必须指定 cdrom,harddrive,hmc,nfs,liveimg,ostreesetup,rhsm, 或 url 其中之一,除非inst.repo 选项在内核命令行上指定了。

C.2.14. ostreesetup

ostreesetup Kickstart 命令是可选的。它被用来设置基于 OStree 的安装。仅使用此命令一次。

语法

ostreesetup --osname=OSNAME [--remote=REMOTE] --url=URL --ref=REF [--nogpg]
Copy to Clipboard Toggle word wrap

必须的选项

  • --osname=OSNAME - 用于操作系统安装的管理根.
  • --url=URL - 要从中安装的存储库的 URL。
  • --ref=REF - 用于安装的软件仓库中的分支名称。

可选选项:

  • --remote=REMOTE - 远程存储库位置。
  • --nogpg - 禁用 GPG 密钥验证。

备注

C.2.15. poweroff

poweroff Kickstart 命令是可选的。它会在安装成功后关闭系统并关闭电源。通常,在手动安装过程中,Anaconda 会显示一条信息并等待用户按任意键来重新引导系统。仅使用此命令一次。

语法

poweroff
Copy to Clipboard Toggle word wrap

备注

  • poweroff 选项等同于 shutdown -P 命令。详情请查看您系统上的 shutdown (8) 手册页。
  • 有关其他完成方法,请查看 haltrebootshutdown Kickstart 命令。如果没有在 Kickstart 文件中明确指定其他方法,则 halt 选项是默认的完成方法。
  • poweroff 命令高度依赖于所使用的系统硬件。特别是,某些硬件部件如 BIOS、APM(高级电源管理)和 ACPI(高级配置和电源接口)必须能和系统内核交互。有关系统 APM/ACPI 功能的更多信息,请参阅硬件文档。
  • 这个命令没有选项。

C.2.16. reboot

reboot Kickstart 命令是可选的。它指示安装程序在安装成功(没有参数)后重启。通常,Kickstart 会显示信息并等待用户按任意键来重新引导系统。仅使用此命令一次。

语法

reboot OPTIONS
Copy to Clipboard Toggle word wrap

选项

  • --eject - 在重新启动前尝试弹出可引导介质(DVD、USB 或其他介质)。
  • --kexec - 使用 kexec 系统调用而不是执行完全重启,这样可立即将安装的系统加载到内存中,绕过通常由 BIOS 或固件执行的硬件初始化。

    重要

    这个选项已弃用,仅作为技术预览使用。有关红帽对技术预览功能支持范围的详情,请查看 技术预览功能支持范围 文档。

    使用 kexec 时,设备寄存器(通常会在系统完全重启后清除)可能会继续填写数据,这可能会给某些设备驱动程序造成问题。

备注

  • 使用 reboot 选项可能会导致安装无限循环,具体取决于安装介质和方法。
  • reboot 选项等同于 shutdown -r 命令。详情请查看您系统上的 shutdown (8) 手册页。
  • 在 64 位 IBM Z 中使用命令行模式安装时,指定 reboot 以完全自动安装。
  • 有关其他完成方法,请查看 haltpoweroffshutdown Kickstart 选项。如果没有在 Kickstart 文件中明确指定其他方法,则 halt 选项是默认的完成方法。

C.2.17. rhsm

rhsm Kickstart 命令是可选的。它指示安装程序从 CDN 注册并安装 RHEL。仅使用此命令一次。

在注册系统时,rhsm Kickstart 命令不需要使用自定义 %post 脚本。

选项

  • --orgrganization= - 使用组织 ID 从 CDN 注册和安装 RHEL。
  • --activation-key= - 使用激活码从 CDN 注册和安装 RHEL。选项可以多次使用,每个激活密钥使用一次,只要使用的激活密钥已注册到订阅中。
  • --connect-to-insights - 将目标系统连接到 Red Hat Insights。
  • --proxy= - 设置 HTTP 代理。
  • 要使用 rhsm Kickstart 命令将安装源存储库切换到 CDN,您必须满足以下条件:

    • 在内核命令行上,您已使用 inst.stage2=<URL> 来获取安装镜像,但没有使用 inst.repo= 指定安装源。
    • 在 Kickstart 文件中,您尚未使用 urlcdromharddriveliveimgnfsostree 设置命令指定安装源。
  • 使用引导选项指定或者包含在 Kickstart 文件中的安装源 URL 优先于 CDN,即使 Kickstart 文件包含带有有效凭证的 rhsm 命令。已注册该系统,但会通过 URL 安装源进行安装。这样可保证早期安装进程正常运行。

C.2.18. shutdown

shutdown Kickstart 命令是可选的。它会在安装成功完成后关闭系统。仅使用此命令一次。

语法

shutdown
Copy to Clipboard Toggle word wrap

备注

  • shutdown Kickstart 选项等同于 shutdown 命令。详情请查看您系统上的 shutdown (8) 手册页。
  • 有关其他完成方法,请查看 haltpoweroffreboot Kickstart 选项。如果没有在 Kickstart 文件中明确指定其他方法,则 halt 选项是默认的完成方法。
  • 这个命令没有选项。

C.2.19. sshpw

sshpw Kickstart 命令是可选的。

在安装过程中,您可以与安装程序交互并通过 SSH 连接监控其进度。使用 sshpw 命令创建登录的临时帐户。该命令的每个实例都会创建一个只存在于安装环境中的单独帐户。这些不会转移到系统里。

语法

sshpw --username=name [OPTIONS] password
Copy to Clipboard Toggle word wrap

必填选项

  • --username=name - 提供用户名称。这个选项是必需的。
  • password - 用户要使用的密码。这个选项是必需的。

可选选项

  • --iscrypted - 如果给出这个选项,则假设 password 参数已被加密。这个选项与 --plaintext 相互排斥。要生成加密的密码,可以使用 Python:

    $ python3 -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'
    Copy to Clipboard Toggle word wrap

    这会使用随机 salt 为密码生成 sha512 兼容哈希。

  • --plaintext - 如果给出这个选项,则假设 password 参数为纯文本。这个选项与 --iscrypted 相互排斥
  • --lock - 如果给出这个选项,则默认锁定这个帐户。这意味着用户无法从控制台登录。
  • --sshKey - 如果给出这个选项,则 <password> 字符串被解释为 ssh 密钥值。

备注

  • 默认情况下,ssh 服务器不会在安装过程中启动。要使 ssh 在安装过程中可用,使用内核引导选项 inst.sshd 引导系统。
  • 如果要禁用 root ssh 访问,同时允许其他用户 ssh 访问,请使用:

    sshpw --username=example_username example_password --plaintext
    sshpw --username=root example_password --lock
    Copy to Clipboard Toggle word wrap
  • 要简单地禁用 root ssh 访问,请使用:

    sshpw --username=root example_password --lock
    Copy to Clipboard Toggle word wrap

C.2.20. text

text Kickstart 命令是可选的。它在文本模式下执行 Kickstart 安装。Kickstart 安装默认是以图形模式执行的。仅使用此命令一次。

语法

text [--non-interactive]
Copy to Clipboard Toggle word wrap

选项

  • --non-interactive - 以完全非互动模式执行安装。这个模式将在用户交互需要时终止安装。

备注

  • 对于完全自动安装,您必须在 Kickstart 文件中指定可用模式之一(图形文本命令行),或者必须使用 console= 引导选项。如果没有指定模式,系统会尽可能使用图形模式,或者提示您从 VNC 和文本模式中选择。

C.2.21. url

url Kickstart 命令是可选的。它用来使用 FTP、HTTP 或者 HTTPS 协议从远程服务器上的安装树镜像进行安装。您只能指定一个 URL。仅使用此命令一次。

您必须指定 --url--metalink--mirrorlist 选项之一。

语法

url --url=FROM [OPTIONS]
Copy to Clipboard Toggle word wrap

选项

  • --url=FROM - 指定要从中安装的 HTTPHTTPSFTP文件位置。
  • --mirrorlist= - 指定要从中安装的镜像 URL。
  • --proxy= - 指定在安装过程中要使用的 HTTPHTTPS 或者 FTP 代理。
  • --noverifyssl - 连接到 HTTPS 服务器时禁用 SSL 验证。
  • --metalink=URL - 指定要从中安装的 metalink URL。变量替换用于 URL 中的 $releasever$basearch

示例

  • 从 HTTP 服务器安装:

    url --url=http://server/path
    Copy to Clipboard Toggle word wrap
  • 从 FTP 服务器安装:

    url --url=ftp://username:password@server/path
    Copy to Clipboard Toggle word wrap

  • 在以前的版本中,url 命令必须与 install 命令一同使用。install 命令已弃用,并且 url 可以自行使用,因为它代表 install
  • 要实际运行安装,您必须指定 cdrom,harddrive,hmc,nfs,liveimg,ostreesetup,rhsm, 或 url 其中之一,除非inst.repo 选项在内核命令行上指定了。

C.2.22. vnc

vnc Kickstart 命令是可选的。它允许通过 VNC 远程查看图形安装。

与文本模式相比,这个模式通常是首选模式。因为在文本模式中有某些大小和语言的限制。如果没有附加选项,这个命令将在不需要密码的系统中启动 VNC 服务器,并显示连接它所需要的详情。仅使用此命令一次。

语法

vnc [--host=host_name] [--port=port] [--password=password]
Copy to Clipboard Toggle word wrap

选项

--host=
连接在给定主机名中侦听的 VNC viewer 进程。
--port=
提供远程 VNC viewer 进程侦听的端口。如果没有提供,Anaconda 将使用 VNC 默认端口 5900。
--password=
设定必须提供用来连接到 VNC 会话的密码。这是可选的,但推荐使用。

C.2.23. hmc

hmc kickstart 命令是可选的。通过在 IBM Z 上使用 SE/HMC ,使用它从安装介质进行安装。这个命令没有任何选项。

语法

hmc
Copy to Clipboard Toggle word wrap

C.2.24. %include

%include Kickstart 命令是可选的。

使用 %include 命令,将另一文件的内容包含在 Kickstart 文件中,就好像其内容在 Kickstart 文件中的 %include 命令的位置一样。

它的内容只在 %pre 脚本部分之后评估,因此可用于将脚本生成的文件包含在 %pre 部分中。要在评估 %pre 部分之前包含文件,请使用 %ksappend 命令。

语法

%include path/to/file
Copy to Clipboard Toggle word wrap

C.2.25. %ksappend

%ksappend Kickstart 命令是可选的。

使用 %ksappend 命令将另一个文件的内容包含在 Kickstart 文件中,就好像其内容在 Kickstart 文件中 %ksappend 命令的位置一样。

这个内容在 %pre 脚本部分之前评估,这与 %include 命令包括的内容不同。

语法

%ksappend path/to/file
Copy to Clipboard Toggle word wrap

C.3. kickstart 命令进行系统配置

这个列表中的 Kickstart 命令配置结果系统的更多详情,比如用户、库或服务。

C.3.1. auth 或 authconfig(已弃用)

重要

使用新的 authselect 命令而不是已弃用的 authauthconfig Kickstart 命令。authauthconfig 只用于有限的需要满足向后兼容性的情况。

authauthconfig Kickstart 命令是可选的。它使用 authconfig 工具为系统设置身份验证选项,也可以在安装完成后在命令行中运行该工具。仅使用此命令一次。

语法

authconfig [OPTIONS]
Copy to Clipboard Toggle word wrap

备注

  • 在以前的版本中,authauthconfig Kickstart 命令称为 authconfig 工具。在 Red Hat Enterprise Linux 8 中已弃用这个工具。这些 Kickstart 命令现在使用 authselect-compat 工具调用新的 authselect 工具。有关兼容性层及其已知问题的描述,请参阅 authselect-migration(7) 手册页。安装程序将自动检测弃用命令的使用并在系统上安装 authselect-compat 软件包以提供兼容性层。
  • 默认使用影子密码。
  • 当使用带有用于安全的 SSL 协议的 OpenLDAP 时,请确保在服务器配置中禁用了 SSLv2SSLv3 协议。这是因为 POODLE SSL 漏洞(CVE-2014-3566)。如需更多信息,请参阅红帽知识库解决方案 解决 POODLE SSLv3.0 漏洞

C.3.2. authselect

authselect Kickstart 命令是可选的。它使用 authselect 命令为系统设置身份验证选项,也可以在安装完成后在命令行中运行该命令。仅使用此命令一次。

语法

authselect [OPTIONS]
Copy to Clipboard Toggle word wrap

备注

  • 这个命令会将所有选项传递给 authselect 命令。详情请查看 authselect(8) 手册页和 authselect --help 命令。
  • 这个命令替换了 Red Hat Enterprise Linux 8 中已弃用的 authauthconfig 命令以及 authconfig 工具。
  • 默认使用影子密码。
  • 当使用带有用于安全的 SSL 协议的 OpenLDAP 时,请确保在服务器配置中禁用了 SSLv2SSLv3 协议。这是因为 POODLE SSL 漏洞(CVE-2014-3566)。如需更多信息,请参阅红帽知识库解决方案 解决 POODLE SSLv3.0 漏洞

C.3.3. firewall

firewall Kickstart 命令是可选的。它为安装的系统指定防火墙配置。

语法

firewall --enabled|--disabled [incoming] [OPTIONS]
Copy to Clipboard Toggle word wrap

必填选项

  • --enabled--enable - 拒绝那些不是响应出站请求(如 DNS 回复或 DHCP 请求)的传入连接。如果需要访问在这个机器中运行的服务,您可以选择允许指定的服务通过防火墙。
  • --disabled--disable - 不配置任何 iptables 规则。

可选选项

  • --trust - 在此处列出设备,如 em1,允许进出该设备的所有流量通过防火墙。要列出多个设备,请多次使用这个选项,如 --trust em1 --trust em2。不要使用逗号分隔的格式,如 --trust em1、em2
  • --remove-service - 不允许服务穿过防火墙。
  • incoming - 使用以下服务中的一个或多个来替换,从而允许特定的服务穿过防火墙。

    • --ssh
    • --smtp
    • --http
    • --ftp
  • --port= - 您可以使用 port:protocol 格式指定允许通过防火墙的端口。例如,要允许 IMAP 通过您的防火墙,可指定 imap:tcp。数字端口也可以明确指定;例如,要允许 UDP 数据包在端口 1234 到,请指定 1234:udp。要指定多个端口,用逗号将它们隔开。
  • --service= - 此选项提供允许服务穿过防火墙的更高级别方法。有些服务(如 cupsvahi 等)需要打开多个端口或其他特殊配置才能使服务正常工作。您可以使用 --port 选项指定各个端口,或者指定 --service= 并一次性全部打开它们。

    有效选项是 firewalld 软件包中 firewall-offline-cmd 程序可识别的任何内容。如果 firewalld 服务正在运行,firewall-cmd --get-services 会提供已知服务名称的列表。

  • --use-system-defaults - 完全不配置防火墙。这个选项告诉 anaconda 不做任何工作,并允许系统依赖软件包或者 ostree 提供的默认值。如果将这个选项与其它选项一同使用,则将忽略所有其他选项。

C.3.4. group

group Kickstart 命令是可选的。它在系统中创建新用户组。

group --name=name [--gid=gid]
Copy to Clipboard Toggle word wrap

必填选项

  • --name= - 提供组的名称。

可选选项

  • --gid= - 组的 GID。如果没有提供,则默认使用下一个可用的非系统 GID。

备注

  • 如果具有指定名称或 GID 的组群已经存在,这个命令会失败。
  • user 命令可用于为新创建的用户创建新组。

C.3.5. keyboard(必需)

keyboard Kickstart 命令是必需的。它为系统设置一个或多个可用的键盘布局。仅使用此命令一次。

语法

keyboard --vckeymap|--xlayouts OPTIONS
Copy to Clipboard Toggle word wrap

选项

  • --vckeymap= - 指定应使用的 VConsole 键映射。有效名称与 /usr/lib/kbd/keymaps/xkb/ 目录中的文件列表对应,没有 .map.gz 扩展名。
  • --xlayouts= - 指定 X 布局列表,该列表应当用作逗号分隔的列表,没有空格。接受与 setxkbmap(1) 相同格式的值,可以是 布局 格式(如 as cz),也可以是 布局变体 格式(如 cz (qwerty))。

    可以在下方的 xkeyboard-config(7) man page 中查看所有可用 布局

  • --switch= - 指定布局切换选项列表(在多个键盘布局之间切换的快捷方式)。必须使用逗号分开多个选项,没有空格。接受与 setxkbmap(1) 相同格式的值。

    您可以在 xkeyboard-config(7) man page 上的 Options 下查看可用的切换选项。

备注

  • 必须使用 --vckeymap=--xlayouts= 选项。

示例

以下示例使用 --xlayouts= 选项设置了两种键盘布局(English (US)Czech (qwerty)),并允许使用 Alt+Shift 在它们之间进行切换:

keyboard --xlayouts=us,'cz (qwerty)' --switch=grp:alt_shift_toggle
Copy to Clipboard Toggle word wrap

C.3.6. lang(必需)

lang Kickstart 命令是必需的。它设置了在安装过程中使用的语言以及系统的默认语言。仅使用此命令一次。

语法

lang language [--addsupport=language,...]
Copy to Clipboard Toggle word wrap

必填选项

  • language - 安装对此语言的支持并将其设置为系统默认。

可选选项

  • --addsupport= - 添加对其他语言的支持。格式为使用逗号分开的列表,无空格。例如:

    lang en_US --addsupport=cs_CZ,de_DE,en_UK
    Copy to Clipboard Toggle word wrap

备注

  • locale -a | grep _localectl list-locales | grep _ 命令返回支持的区域列表。
  • 文本模式安装中不支持某些语言(比如中文、日语、韩文和印度的语言)。如果您使用 lang 命令指定这些语言中的一种,安装过程将继续使用英语,但安装的系统会使用您选择的语言作为其默认语言。

示例

要将语言设置为英语,Kickstart 文件应包含以下行:

lang en_US
Copy to Clipboard Toggle word wrap

C.3.7. module

module Kickstart 命令是可选的。使用这个命令在 kickstart 脚本中启用软件包模块流。

语法

module --name=NAME [--stream=STREAM]
Copy to Clipboard Toggle word wrap

必填选项

--name=
指定要启用的模块名称。使用实际名称替换 NAME

可选选项

--stream=

指定要启用的模块流的名称。将 STREAM 替换为实际名称。

您不需要为定义的默认流的模块指定此选项。对于没有默认流的模块,这个选项是强制的,省略它将导致错误。无法多次启用带有不同流的模块。

备注

  • 通过这个命令和 %packages 部分的组合,您可以安装由启用的模块和流组合提供的软件包,而无需明确指定模块和流。安装软件包前必须启用模块。使用 module 命令启用模块后,您可以通过在 %packages 部分列出此模块启用的软件包来安装它们。
  • 单个 module 命令只能启用单个模块和流组合。要启用多个模块,请使用多个 module 命令。无法多次启用带有不同流的模块。
  • 在 Red Hat Enterprise Linux 8 中,模块只存在于 AppStream 存储库中。要列出提供的模块,请在安装了具有有效订阅的 Red Hat Enterprise Linux 8 系统上使用 yum module list 命令。

C.3.8. repo

repo Kickstart 命令是可选的。它配置了作为软件包安装来源的额外的 yum 仓库。您可以添加多个 repo 行。

语法

repo --name=repoid [--baseurl=url|--mirrorlist=url|--metalink=url] [OPTIONS]
Copy to Clipboard Toggle word wrap

必填选项

  • --name= - 存储库 ID。这个选项是必需的。如果库的名称与另一个之前添加的库冲突,则会忽略它。因为安装程序使用预设置程序库列表,这意味着您无法添加名称与预先设置的库的名称相同的库。

URL options

这些选项是互斥的,也是可选的。这里不支持 yum 库配置文件中可以使用的变量。您可以使用字符串 $releasever$basearch,它们由 URL 中的对应值替换。

  • --baseurl= - 存储库的 URL。
  • --mirrorlist= - 指向存储库镜像列表的 URL。
  • --metalink= - 存储库的 metalink 的 URL。

可选选项

  • --install - 将已安装系统上的仓库配置保存在 /etc/yum.repos.d/ 目录中。如果不使用这个选项,在 Kickstart 文件中配置的程序库将只在安装过程中使用,而无法在安装的系统中使用。
  • --cost= - 为这个存储库分配成本的整数值。如果多个库提供同样的软件包,这个数字就会被用来决定优先使用哪个库。成本低的软件仓库优先于成本高的软件仓库。
  • --excludepkgs= - 不能从此存储库拉取的软件包名称,是一个以逗号分隔的列表。如果多个存储库提供同样的软件包,您希望这个软件包来自特定的仓库,可以使用它。可接受完整软件包名称(如 publican)和 globs(如 gnome-*)。
  • --includepkgs= - 允许从此存储库拉取的软件包名称和 glob 的逗号分隔列表。该程序仓库提供的其他软件包将被忽略。如果您只想从库中安装单个软件包或软件包组而不包括该程序库提供的所有其他软件包,这个选项就很有用了。
  • --proxy=[protocol://][username[:password]@]host[:port ] - 指定仅用于此存储库的 HTTP/HTTPS/FTP 代理。此设置不会影响任何其他存储库,也不会影响在 HTTP 安装中如何获取 install.img
  • --noverifyssl - 连接到 HTTPS 服务器时禁用 SSL 验证。

备注

  • 用于安装的软件仓库必须是稳定版本。如果在安装完成前修改库,则安装会失败。

C.3.9. rootpw(必需)

需要 rootpw Kickstart 命令。它将系统的根密码设置为 password 参数的值。仅使用此命令一次。

语法

rootpw [--iscrypted|--plaintext] [--lock] password
Copy to Clipboard Toggle word wrap

必填选项

  • password - 密码规格。纯文本或者加密字符串。请参阅以下 --iscrypted--plaintext

选项

  • --iscrypted - 如果给出这个选项,则假设 password 参数已被加密。这个选项与 --plaintext 相互排斥。要创建一个加密的密码,您可以使用 python:

    $ python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'
    Copy to Clipboard Toggle word wrap

    这会使用随机 salt 为密码生成 sha512 兼容哈希。

  • --plaintext - 如果给出这个选项,则假设 password 参数为纯文本。这个选项与 --iscrypted 相互排斥。
  • --lock - 如果给出这个选项,则默认锁定 root 帐户。这意味着 root 用户无法从控制台登录。这个选项还在图形和文本手动安装中禁用 Root 密码 页面。

C.3.10. selinux

selinux Kickstart 命令是可选的。它在安装的系统中设定 SELinux 状态。默认 SELinux 策略为 enforcing。仅使用此命令一次。

语法

selinux [--disabled|--enforcing|--permissive]
Copy to Clipboard Toggle word wrap

选项

--enforcing
使用默认目标策略 enforcing 启用 SELinux。
--permissive
根据 SELinux 策略输出警告,但并不强制执行该策略。
--disabled
在系统上完全禁用 SELinux。

C.3.11. services

services Kickstart 命令是可选的。它修改在默认 systemd 目标下运行的默认服务集合。禁用的服务列表会在启用的服务列表前进行处理。因此,如果服务出现在这两个列表中,它将被启用。

语法

services [--disabled=list] [--enabled=list]
Copy to Clipboard Toggle word wrap

选项

  • --disabled= - 禁用在逗号分隔列表中给出的服务。
  • --enabled= - 启用逗号分隔列表中给出的服务。

  • 当使用 services 元素启用 systemd 服务时,请确保在 %packages 部分中包含指定服务文件的软件包。
  • 使用逗号分开多个服务,没有空格。例如,要禁用四个服务,请输入:

    services --disabled=auditd,cups,smartd,nfslock
    Copy to Clipboard Toggle word wrap

    如果您包含任何空格,Kickstart 只启用或禁用第一个空格前的服务。例如:

    services --disabled=auditd, cups, smartd, nfslock
    Copy to Clipboard Toggle word wrap

    这仅禁用 auditd 服务。要禁用所有四个服务,此条目不得包含空格。

C.3.12. skipx

skipx Kickstart 命令是可选的。如果存在,安装的系统上就不会配置 X。

如果您在软件包选择选项中安装 display manager,这个软件包会创建一个 X 配置,安装的系统会默认使用 graphical.target。这会覆盖 skipx 选项的影响。仅使用此命令一次。

语法

skipx
Copy to Clipboard Toggle word wrap

备注

  • 这个命令没有选项。

C.3.13. sshkey

sshkey Kickstart 命令是可选的。它将 SSH 密钥添加到已安装系统上指定用户的 authorized_keys 文件中。

语法

sshkey --username=user "ssh_key"
Copy to Clipboard Toggle word wrap

必填选项

  • --username= - 要安装密钥的用户。
  • ssh_key - 完整的 SSH 密钥指纹。它必须用引号括起。

C.3.14. syspurpose

syspurpose Kickstart 命令是可选的。使用它来设置系统在安装后的系统目的。这些信息有助于在系统中应用正确的订阅授权。仅使用此命令一次。

注意

Red Hat Enterprise Linux 8.6 及更新的版本使您能够通过使 角色、service-level、useaddons 子命令在一个 subscription-manager syspurpose 模块下提供来管理和显示系统目的属性。在以前的版本中,系统管理员使用四个独立的 syspurpose 命令来管理每个属性。从 RHEL 8.6 开始,这个独立的 syspurpose 命令被弃用,并计划在 RHEL 9 中删除。红帽将在当前发行生命周期中提供对这个功能的 bug 修复和支持,但此功能将不再获得改进。从 RHEL 9 开始,单个 subscription-manager syspurpose 命令及其相关的子命令是使用系统用途的唯一方法。

语法

syspurpose [OPTIONS]
Copy to Clipboard Toggle word wrap

选项

  • --role= - 设置预期的系统角色。可用值有:

    • Red Hat Enterprise Linux Server
    • Red Hat Enterprise Linux Workstation
    • Red Hat Enterprise Linux Compute 节点
  • --SLA= - 设置服务级别协议。可用值有:

    • Premium(高级)
    • Standard(标准)
    • Self-Support(自助)
  • --usage= - 系统预定用途。可用值有:

    • Production
    • Disaster Recovery
    • Development/Test
  • --Addon= - 指定额外的层次产品或功能。您可以多次使用这个选项。

备注

  • 输入有空格的值,并使用双引号包括它们:

    syspurpose --role="Red Hat Enterprise Linux Server"
    Copy to Clipboard Toggle word wrap
  • 虽然强烈建议您配置系统目的,但它是 Red Hat Enterprise Linux 安装程序的可选功能。如果要在安装完成后启用系统目的,您可以使用 syspurpose 命令行工具完成此操作。
注意

Red Hat Enterprise Linux 8.6 及更新的版本使您能够通过使 角色、service-level、useaddons 子命令在一个 subscription-manager syspurpose 模块下提供来管理和显示系统目的属性。在以前的版本中,系统管理员使用四个独立的 syspurpose 命令来管理每个属性。从 RHEL 8.6 开始,这个独立的 syspurpose 命令被弃用,并计划在 RHEL 9 中删除。红帽将在当前发行生命周期中提供对这个功能的 bug 修复和支持,但此功能将不再获得改进。从 RHEL 9 开始,单个 subscription-manager syspurpose 命令及其相关的子命令是使用系统用途的唯一方法。

C.3.15. timezone(必需)

timezone Kickstart 命令是必需的。它设置系统时区。仅使用此命令一次。

语法

timezone timezone [OPTIONS]
Copy to Clipboard Toggle word wrap

必填选项

  • timezone - 为系统设定的时区。

可选选项

  • --UTC - 如果存在,系统假定硬件时钟被设置为 UTC(格林威治 Mean)时间。
  • --nontp - 禁用 NTP 服务自动启动。
  • --ntpservers= - 指定用作没有空格的逗号分隔列表的 NTP 服务器列表。

备注

在 Red Hat Enterprise Linux 8 中,时区名使用由 pytz 软件包提供的 pytz.all_timezones 列表进行验证。在以前的版本中,这些名称会根据 pytz.common_timezones 进行验证,它是当前使用列表的子集。请注意,图形和文本模式界面仍然使用更受限制的 pytz.common_timezones 列表;您必须使用 Kickstart 文件来使用额外的时区定义。

C.3.16. user

user Kickstart 命令是可选的。它在系统上创建新用户。

语法

user --name=username [OPTIONS]
Copy to Clipboard Toggle word wrap

必填选项

  • --name= - 提供用户名称。这个选项是必需的。

可选选项

  • --GECOS= - 为用户提供 GECOS 信息。这个字符串包括使用逗号分开的各种具体系统字段。它通常用来指定用户全名、办公室号码等等。详情请查看 passwd(5) 手册页。
  • --groups= - 除默认组外,还有以逗号分隔的用户应属于的组名列表。组群必须在创建该用户帐户前就已经存在。请参阅 group 命令。
  • --homedir= - 用户的主目录。如果没有提供,则默认为 /home/username
  • --lock - 如果给出这个选项,则默认锁定这个帐户。这意味着用户无法从控制台登录。这个选项还在图形和文本手动安装中禁用创建用户 页面。
  • --password= - 新用户的密码。如果没有提供,则默认锁定该帐户。
  • --iscrypted - 如果给出这个选项,则假设 password 参数已被加密。这个选项与 --plaintext 相互排斥。要创建一个加密的密码,您可以使用 python:

    $ python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'
    Copy to Clipboard Toggle word wrap

    这会使用随机 salt 为密码生成 sha512 兼容哈希。

  • --plaintext - 如果给出这个选项,则假设 password 参数为纯文本。这个选项与 --iscrypted 相互排斥
  • --shell= - 用户的登录 shell.如果没有提供,则使用系统默认。
  • --uid= - 用户的 UID(用户 ID)。如果没有提供,则默认使用下一个可用的非系统 UID。
  • --gid= - 用于用户组的 GID(组 ID)。如果没有提供,则默认使用下一个可用的非系统组群 ID。

备注

  • 请考虑使用 --uid--gid 选项设置常规用户及其默认组的 ID,范围从 5000 开始,而不是 1000。这是因为为系统用户和组保留的范围( 0999 )将来可能会增加,因此与常规用户的 ID 重叠。

    有关在安装后更改最小 UID 和 GID 限制,以确保您在创建用户时可以自动应用您选择的 UID 和 GID 范围,请参阅配置基本系统设置 文档中的使用 umask 为新文件设置默认权限部分。

  • 使用不同权限创建的文件和目录,由用来创建文件或目录的应用程序指定。例如,mkdir 命令创建启用了所有权限的目录。但是,应用无法为新创建的文件授予某些权限,如 user file-creation mask 设置所指定。

    user file-creation mask 可通过 umask 命令控制。新用户的 user file-creation mask 默认设置由安装系统上的 /etc/login.defs 配置文件中的 UMASK 变量定义。如果未设置,则默认为 022。这意味着,默认情况下,当应用程序创建一个文件时,会防止为该文件所有者以外的用户授予写入权限。不过,这可以被其他设置或脚本覆盖。

    如需了解更多信息,请参阅配置基本系统设置文档中的 使用 umask 配置基本系统设置

C.3.17. xconfig

xconfig Kickstart 命令是可选的。它配置 X 窗口系统。仅使用此命令一次。

语法

xconfig [--startxonboot]
Copy to Clipboard Toggle word wrap

选项

  • --startxonboot - 在安装的系统上使用图形登录。

备注

  • 因为 Red Hat Enterprise Linux 8 没有包括 KDE 桌面环境,请不要使用上游中记录的 --defaultdesktop=

C.4. kickstart 命令用于网络配置

在这个列表中的 Kickstart 命令可让您在系统中配置联网。

C.4.1. network(可选)

可选的 network Kickstart 命令配置目标系统的网络信息,并在安装环境中激活网络设备。第一个 network 命令中指定的设备会自动激活。您还可以使用 --activate 选项明确要求激活设备。

警告

重新配置正在运行的安装程序所使用的活跃状态的网络设备可能导致安装失败或冻结。在这种情况下,请避免重新配置用来通过 NFS 访问安装程序运行时镜像(stage2)的网络设备。

语法

network OPTIONS
Copy to Clipboard Toggle word wrap

选项

  • --activate - 在安装环境中激活这个设备。

    如果您在已经激活的设备中使用 --activate 选项(例如,使用引导选项配置的界面以便系统可以检索 Kickstart 文件),则会重新激活该设备以使用 Kickstart 文件中指定的详情。

    使用 --nodefroute 选项可防止设备使用默认路由。

  • --no-activate - 不要在安装环境中激活这个设备。

    默认情况下,无论 --activate 选项是什么,Anaconda 都会激活 Kickstart 文件中的第一个网络设备。您可以使用 --no-activate 选项禁用默认设置。

  • --bootproto= - dhcpbootpibftstatic 之一。默认选项为 dhcpdhcpbootp 选项的处理方式相同。要禁用设备的 ipv4 配置,可使用 --noipv4 选项。

    注意

    这个选项配置设备的 ipv4 配置。对于 ipv6 配置,请使用 --ipv6--ipv6gateway 选项。

    DHCP 方法使用 DHCP 服务器系统来获得它的网络配置。BOOTP 方法类似,需要 BOOTP 服务器来提供网络配置。要指示系统使用 DHCP:

    network --bootproto=dhcp
    Copy to Clipboard Toggle word wrap

    要指示机器使用 BOOTP 获取其网络配置,在 Kickstart 文件中使用以下行:

    network --bootproto=bootp
    Copy to Clipboard Toggle word wrap

    要指示机器使用 iBFT 中指定的配置,使用:

    network --bootproto=ibft
    Copy to Clipboard Toggle word wrap

    static 方法要求您在 Kickstart 文件中至少指定 IP 地址和子网掩码。这个信息是静态的,并在安装过程中和安装后使用。

    所有静态网络配置信息必须在一行中指定 ; 您不能象在命令行中换行一样使用反斜杠(\)来换行。

    network --bootproto=static --ip=10.0.2.15 --netmask=255.255.255.0 --gateway=10.0.2.254 --nameserver=10.0.2.1
    Copy to Clipboard Toggle word wrap

    您还可以同时配置多个名称服务器。要做到这一点,使用 --nameserver= 选项一次,并指定每个 IP 地址,用逗号分开:

    network --bootproto=static --ip=10.0.2.15 --netmask=255.255.255.0 --gateway=10.0.2.254 --nameserver=192.168.2.1,192.168.3.1
    Copy to Clipboard Toggle word wrap
  • --device= - 使用 network 命令指定要配置的设备(最终在 Anaconda 中激活)。

    如果 在第一次 使用 network 命令时缺少 --device= 选项,则使用 inst.ks.device= Anaconda 引导选项的值(如果提供的话)。这被视为已弃用的行为;在大多数情况下,您应该始终为每个 network 命令指定 --device=

    如果缺少其 --device= 选项,则同一 Kickstart 文件中后续 network 命令的行为都会被取消指定。验证您是否为第一个以外的任何一个 network 命令指定这个选项。

    您可以使用以下任一方法指定要激活的设备:

    • 接口的设备名称,如 em1
    • 接口的 MAC 地址,例如 01:23:45:67:89:ab
    • 关键字 link,它指定链接为 up 状态的第一个接口
    • 关键字 bootif,它使用 pxelinux 在 BOOTIF 变量中设置的 MAC 地址。在 pxelinux.cfg 文件中设置 IPAPPEND 2,使 pxelinux 设置 BOOTIF 变量。

    例如:

    network --bootproto=dhcp --device=em1
    Copy to Clipboard Toggle word wrap
  • --ipv4-dns-search/--ipv6-dns-search - 手动设置 DNS 搜索域。您必须将这些选项与 --device 选项一起使用,并镜像其相应的 NetworkManager 属性,例如:

    network --device ens3 --ipv4-dns-search domain1.example.com,domain2.example.com
    Copy to Clipboard Toggle word wrap
  • --ipv4-ignore-auto-dns/--ipv6-ignore-auto-dns - 设置其来忽略 DHCP 中的 DNS 设置。您必须将这些选项与 --device 选项一起使用,这些选项不需要任何参数。
  • --ip= - 设备的 IP 地址。
  • --ipv6= - 设备的 IPv6 地址,格式为 address[/prefix length] - 例如,3ffe:ffff:0:1::1/128。如果省略了 prefix,则使用 64。您还可以使用 auto 进行自动配置,或使用 dhcp 仅进行 DHCPv6 配置(无路由器广告)。
  • --gateway= - 作为单一 IPv4 地址的默认网关。
  • --ipv6gateway= - 作为单一 IPv6 地址的默认网关。
  • --nodefroute - 防止被设置为默认路由的接口。当您激活使用 --activate= 选项的其他设备时,请使用这个选项,例如:iSCSI 目标的单独子网中的 NIC。
  • --nameserver= - DNS 名称服务器作为 IP 地址。要指定一个以上名称服务器,使用这个选项,并使用逗号分隔每个 IP 地址。
  • --netmask= - 安装系统的网络掩码。
  • --hostname= - 用于配置目标系统的主机名。主机名可以是完全限定域名 (FQDN),格式为 hostname.domainname,也可以是不包括域的短主机名。许多网络具有动态主机配置协议(DHCP)服务,该服务自动为连接的系统提供域名。要允许 DHCP 服务为这台机器分配域名,请只指定简短主机名。

    使用静态 IP 和主机名配置时,它取决于计划的系统用例是否使用短名称或 FQDN。红帽身份管理在置备过程中配置 FQDN,但有些第三方软件产品可能需要短名称。在任何一种情况下,要确保在所有情况下两种形式都可用,请在 /etc/hosts 中为主机添加一个条目,格式为 IP FQDN 短别名

    localhost 值意味着没有为目标系统配置特定的静态主机名,安装的系统的实际主机名在处理网络配置的过程中配置,例如,通过使用 DHCP 或 DNS 的 NetworkManager。

    主机名只能包含字母数字字符和 -.。主机名应等于或小于 64 个字符。主机名不能以 -. 开头或结尾要与 DNS 兼容,FQDN 的每个部分都应等于或小于 63 个字符,并且 FQDN 总长度(包括点)不应超过 255 个字符。

    如果您只想配置目标系统的主机名,请在 network 命令中使用 --hostname 选项,且不包含任何其他选项。

    如果您在配置主机名时提供附加选项,network 命令将使用指定的选项来配置设备。如果您没有使用 --device 选项指定要配置的设备,则使用默认的 --device link 值。另外,如果您不使用 --bootproto 选项指定协议,则该设备会被配置为默认使用 DHCP。

  • --ethtool= - 指定将传递给 ethtool 程序的网络设备的其他低级别设置。
  • --onboot= - 是否在引导时启用该设备。
  • --dhcpclass= - DHCP 类。
  • --mtu= - 设备的 MTU。
  • --noipv4 - 在这个设备上禁用 IPv4。
  • --noipv6 - 在这个设备上禁用 IPv6。
  • --bondslaves= - 使用这个选项时,由 --device= 选项指定的绑定设备会使用 --bondslaves= 选项中定义的辅助设备创建。例如:

    network --device=bond0 --bondslaves=em1,em2
    Copy to Clipboard Toggle word wrap

    以上命令创建了一个名为 bond0 的绑定设备,将 em1em2 接口用作其辅助设备。

  • --bondopts= - 绑定接口的可选参数列表,使用 --bondslaves=--device= 选项指定。这个列表中的选项必须以逗号(",")或分号(";")分开。如果某个选项本身包含一个逗号,请使用分号来分隔选项。例如:

    network --bondopts=mode=active-backup,balance-rr;primary=eth1
    Copy to Clipboard Toggle word wrap
    重要

    --bondopts=mode= 参数只支持完整的模式名称,如 balance-rrbroadcast,而不是其数字表示,如 03。有关可用和支持的模式的列表,请参阅 配置和管理网络指南

  • --vlanid= - 指定使用 --device= 中指定的设备作为父级创建的设备的虚拟 LAN (VLAN) ID 号(802.1q 标签)。例如,network --device=em1 --vlanid=171 创建虚拟 LAN 设备 em1.171
  • --interfaceName= - 为虚拟 LAN 设备指定自定义接口名称。当 --vlanid= 选项所生成的默认名称并不是您所需要的名称时,应使用此选项。此选项必须与 --vlanid= 一起使用。例如:

    network --device=em1 --vlanid=171 --interfacename=vlan171
    Copy to Clipboard Toggle word wrap

    以上命令在 em1 设备上创建一个名为 vlan171 的虚拟 LAN 接口,其 ID 为 171

    接口名称可以是任意名称(如 my-vlan),但在某些情况下,必须遵循以下约定:

    • 如果名称包含句点(.),则必须采用 NAME.ID 的形式。NAME 是任意的,但 ID 必须是 VLAN ID。例如: em1.171my-vlan.171
    • vlan 开头的名称必须使用 vlanID 的形式,如 vlan171
  • --teamslaves= - 由 --device= 选项指定的团队设备将使用这个选项中指定的辅助设备创建。辅助设备用逗号分开。辅助设备可以跟随其配置,这是单引号括起的 JSON 字符串,其中双引号用 \ 字符转义。例如:

    network --teamslaves="p3p1'{\"prio\": -10, \"sticky\": true}',p3p2'{\"prio\": 100}'"
    Copy to Clipboard Toggle word wrap

    另请参阅 --teamconfig= 选项。

  • --teamconfig= - 由双引号括起的组设备配置,这是一个 JSON 字符串,其中双引号由 \ 字符转义。设备名称由 --device= 选项指定,其辅助设备及其配置由 --teamslaves= 选项指定。例如:

    network --device team0 --activate --bootproto static --ip=10.34.102.222 --netmask=255.255.255.0 --gateway=10.34.102.254 --nameserver=10.34.39.2 --teamslaves="p3p1'{\"prio\": -10, \"sticky\": true}',p3p2'{\"prio\": 100}'" --teamconfig="{\"runner\": {\"name\": \"activebackup\"}}"
    Copy to Clipboard Toggle word wrap
  • --bridgeslaves= - 使用此选项时,将创建 --device= 选项指定的设备网桥,并将 --bridgeslaves= 选项中定义的设备添加到网桥中。例如:

    network --device=bridge0 --bridgeslaves=em1
    Copy to Clipboard Toggle word wrap
  • --bridgeopts= - 一个可选的、由逗号分隔的 桥接接口参数列表。可用值包括 stppriorityforward-delayhello-timemax-ageRunAsAny-time。有关这些参数的详情,请查看 nm-settings(5) 手册页中的 bridge setting 表,或者查看 网络配置设置规范

    有关网络桥接的常规信息,请参阅配置和管理网络文档。

  • --bindto=mac - 在安装的系统上将设备配置文件绑定到设备 MAC 地址(HWADDR),而不是默认绑定到接口名称(DEVICE)。这个选项独立于 --device= 选项 - 将应用 --bindto=mac ,即使同一 network 命令也指定了设备名称、linkbootif

  • 由于命名方案的变化,ethN 设备名称(如 eth0)在 Red Hat Enterprise Linux 中不再可用。有关设备命名方案的更多信息,请参阅上游文档可扩展网络接口名称
  • 如果您使用 Kickstart 选项或者引导选项指定网络中的安装程序库,但安装过程开始时无法使用网络,安装程序会在显示 安装概述窗口前,显示网络配置窗口以用于设置网络连接。如需了解更多详细信息,请参阅 配置网络和主机名选项

C.4.2. realm

realm Kickstart 命令是可选的。使用它加入 Active Directory 或 IPA 域。有关这个命令的更多信息,请参阅您系统上 realm (8) 手册页的 join 部分。

语法

realm join [OPTIONS] domain
Copy to Clipboard Toggle word wrap

必填选项

  • domain - 要加入的域。

选项

  • --computer-ou=OU= - 提供可分辨的机构单元名称以便创建计算机帐户。可识别名称的具体格式取决于客户端软件和成员软件。可省略可识别名称的根 DSE 部分。
  • --no-password - 无需密码自动加入.
  • --one-time-password= - 使用一次性密码加入。不是所有域都支持它。
  • --client-software= - 仅加入能够运行此客户端软件的域。有效值包括 sssdwinbind。不是所有域都支持所有值。默认情况下自动选择客户端软件。
  • --server-software= - 仅加入能够运行此服务器软件的域。可能的值包括 active-directoryfreeipa
  • --membership-software= - 加入域时使用此软件。有效值包括 sambaadcli。不是所有域都支持所有值。默认情况下自动选择成员软件。

C.5. 用于处理存储的 Kickstart 命令

这部分中的 Kickstart 命令配置存储的各个方面,比如设备、磁盘、分区、LVM 和文件系统。

重要

sdX(或 /dev/sdX)格式不能保证重启后一致的设备名称,这可能会使某些 Kickstart 命令的使用变得复杂。当命令需要设备节点名称时,您可以使用 /dev/disk 中的任何项目作为替代。例如,改为使用以下设备名称:

part / --fstype=xfs --onpart=sda1

您可以使用类似以下条目之一:

part / --fstype=xfs --onpart=/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0-part1

part / --fstype=xfs --onpart=/dev/disk/by-id/ata-ST3160815AS_6RA0C882-part1

通过使用这种方法,命令总是以相同的存储设备为目标。这在大型存储环境中特别有用。要利用系统上的可用设备名称,您可以在交互式安装过程中使用 ls -lR /dev/disk 命令。有关统一引用存储设备的不同方法的更多信息,请参阅 持久性命名属性的概述

C.5.1. device(已弃用)

device Kickstart 命令是可选的。使用它载入其他内核模块。

在大多数 PCI 系统中,安装程序会自动探测以太网卡和 SCSI 卡。然而,在老的系统和某些 PCI 系统中,Kickstart 需要提示才能找到正确的设备。device 命令告知安装程序安装额外模块,使用以下格式:

语法

device moduleName --opts=options
Copy to Clipboard Toggle word wrap

选项

  • moduleName - 使用应该安装的内核模块的名称替换。
  • --opts= - 传递给内核模块的选项。例如:

    device --opts="aic152x=0x340 io=11"
    Copy to Clipboard Toggle word wrap

C.5.2. ignoredisk

ignoredisk Kickstart 命令是可选的。这会导致安装程序忽略指定的磁盘。

如果您使用自动分区并希望忽略某些磁盘,这就很有用。例如,如果没有 ignoredisk,尝试在 SAN-cluster 中部署,Kickstart 将失败,因为安装程序检测到到 SAN 的被动路径没有分区表。仅使用此命令一次。

语法

ignoredisk --drives=drive1,drive2,... | --only-use=drive
Copy to Clipboard Toggle word wrap

选项

  • --drives=driveN,…​ - 使用 sda,sdb 之一替换 driveN。, hda,…​ 以此类推。
  • --only-use=driveN,…​ - 指定安装程序要使用的磁盘列表。其它磁盘将被忽略。例如:要在安装过程中使用磁盘 da 并忽略所有其他磁盘:

    ignoredisk --only-use=sda
    Copy to Clipboard Toggle word wrap

    要包括不使用 LVM 的多路径设备:

    ignoredisk --only-use=disk/by-id/dm-uuid-mpath-2416CD96995134CA5D787F00A5AA11017
    Copy to Clipboard Toggle word wrap

    要包括使用 LVM 的多路径设备:

    ignoredisk --only-use==/dev/disk/by-id/dm-uuid-mpath-
    Copy to Clipboard Toggle word wrap
    bootloader --location=mbr
    Copy to Clipboard Toggle word wrap

您必须仅指定 --drives--only-use 中的一个。

备注

  • 在 Red Hat Enterprise Linux 8 中已弃用 --interactive 选项。这个选项允许用户手动在高级存储界面中进行操作。
  • 要忽略不使用逻辑卷管理器(LVM)的多路径设备,请使用格式 disk/by-id/dm-uuid-mpath-WWID,其中 WWID 是设备的通用识别符。例如,要忽略 WWID 为 2416CD96995134CA5D787F00A5AA11017 的磁盘,请使用:

    ignoredisk --drives=disk/by-id/dm-uuid-mpath-2416CD96995134CA5D787F00A5AA11017
    Copy to Clipboard Toggle word wrap
  • 切勿按设备名称(如 mpatha )指定多路径设备。这样的设备名称并不是特定磁盘特有的。在安装过程中名为 /dev/mpatha 的磁盘可能不是您期望的磁盘。因此,clearpart 命令可能会以错误的磁盘为目标。
  • sdX(或 /dev/sdX)格式不能保证重启后一致的设备名称,这可能会使某些 Kickstart 命令的使用变得复杂。当命令需要设备节点名称时,您可以使用 /dev/disk 中的任何项目作为替代。例如,改为使用以下设备名称:

    part / --fstype=xfs --onpart=sda1
    Copy to Clipboard Toggle word wrap

    您可以使用类似以下条目之一:

    part / --fstype=xfs --onpart=/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0-part1
    
    part / --fstype=xfs --onpart=/dev/disk/by-id/ata-ST3160815AS_6RA0C882-part1
    Copy to Clipboard Toggle word wrap

    通过使用这种方法,命令总是以相同的存储设备为目标。这在大型存储环境中特别有用。要利用系统上的可用设备名称,您可以在交互式安装过程中使用 ls -lR /dev/disk 命令。有关统一引用存储设备的不同方法的更多信息,请参阅 持久性命名属性的概述

C.5.3. clearpart

clearpart Kickstart 命令是可选的。在创建新分区之前,它会从系统中删除分区。默认情况下不会删除任何分区。仅使用此命令一次。

语法

clearpart OPTIONS
Copy to Clipboard Toggle word wrap

选项

  • --all - 断掉系统中的所有分区。

    这个选项将擦除安装程序可以访问的所有磁盘,包括任何附加的网络存储。请小心使用这个选项。

    为了防止您需要保留的存储会被 clearpart 清除,您可以使用 --drives= 选项指定需要删除的存储,或在以后附加网络存储(例如:在 Kickstart 文件的 %post 部分),或将用来访问网络存储的内核模块列入阻塞名单。

  • --drives= - 指定从中清除分区的驱动器。例如,下面的命令清除了主 IDE 控制器上前两个驱动器上所有分区:

    clearpart --drives=hda,hdb --all
    Copy to Clipboard Toggle word wrap

    要清除多路径设备,请使用格式 disk/by-id/scsi-WWID,其中 WWID 是该设备的通用识别符。例如:要清除 WWID 58095BEC5510947BE8C0360F604351918 的磁盘,请使用:

    clearpart --drives=disk/by-id/scsi-58095BEC5510947BE8C0360F604351918
    Copy to Clipboard Toggle word wrap

    这个格式适用于所有多路径设备,但如果出现错误,也可以使用 disk/by-id/dm-uuid-mpath-WWID 格式清除不使用逻辑卷管理器(LVM)的多路径设备,其中 WWID 是设备的通用识别符。例如,若要清除 WWID 为 2416CD96995134CA5D787F00A5AA11017 的磁盘,请使用:

    clearpart --drives=disk/by-id/dm-uuid-mpath-2416CD96995134CA5D787F00A5AA11017
    Copy to Clipboard Toggle word wrap

    切勿按设备名称(如 mpatha )指定多路径设备。这样的设备名称并不是特定磁盘特有的。在安装过程中名为 /dev/mpatha 的磁盘可能不是您期望的磁盘。因此,clearpart 命令可能会以错误的磁盘为目标。

  • --initlabel - 通过为所有磁盘在其对于的架构中创建一个默认的磁盘标签来格式化磁盘(例如: 对于 x86,使用 msdos)。因为 --initlabel 可以查看所有磁盘,因此请确保只连接要格式化的驱动器。clearpart 清理的磁盘将创建标签,即使 --initlabel 没有使用。

    clearpart --initlabel --drives=names_of_disks
    Copy to Clipboard Toggle word wrap

    例如:

    clearpart --initlabel --drives=dasda,dasdb,dasdc
    Copy to Clipboard Toggle word wrap
  • --list= - 指定要清除哪些分区。如果使用此选项,这个选项将覆盖 --all--linux 选项。可在不同的驱动器间使用。例如:

    clearpart --list=sda2,sda3,sdb1
    Copy to Clipboard Toggle word wrap
  • --disklabel=LABEL - 设置要使用的默认 disklabel。只有支持该平台的磁盘标签才会被接受。例如,在 64 位 Intel 和 AMD 构架中,接受 msdosgpt disklabels,但不接受 dasd
  • --linux - 删除所有 Linux 分区.
  • --none (默认)- 不删除任何分区。
  • --cdl - 将所有 LDL DASD 重新格式化为 CDL 格式。

  • sdX(或 /dev/sdX)格式不能保证重启后一致的设备名称,这可能会使某些 Kickstart 命令的使用变得复杂。当命令需要设备节点名称时,您可以使用 /dev/disk 中的任何项目作为替代。例如,改为使用以下设备名称:

    part / --fstype=xfs --onpart=sda1
    Copy to Clipboard Toggle word wrap

    您可以使用类似以下条目之一:

    part / --fstype=xfs --onpart=/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0-part1
    
    part / --fstype=xfs --onpart=/dev/disk/by-id/ata-ST3160815AS_6RA0C882-part1
    Copy to Clipboard Toggle word wrap

    通过使用这种方法,命令总是以相同的存储设备为目标。这在大型存储环境中特别有用。要利用系统上的可用设备名称,您可以在交互式安装过程中使用 ls -lR /dev/disk 命令。有关统一引用存储设备的不同方法的更多信息,请参阅 持久性命名属性的概述

  • 如果使用 clearpart 命令,则无法在逻辑分区中使用 part --onpart 命令。

C.5.4. zerombr

zerombr Kickstart 命令是可选的。zerombr 会初始化磁盘上找到的所有无效分区表,并销毁具有无效分区表的磁盘的所有内容。当在带有未格式化的 Direct Access Storage Device(DASD)磁盘的 64 位 IBM Z 系统中执行安装时,需要这个命令,否则未格式化的磁盘不会被格式化并在安装过程中使用。仅使用此命令一次。

语法

zerombr
Copy to Clipboard Toggle word wrap

备注

  • 在 64 位 IBM Z 上,如果指定了 zerombr,安装程序可以看到的直接访问存储设备 (DASD) 都会使用 dasdfmt 自动低级格式化。这个命令还可防止用户在互动安装过程中进行选择。
  • 如果没有指定 zerombr,且安装程序至少可以看到一个未格式化的 DASD,非互动的 Kickstart 安装将无法成功退出。
  • 如果没有指定 zerombr,且安装程序至少可以看到一个未格式化的 DASD,如果用户同意格式化所有可见和未格式化的 DASD,则会退出交互式安装。要绕过这个过程,请只激活那些您要在安装过程中使用的 DASD。您总是可在安装完成后添加更多的 DASD。
  • 这个命令没有选项。

C.5.5. bootloader

bootloader Kickstart 命令是必需的。它指定引导装载程序的安装方式。仅使用此命令一次。

语法

bootloader [OPTIONS]
Copy to Clipboard Toggle word wrap

选项

  • --append= - 指定附加内核参数。要指定多个参数,使用空格分隔它们。例如:

    bootloader --location=mbr --append="hdd=ide-scsi ide=nodma"
    Copy to Clipboard Toggle word wrap

    安装 plymouth 软件包时会自动添加 rhgbquiet 参数,即使您在此未指定参数或根本不使用 --append= 命令。要禁用此行为,请明确禁止安装 plymouth

    %packages
    -plymouth
    %end
    Copy to Clipboard Toggle word wrap

    这个选项可用于禁用在大多数现代处理器中存在的 Meltdown 和 Spectre speculative 安全漏洞(CVE-2017-5754、CVE-2017-5753 和 CVE-2017-5715)。在某些情况下,这些机制可能并不是必需的,启用它们可能会导致性能降低而不会提高安全性。要禁用这些系统,请在您的 Kickstart 文件中添加相关选项,例如: bootloader --append="nopti noibrs noibpb" (在 AMD64/Intel 64 系统中)。

    警告

    在禁用任何漏洞缓解机制前,请确定您的系统不会受到安全攻击。有关 Meltdown 和 Spectre 漏洞的详情,请查看红帽漏洞响应文章

  • --boot-drive= - 指定引导装载程序应写入的驱动器,因此要从哪个驱动器引导计算机。如果您使用多路径设备作为引导驱动器,使用它的 disk/by-id/dm-uuid-mpath-WWID 名称指定该设备。

    重要

    目前,在使用 zipl 引导装载程序的 64 位 IBM Z 系统上的 Red Hat Enterprise Linux 安装中会忽略 -boot-drive= 选项。安装 zipl 后,它会自行确定引导驱动器。

  • --leavebootorder - 安装程序会将 Red Hat Enterprise Linux 8 添加到引导装载程序中安装的系统列表的顶部,并保留所有现有的条目及其顺序。
重要

这个选项只适用于 Power 系统,UEFI 系统不应该使用这个选项。

  • --driveorder= - 指定哪个驱动器最先在 BIOS 引导顺序中。例如:

    bootloader --driveorder=sda,hda
    Copy to Clipboard Toggle word wrap
  • --location= - 指定引导记录的写入位置。有效值如下:

    • mbr - 默认选项.具体要看驱动器是使用主引导记录(MBR)还是 GUID 分区表(GPT)方案:

      在 GPT 格式的磁盘中,这个选项会在 BIOS 引导分区中安装 stage 1.5 引导装载程序。

      在使用 MBR 格式化的磁盘中,会在 MBR 和第一个分区之间的空白空间中安装 stage 1.5。

    • partition - 在包含内核的分区的第一个扇区安装引导装载程序。
    • none - 不安装引导装载程序。

    在大多数情况下,不需要指定这个选项。

  • --nombr - 不向 MBR 中安装引导装载程序。
  • --password= - 如果使用 GRUB,请将引导装载程序密码设置为使用这个选项指定的密码。这应该被用来限制对 GRUB shell 的访问,在 GRUB shell 中可以传递任意内核选项。

    如果指定了密码,GRUB 也会要求输入用户名。用户名始终为 root

  • --iscrypted - 通常当您使用 --password= 选项指定引导装载程序密码时,会以明文形式将其保存在 Kickstart 文件中。如果要加密密码,使用这个选项和一个加密的密码。

    要生成加密的密码,请使用 grub2-mkpasswd-pbkdf2 命令,输入要使用的密码,并将命令的输出(以 grub.pbkdf2开头的哈希值)复制到 Kickstart 文件中。带有加密密码的 bootloader Kickstart 条目示例类似如下:

    bootloader --iscrypted --password=grub.pbkdf2.sha512.10000.5520C6C9832F3AC3D149AC0B24BE69E2D4FB0DBEEDBD29CA1D30A044DE2645C4C7A291E585D4DC43F8A4D82479F8B95CA4BA4381F8550510B75E8E0BB2938990.C688B6F0EF935701FF9BD1A8EC7FE5BD2333799C98F28420C5CC8F1A2A233DE22C83705BB614EA17F3FDFDF4AC2161CEA3384E56EB38A2E39102F5334C47405E
    Copy to Clipboard Toggle word wrap
  • --timeout= - 指定引导装载程序在引导默认选项前等待的时间(以秒为单位)。
  • --default= - 在引导装载程序配置中设置默认引导镜像。
  • --extlinux - 使用 extlinux 引导装载程序而不是 GRUB。这个选项只适用于支持 extlinux 的系统。
  • --disabled - 这个选项是更强大的 --location=none 版本。虽然 --location=none 只是禁用引导装载程序安装,但 --disabled 禁用引导装载程序安装,同时禁用包含引导装载程序的软件包安装,从而节省了空间。

备注

  • 红帽建议在每个系统中设置引导装载程序密码。一个没有保护的引导装载程序可以让潜在的攻击者修改系统的引导选项,并获得对系统的未授权访问。
  • 在某些情况下,需要一个特殊的分区来在 AMD64、Intel 64 和 64 位 ARM 系统上安装引导装载程序。这个分区的类型和大小取决于您要安装引导装载程序的磁盘是否使用主引导记录(MBR)还是 GUID 分区表(GPT)模式。如需更多信息,请参阅 配置引导装载程序 部分。
  • sdX(或 /dev/sdX)格式不能保证重启后一致的设备名称,这可能会使某些 Kickstart 命令的使用变得复杂。当命令需要设备节点名称时,您可以使用 /dev/disk 中的任何项目作为替代。例如,改为使用以下设备名称:

    part / --fstype=xfs --onpart=sda1
    Copy to Clipboard Toggle word wrap

    您可以使用类似以下条目之一:

    part / --fstype=xfs --onpart=/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0-part1
    
    part / --fstype=xfs --onpart=/dev/disk/by-id/ata-ST3160815AS_6RA0C882-part1
    Copy to Clipboard Toggle word wrap

    通过使用这种方法,命令总是以相同的存储设备为目标。这在大型存储环境中特别有用。要利用系统上的可用设备名称,您可以在交互式安装过程中使用 ls -lR /dev/disk 命令。有关统一引用存储设备的不同方法的更多信息,请参阅 持久性命名属性的概述

  • 在 Red Hat Enterprise Linux 8 中已弃用 --upgrade 选项。

C.5.6. autopart

autopart Kickstart 命令是可选的。它自动创建分区。

自动创建的分区是:根(/)分区(1 GiB 或更大)、swap 分区,以及适合架构的 /boot 分区。在足够大的驱动器(50 GiB 及更高版本)上,这还会创建一个 /home 分区。仅使用此命令一次。

语法

autopart OPTIONS
Copy to Clipboard Toggle word wrap

选项

  • --type= - 选择您要使用的预定义自动分区方案之一。可接受以下值:

    • lvm:LVM 分区方案。
    • plain:无 LVM 的常规分区。
    • thinp:LVM Thin Provisioning 分区方案。
  • --fstype= - 选择其中一个可用文件系统类型。可用值包括 ext2ext3ext4xfsvfat。默认的文件系统是 xfs
  • --nohome - 禁用自动创建 /home 分区。
  • --nolvm - 不使用 LVM 进行自动分区。这个选项等同于 --type=plain
  • --noboot - 不创建 /boot 分区。
  • --noswap - 不创建交换分区。
  • --encrypted - 使用 Linux 统一密钥设置 (LUKS) 加密所有分区。这等同于在手动图形安装的初始分区界面中选择加密分区选项。

    注意

    在加密一个或多个分区时, Anaconda 会尝试收集 256 字节熵,以保证安全加密分区。收集熵可能需要一些时间 - 无论是否有收集到足够的熵,该过程将在最多 10 分钟后停止。

    与安装系统互动(通过键盘输入或移动鼠标)可加速此进程。如果要在虚拟机中安装,您还可以将 virtio-rng 设备(虚拟随机数生成器)附加到客户机。

  • --LUKS-version=LUKS_VERSION - 指定应该使用哪个版本的 LUKS 格式来加密文件系统。只有在指定了 --encrypted 时这个选项才有意义。
  • --passphrase= - 为所有加密设备提供默认的系统范围密码短语。
  • --escrowcert=URL_of_X.509_certificate - 将所有加密卷的数据加密密钥保存在 /root 的文件中,使用来自 URL_of_X.509_certificate 指定的 URL 的 X.509 证书进行加密。每个加密卷的密钥都作为单独的文件保存。只有在指定了 --encrypted 时这个选项才有意义。
  • --backuppassphrase - 为每个加密卷添加随机生成的密码短语。将这些密码短语存储在 /root 中的单独文件中,使用通过 --escrowcert 指定的 X.509 证书进行加密。只有在指定了 --escrowcert 时这个选项才有意义。
  • --cipher= - 指定在 Anaconda 默认 aes-xts-plain64 时要使用的加密类型。这个选项必须与 --encrypted 选项一同使用;其本身无效。安全强化 文档中列出了可用的加密类型,但红帽强烈建议您使用 aes-xts-plain64aes-cbc-essiv:sha256
  • --pbkdf=PBKDF - 为 LUKS keylot 设置 PBKDF(Password-Based Key Derivation Function)算法。另请参阅 man page cryptsetup(8)。只有在指定了 --encrypted 时这个选项才有意义。
  • --PBKDF-memory=PBKDF_MEMORY - 设置 PBKDF 的内存成本。另请参阅 man page cryptsetup(8)。只有在指定了 --encrypted 时这个选项才有意义。
  • --PBKDF-time=PBKDF_TIME - 设置 PBKDF 密码处理所花费的毫秒数。另请参阅 man page cryptsetup(8) 中的 --iter-time。只有在指定了 --encrypted 时这个选项才有意义,并且与 --pbkdf-iterations 相互排斥。
  • --PBKDF-iterations=PBKDF_ITERATIONS - 设定直接迭代数量并避免 PBKDF 基准测试。另请参阅 man page cryptsetup(8) 中的 --pbkdf-force-iterations。只有在指定了 --encrypted 时这个选项才有意义,并且与 --pbkdf-time 相互排斥。

备注

  • autopart 选项不能与同一 Kickstart 文件中的 part/partitionraidlogvolvolgroup 选项一同使用。
  • autopart 命令不是强制的,但如果 Kickstart 脚本中没有 partmount 命令,则必须包含该命令。
  • 在 CMS 类型的单个 FBA DASD 中安装时,建议使用 autopart --nohome Kickstart 选项。这样可保证安装程序不会创建单独的 /home 分区。安装过程可以成功进行。
  • 如果您丢失了 LUKS 密码短语,那么就完全无法访问所有加密的分区及其数据。丢失的密码短语是无法找回的。但是,您可以使用 --escrowcert 保存加密密码短语,并使用 --backuppassphrase 选项创建加密密码短语备份。
  • 在使用 autopartautopart --type=lvmautopart=thinp 时,确保磁盘扇区大小一致。

C.5.7. reqpart

reqpart Kickstart 命令是可选的。它自动创建您的硬件平台所需的分区。这为带有 UEFI 固件的系统包括一个 /boot/efi 分区,带有 BIOS 固件和 GPT 的系统包括 biosboot 分区,为 IBM Power 系统包括 PRePBoot 分区。仅使用此命令一次。

语法

reqpart [--add-boot]
Copy to Clipboard Toggle word wrap

选项

  • --add-boot - 除基础命令创建的特定于平台的分区之外,还创建一个单独的 /boot 分区。

备注

  • 这个命令不能与 autopart 一起使用,因为 autopart 会做 reqpart 命令所做的任何事情,另外还创建其他分区或逻辑卷,如 /swap。与 autopart 不同,这个命令只创建特定于平台的分区,并将驱动器的其余部分留空,允许您创建自定义布局。

C.5.8. part 或 partition

需要 partpartition Kickstart 命令。它在系统上创建一个分区。

语法

part|partition mntpoint [OPTIONS]
Copy to Clipboard Toggle word wrap

选项

  • mntpoint - 挂载分区的位置。该值必须是以下格式之一:

    • /path

      例如: //usr/home

    • swap

      该分区被用作交换空间。

      要自动决定 swap 分区的大小,请使用 --recommended 选项:

      swap --recommended
      Copy to Clipboard Toggle word wrap

      分配的大小将生效,但不会根据您的系统进行精确校准。

      要自动确定 swap 分区的大小,同时允许系统的额外空间可以休眠,请使用 --hibernation 选项:

      swap --hibernation
      Copy to Clipboard Toggle word wrap

      分配的大小将相当于由 --recommended 分配的交换空间加上您系统上的 RAM 量。有关这些命令所分配的 swap 大小,请参阅为 AMD64、Intel 64 和 64 位 ARM 系统 推荐的分区方案

    • raid.id

      该分区用于软件 RAID(请参阅 raid)。

    • pv.id

      该分区用于 LVM(请参阅 logvol)。

    • biosboot

      该分区将用在 BIOS 引导分区中。在使用 BIOS 的 AMD64 和 Intel 64 系统中使用 GUID 分区表(GPT)中需要 1 MiB BIOS 引导分区 ; 引导装载程序将被安装到其中。UEFI 系统中不需要此功能。另请参阅 bootloader 命令。

    • /boot/efi

      一个 EFI 系统分区。基于 UEFI 的 AMD64、Intel 64 和 64 位 ARM 上需要 50 MiB EFI 分区。推荐的大小为 200 MiB。它在 BIOS 系统上并不需要。另请参阅 bootloader 命令。

  • --size= - 最小分区大小,以 MiB 为单位。在这里指定一个整数值,如 500 (不要包含单位)。如果指定的大小太小,安装将失败。将 --size 值设置为您需要的最小空间量。有关大小的建议,请参阅 推荐的分区方案
  • --grow - 指定要填满所有可用空间(若有的话)的分区增长,或最大为最大大小设置(如果指定了)。如果您在交换分区上使用 --grow= 但没有设置 --maxsize=,Anaconda 会限制 swap 分区的最大大小。对于物理内存小于 2 GiB 的系统,强制的限制为物理内存的两倍。对于拥有超过 2 GiB 的系统,强制限制为物理内存大小加上 2GiB。
  • --maxsize= - 分区设置为增长时的最大分区大小(以 MiB 为单位)。在这里指定一个整数值,如 500 (不要包含单位)。
  • --noformat - 指定不要被格式化的分区,以便与 --onpart 命令一起使用。
  • --onpart=--usepart= - 指定要放置分区的设备。使用现有的空白设备并将其格式化到新指定类型。例如:

    partition /home --onpart=hda1
    Copy to Clipboard Toggle word wrap

    /home 放置到 /dev/hda1

    这些选项还可以在逻辑卷中添加分区。例如:

    partition pv.1 --onpart=hda2
    Copy to Clipboard Toggle word wrap

    设备必须已在系统上存在;--onpart 选项不会创建它。

    在这种情况下, Anaconda 会在不创建分区表的情况下格式化并使用驱动器。但是,在以这种方式格式化的设备上不支持 GRUB 安装,且必须放在具有分区表的驱动器上。

    partition pv.1 --onpart=hdb
    Copy to Clipboard Toggle word wrap
  • --ondisk=--ondrive= - 在现有磁盘中创建分区(由 part 命令指定)。这个命令总是创建一个分区。强制在特定磁盘中创建分区。例如: --ondisk=sdb 将分区放在系统的第二个 SCSI 磁盘中。

    要指定不使用逻辑卷管理器(LVM)的多路径设备,请使用格式 disk/by-id/dm-uuid-mpath-WWID,其中 WWID 是设备的通用识别符。例如,要指定 WWID 为 2416CD96995134CA5D787F00A5AA11017 的磁盘,请使用:

    part / --fstype=xfs --grow --asprimary --size=8192 --ondisk=disk/by-id/dm-uuid-mpath-2416CD96995134CA5D787F00A5AA11017
    Copy to Clipboard Toggle word wrap
    警告

    切勿按设备名称(如 mpatha )指定多路径设备。这样的设备名称并不是特定磁盘特有的。在安装过程中名为 /dev/mpatha 的磁盘可能不是您期望的磁盘。因此,part 命令可能会以错误的磁盘为目标。

  • --asprimary - 强制将该分区分配为 primary 分区。如果无法将该分区作为主分区分配(通常是因为已经分配了太多的主分区),则该分区进程会失败。只有使用主引导记录(MBR)时这个选项才有意义。
  • --fsprofile= - 指定要传递给在这个分区上创建文件系统的程序的使用类型。使用类型定义了创建文件系统时使用的各种微调参数。要使用这个选项,文件系统必须支持使用类型,且必须有一个配置文件来列出有效类型。对于 ext2ext3ext4,此配置文件为 /etc/mke2fs.conf
  • --mkfsoptions= - 指定要传递给在此分区上创建文件系统的程序的其他参数。这与 --fsprofile 类似,但适用于所有文件系统,而不仅仅是支持配置集概念的文件系统。没有对参数列表进行任何操作,因此必须以可直接传递给 mkfs 程序的格式提供。这意味着,根据具体文件系统,多个选项应该用逗号分开,或使用双引号分开。例如,

    part /opt/foo1 --size=512 --fstype=ext4 --mkfsoptions="-O ^has_journal,^flex_bg,^metadata_csum"
    
    part /opt/foo2 --size=512 --fstype=xfs --mkfsoptions="-m bigtime=0,finobt=0"
    Copy to Clipboard Toggle word wrap

详情请查看您要创建的文件系统的手册页。例如:mkfs.ext4mkfs.xfs

  • --fstype= - 为分区设置文件系统类型。有效值为 xfsext2ext3ext4swapvfatefibiosboot
  • --fsoptions - 指定在挂载文件系统时要使用的自由格式选项字符串。该字符串将复制到安装的系统的 /etc/fstab 文件中,并且应用引号括起来。

    注意

    在 EFI 系统分区(/boot/efi)中,anaconda 硬编码了值,并忽略了用户指定的 --fsoptions 值。

  • --label= - 为单个分区分配标签。
  • --recommended - 自动确定分区的大小。有关推荐的方案的详情,请参考为 AMD64、Intel 64 和 64 位 ARM 推荐的分区方案。这个选项只能用于生成文件系统(如 /boot 分区和 交换空间)的分区。它不能被用来创建 LVM 物理卷或 RAID 成员。
  • --onbiosdisk - 强制 BIOS 发现的特定磁盘上创建的分区。
  • --encrypted - 指定该分区应该用 LUKS 加密,使用 --passphrase= 选项中提供的密码短语。如果您没有指定密码短语,Anaconda 将使用 autopart --passphrase 命令设定的默认系统级密码,或者停止安装并在未设定默认密码短语时提示您输入密码短语。

    注意

    在加密一个或多个分区时, Anaconda 会尝试收集 256 字节熵,以保证安全加密分区。收集熵可能需要一些时间 - 无论是否有收集到足够的熵,该过程将在最多 10 分钟后停止。

    与安装系统互动(通过键盘输入或移动鼠标)可加速此进程。如果要在虚拟机中安装,您还可以将 virtio-rng 设备(虚拟随机数生成器)附加到客户机。

  • --LUKS-version=LUKS_VERSION - 指定应该使用哪个版本的 LUKS 格式来加密文件系统。只有在指定了 --encrypted 时这个选项才有意义。
  • --passphrase= - 指定在加密此分区时要使用的密码短语。这个选项必须与 --encrypted 选项一同使用;其本身无效。
  • --cipher= - 指定在 Anaconda 默认 aes-xts-plain64 时要使用的加密类型。这个选项必须与 --encrypted 选项一同使用;其本身无效。安全强化 文档中列出了可用的加密类型,但红帽强烈建议您使用 aes-xts-plain64aes-cbc-essiv:sha256
  • --escrowcert=URL_of_X.509_certificate - 将所有加密分区的数据加密密钥保存在 /root 的文件中,使用来自 URL_of_X.509_certificate 指定的 URL 的 X.509 证书进行加密。每个加密分区的密钥都作为单独的文件保存。只有在指定了 --encrypted 时这个选项才有意义。
  • --backuppassphrase - 为每个加密分区添加随机生成的密码短语。将这些密码短语存储在 /root 中的单独文件中,使用通过 --escrowcert 指定的 X.509 证书进行加密。只有在指定了 --escrowcert 时这个选项才有意义。
  • --pbkdf=PBKDF - 为 LUKS keylot 设置 PBKDF(Password-Based Key Derivation Function)算法。另请参阅 man page cryptsetup(8)。只有在指定了 --encrypted 时这个选项才有意义。
  • --PBKDF-memory=PBKDF_MEMORY - 设置 PBKDF 的内存成本。另请参阅 man page cryptsetup(8)。只有在指定了 --encrypted 时这个选项才有意义。
  • --PBKDF-time=PBKDF_TIME - 设置 PBKDF 密码处理所花费的毫秒数。另请参阅 man page cryptsetup(8) 中的 --iter-time。只有在指定了 --encrypted 时这个选项才有意义,并且与 --pbkdf-iterations 相互排斥。
  • --PBKDF-iterations=PBKDF_ITERATIONS - 设定直接迭代数量并避免 PBKDF 基准测试。另请参阅 man page cryptsetup(8) 中的 --pbkdf-force-iterations。只有在指定了 --encrypted 时这个选项才有意义,并且与 --pbkdf-time 相互排斥。
  • --resize= - 调整现有分区的大小。使用这个选项时,使用 --size= 选项指定目标的大小(单位 MiB),使用 --onpart= 指定目标分区。

备注

  • part 命令不是强制的,但您必须在 Kickstart 脚本中包含 partautopartmount
  • 在 Red Hat Enterprise Linux 8 中已弃用 --active 选项。
  • 如果因为某种原因分区失败,虚拟控制台 3 中会显示诊断信息。
  • 除非使用 --noformat--onpart,否则所有创建的分区都会格式化为安装过程的一部分。
  • sdX(或 /dev/sdX)格式不能保证重启后一致的设备名称,这可能会使某些 Kickstart 命令的使用变得复杂。当命令需要设备节点名称时,您可以使用 /dev/disk 中的任何项目作为替代。例如,改为使用以下设备名称:

    part / --fstype=xfs --onpart=sda1
    Copy to Clipboard Toggle word wrap

    您可以使用类似以下条目之一:

    part / --fstype=xfs --onpart=/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0-part1
    
    part / --fstype=xfs --onpart=/dev/disk/by-id/ata-ST3160815AS_6RA0C882-part1
    Copy to Clipboard Toggle word wrap

    通过使用这种方法,命令总是以相同的存储设备为目标。这在大型存储环境中特别有用。要利用系统上的可用设备名称,您可以在交互式安装过程中使用 ls -lR /dev/disk 命令。有关统一引用存储设备的不同方法的更多信息,请参阅 持久性命名属性的概述

  • 如果您丢失了 LUKS 密码短语,那么就完全无法访问所有加密的分区及其数据。丢失的密码短语是无法找回的。但是,您可以使用 --escrowcert 保存加密密码短语,并使用 --backuppassphrase 选项创建加密密码短语备份。

C.5.9. raid

raid Kickstart 命令是可选的。它组成一个软件 RAID 设备。

语法

raid mntpoint --level=level --device=device-name partitions*
Copy to Clipboard Toggle word wrap

选项

  • mntpoint - 挂载 RAID 文件系统的位置。如果是 /,RAID 级别必须是 1,除非引导分区 (/boot) 存在。如果引导分区存在,/boot 分区必须是级别 1,root (/) 分区可以是任意可用的类型。partitions* (代表多个分区可以被列举)列出了要添加到 RAID 阵列的 RAID 标记。

    重要
    • 在 IBM Power 系统上,如果 RAID 设备已经准备好,且在安装过程中没有重新格式化,如果您打算将 /boot 和 PReP 分区放在 RAID 设备上,请确保 RAID 元数据版本为 0.901.0 。对于 /boot 和 PReP 分区 mdadm 元数据版本 1.11.2 不支持。
    • PowerNV 系统上不需要 PReP 引导分区。
  • --level= - 使用的 RAID 级别(0、1、4、5、6 或 10)。
  • --device= - 要使用的 RAID 设备的名称 - 例如 --device=root

    重要

    不要使用 md0 格式的 mdraid 名称 - 无法保证这些名称具有持久性。相反,应使用有意义的名称,如 rootswap。使用有含义的名称可生成一个从 /dev/md/name/dev/mdX 节点分配到的阵列的符号链接。

    如果您有一个无法为其分配名称的旧阵列(v0.90 元数据),您可以使用文件系统标签或 UUID 指定该阵列。例如,--device=LABEL=root--device=UUID=93348e56-4631-d0f0-6f5b-45c47f570b88

    您可以使用 RAID 设备上文件系统的 UUID 或者 RAID 设备本身的 UUID。RAID 设备的 UUID 应为 8-4-4-4-12 格式。mdadm 报告的 UUID 为 8:8:8:8 格式,需要更改。例如 93348e56:4631d0f0:6f5b45c4:7f570b88 应改为 93348e56-4631-d0f0-6f5b-45c47f570b88

  • --CHUNKSIZE= - 以 KiB 为单位设置 RAID 存储的块大小。在某些情况下,使用与默认块不同的块大小 (512 Kib) 可以提高 RAID 的性能。
  • --spares= - 指定分配给 RAID 阵列的备用驱动器数量。可使用备用驱动器在驱动器失败时重建阵列。
  • --fsprofile= - 指定要传递给在这个分区上创建文件系统的程序的使用类型。使用类型定义了创建文件系统时使用的各种微调参数。要使用这个选项,文件系统必须支持使用类型,且必须有一个配置文件来列出有效类型。对于 ext2、ext3 和 ext4,此配置文件为 /etc/mke2fs.conf
  • --fstype= - 为 RAID 阵列设置文件系统类型。有效值为 xfsext2ext3ext4swapvfat
  • --fsoptions= - 指定在挂载文件系统时要使用的自由格式选项字符串。该字符串将复制到安装的系统的 /etc/fstab 文件中,并且应用引号括起来。在 EFI 系统分区(/boot/efi)中,anaconda 硬编码了值,并忽略了用户指定的 --fsoptions 值。
  • --mkfsoptions= - 指定要传递给在此分区上创建文件系统的程序的其他参数。没有对参数列表进行任何操作,因此必须以可直接传递给 mkfs 程序的格式提供。这意味着,根据具体文件系统,多个选项应该用逗号分开,或使用双引号分开。例如,

    part /opt/foo1 --size=512 --fstype=ext4 --mkfsoptions="-O ^has_journal,^flex_bg,^metadata_csum"
    
    part /opt/foo2 --size=512 --fstype=xfs --mkfsoptions="-m bigtime=0,finobt=0"
    Copy to Clipboard Toggle word wrap

详情请查看您要创建的文件系统的手册页。例如:mkfs.ext4mkfs.xfs

  • --label= - 指定要生成的文件系统的标签。如果给定标签已被另一个文件系统使用,则会创建一个新标签。
  • --noformat - 使用现有的 RAID 设备,且不要格式化 RAID 阵列。
  • --use existing - 使用现有的 RAID 设备并重新格式化它。
  • --encrypted - 指定该 RAID 设备应该用 LUKS 加密,使用 --passphrase= 选项中提供的密码短语。如果您没有指定密码短语,Anaconda 将使用 autopart --passphrase 命令设定的默认系统级密码,或者停止安装并在未设定默认密码短语时提示您输入密码短语。

    注意

    在加密一个或多个分区时, Anaconda 会尝试收集 256 字节熵,以保证安全加密分区。收集熵可能需要一些时间 - 无论是否有收集到足够的熵,该过程将在最多 10 分钟后停止。

    与安装系统互动(通过键盘输入或移动鼠标)可加速此进程。如果要在虚拟机中安装,您还可以将 virtio-rng 设备(虚拟随机数生成器)附加到客户机。

  • --LUKS-version=LUKS_VERSION - 指定应该使用哪个版本的 LUKS 格式来加密文件系统。只有在指定了 --encrypted 时这个选项才有意义。
  • --cipher= - 指定在 Anaconda 默认 aes-xts-plain64 时要使用的加密类型。这个选项必须与 --encrypted 选项一同使用;其本身无效。安全强化 文档中列出了可用的加密类型,但红帽强烈建议您使用 aes-xts-plain64aes-cbc-essiv:sha256
  • --passphrase= - 指定加密此 RAID 设备时使用的密码短语。这个选项必须与 --encrypted 选项一同使用;其本身无效。
  • --escrowcert=URL_of_X.509_certificate - 将这个设备的数据加密密钥保存在 /root 中的一个文件中,使用来自 URL_of_X.509_certificate 指定的 URL 的 X.509 证书加密。只有在指定了 --encrypted 时这个选项才有意义。
  • --backuppassphrase - 向这个设备添加随机生成的密码短语。将该密语存储在 /root 中的文件中,使用通过 --escrowcert 指定的 X.509 证书进行加密。只有在指定了 --escrowcert 时这个选项才有意义。
  • --pbkdf=PBKDF - 为 LUKS keylot 设置 PBKDF(Password-Based Key Derivation Function)算法。另请参阅 man page cryptsetup(8)。只有在指定了 --encrypted 时这个选项才有意义。
  • --PBKDF-memory=PBKDF_MEMORY - 设置 PBKDF 的内存成本。另请参阅 man page cryptsetup(8)。只有在指定了 --encrypted 时这个选项才有意义。
  • --PBKDF-time=PBKDF_TIME - 设置 PBKDF 密码处理所花费的毫秒数。另请参阅 man page cryptsetup(8) 中的 --iter-time。只有在指定了 --encrypted 时这个选项才有意义,并且与 --pbkdf-iterations 相互排斥。
  • --PBKDF-iterations=PBKDF_ITERATIONS - 设定直接迭代数量并避免 PBKDF 基准测试。另请参阅 man page cryptsetup(8) 中的 --pbkdf-force-iterations。只有在指定了 --encrypted 时这个选项才有意义,并且与 --pbkdf-time 相互排斥。

示例

下面的例子展示,假定系统里有三个 SCSI 磁,如何为 / 创建 RAID 1 分区,为 /home 创建 RAID 5。它还创建三个交换分区,每个驱动器都有一个。

part raid.01 --size=6000 --ondisk=sda
part raid.02 --size=6000 --ondisk=sdb
part raid.03 --size=6000 --ondisk=sdc
part swap --size=512 --ondisk=sda
part swap --size=512 --ondisk=sdb
part swap --size=512 --ondisk=sdc
part raid.11 --size=1 --grow --ondisk=sda
part raid.12 --size=1 --grow --ondisk=sdb
part raid.13 --size=1 --grow --ondisk=sdc
raid / --level=1 --device=rhel8-root --label=rhel8-root raid.01 raid.02 raid.03
raid /home --level=5 --device=rhel8-home --label=rhel8-home raid.11 raid.12 raid.13
Copy to Clipboard Toggle word wrap

备注

  • 如果您丢失了 LUKS 密码短语,那么就完全无法访问所有加密的分区及其数据。丢失的密码短语是无法找回的。但是,您可以使用 --escrowcert 保存加密密码短语,并使用 --backuppassphrase 选项创建加密密码短语备份。

C.5.10. volgroup

volgroup Kickstart 命令是可选的。它创建一个逻辑卷管理器(LVM)组。

语法

volgroup name [OPTIONS] [partition*]
Copy to Clipboard Toggle word wrap

必填选项

  • name - 新卷组的名称。

选项

  • partition - 用作卷组存储支持的物理卷分区。
  • --noformat - 使用现有卷组而不对其进行格式化。
  • --useexisting - 使用现有卷组并重新格式化它。如果使用这个选项,不要指定分区。例如:

    volgroup rhel00 --useexisting --noformat
    Copy to Clipboard Toggle word wrap
  • --pesize= - 以 KiB 为单位设置卷组物理扩展的大小。默认值为 4096(4 MiB),最小值为 1024(1 MiB)。
  • --reserved-space= - 指定在 MiB 的卷组中保留未使用的空间量。只适用于新创建的卷组。
  • --reserved-percent= - 指定卷组空间占未使用空间的百分比。只适用于新创建的卷组。

备注

  • 首先创建分区,然后创建逻辑卷组,然后创建逻辑卷。例如:

    part pv.01 --size 10000
    volgroup my_volgrp pv.01
    logvol / --vgname=my_volgrp --size=2000 --name=root
    Copy to Clipboard Toggle word wrap
  • 在使用 Kickstart 安装 Red Hat Enterprise Linux 时,不要在逻辑卷和卷组名称中使用短划线(-)字符。如果使用这个字符,安装会完成,但 /dev/mapper/ 目录会列出这些卷和卷组的每个横线都会加倍。例如,名为 volgrp-01 的卷组,其包含名为 logvol-01 的逻辑卷将被列为 /dev/mapper/volgrp--01-logvol--01

    这个限制只适用于新创建的逻辑卷和卷组名称。如果您使用 --noformat 选项重复使用现有的名称,则不会更改它们的名称。

C.5.11. logvol

logvol Kickstart 命令是可选的。它为逻辑卷管理器(LVM)创建一个逻辑卷。

语法

logvol mntpoint --vgname=name --name=name [OPTIONS]
Copy to Clipboard Toggle word wrap

必填选项

mntpoint

挂载分区的挂载点。必须是以下格式之一:

  • /path

    例如: //home

  • swap

    该分区被用作交换空间。

    要自动决定 swap 分区的大小,请使用 --recommended 选项:

    swap --recommended
    Copy to Clipboard Toggle word wrap

    要自动决定 swap 分区的大小,并允许系统的额外空间可以休眠,请使用 --hibernation 选项:

    swap --hibernation
    Copy to Clipboard Toggle word wrap

    分配的大小将相当于由 --recommended 分配的交换空间加上您系统上的 RAM 量。有关这些命令所分配的 swap 大小,请参阅为 AMD64、Intel 64 和 64 位 ARM 系统 推荐的分区方案

--vgname=name
卷组名称。
--name=name
逻辑卷名称。

可选选项

--noformat
使用现有逻辑卷且不要对其进行格式化。
--useexisting
使用现有逻辑卷并重新格式化它。
--fstype=
为逻辑卷设置文件系统类型。有效值为 xfsext2ext3ext4swapvfat
--fsoptions=

指定挂载文件系统时要使用的选项的自由格式字符串。该字符串将复制到安装的系统的 /etc/fstab 文件中,并且应用引号括起来。

注意

在 EFI 系统分区(/boot/efi)中,anaconda 硬编码了值,并忽略了用户指定的 --fsoptions 值。

--mkfsoptions=

指定要传递给在这个分区上创建文件系统的程序的其他参数。没有对参数列表进行任何操作,因此必须以可直接传递给 mkfs 程序的格式提供。这意味着,根据具体文件系统,多个选项应该用逗号分开,或使用双引号分开。例如,

part /opt/foo1 --size=512 --fstype=ext4 --mkfsoptions="-O ^has_journal,^flex_bg,^metadata_csum"

part /opt/foo2 --size=512 --fstype=xfs --mkfsoptions="-m bigtime=0,finobt=0"
Copy to Clipboard Toggle word wrap

详情请查看您要创建的文件系统的手册页。例如:mkfs.ext4mkfs.xfs

--fsprofile=
指定传递给在这个分区上创建文件系统的程序的使用类型。使用类型定义了创建文件系统时使用的各种微调参数。要使用这个选项,文件系统必须支持使用类型,且必须有一个配置文件来列出有效类型。对于 ext2ext3ext4,此配置文件为 /etc/mke2fs.conf
--label=
为逻辑卷设置标签。
--grow
扩展逻辑卷以占据可用空间(若有),或使用指定的最大值(若有)。只有在磁盘镜像中预分配了最小存储空间时,必须使用该选项,并希望该卷扩展并占据所有可用空间。在物理环境中,这是一次性的操作。但是在虚拟环境中,当虚拟机将任何数据写入虚拟磁盘时,卷大小会增加。
--size=
MiB 中的逻辑卷的大小。此选项不能与 --percent= 选项一同使用。
--percent=

考虑任何静态大小逻辑卷时的逻辑卷大小,作为卷组中剩余空间的百分比。这个选项不能与 --size= 选项一同使用。

重要

在创建新逻辑卷时,您必须使用 --size= 选项静态指定其大小,或使用 --percent= 选项指定剩余空间的百分比。您不能在同一逻辑卷中同时使用这些选项。

--maxsize=
当将逻辑卷设置为可扩充时 MiB 的最大值。在这里指定一个整数值,如 500 (不要包含单位)。
--recommended
创建逻辑卷时使用这个选项,根据您的系统硬件自动决定这个卷的大小。有关推荐的方案的详情,请参考为 AMD64、Intel 64 和 64 位 ARM 系统 推荐的分区方案
--resize
重新调整逻辑卷大小。如果使用这个选项,还必须指定 --useexisting--size
--encrypted

指定该逻辑卷应该使用 Linux Unified Key Setup(LUKS)进行加密,使用 --passphrase= 选项中提供的密码短语。如果您没有指定密码短语,安装程序将使用 autopart --passphrase 命令设定的默认系统级密码,或者在未设定默认密码时暂停安装并提示您输入密码短语。

注意

在加密一个或多个分区时, Anaconda 会尝试收集 256 字节熵,以保证安全加密分区。收集熵可能需要一些时间 - 无论是否有收集到足够的熵,该过程将在最多 10 分钟后停止。

与安装系统互动(通过键盘输入或移动鼠标)可加速此进程。如果要在虚拟机中安装,您还可以将 virtio-rng 设备(虚拟随机数生成器)附加到客户机。

--passphrase=
指定在加密这个逻辑卷时要使用的密码短语。这个选项必须与 --encrypted 选项一同使用,单独使用无效。
--cipher=
如果 Anaconda 默认的 aes-xts-plain64 不符合要求,则指定要使用的加密类型。这个选项必须与 --encrypted 选项一同使用;其本身无效。安全强化 文档中列出了可用的加密类型,但红帽强烈建议您使用 aes-xts-plain64aes-cbc-essiv:sha256
--escrowcert=URL_of_X.509_certificate
将所有加密卷的数据加密密钥保存为 /root 中的文件,使用来自 URL_of_X.509_certificate 指定的 URL 的 X.509 证书进行加密。每个加密卷的密钥都作为单独的文件保存。只有在指定了 --encrypted 时这个选项才有意义。
--luks-version=LUKS_VERSION
指定应用来加密文件系统的 LUKS 格式版本。只有在指定了 --encrypted 时这个选项才有意义。
--backuppassphrase
为每个加密卷添加随机生成的密码短语。将这些密码短语存储在 /root 中的单独文件中,使用通过 --escrowcert 指定的 X.509 证书进行加密。只有在指定了 --escrowcert 时这个选项才有意义。
--pbkdf=PBKDF
为 LUKS keylot 设置基于密码的身份验证(PBKDF)算法。另请参阅 man page cryptsetup(8)。只有在指定了 --encrypted 时这个选项才有意义。
--pbkdf-memory=PBKDF_MEMORY
为 PBKDF 设置内存成本。另请参阅 man page cryptsetup(8)。只有在指定了 --encrypted 时这个选项才有意义。
--pbkdf-time=PBKDF_TIME
设置 PBKDF 密码处理所消耗的毫秒数。另请参阅 man page cryptsetup(8) 中的 --iter-time。只有在指定了 --encrypted 时这个选项才有意义,并且与 --pbkdf-iterations 相互排斥。
--pbkdf-iterations=PBKDF_ITERATIONS
设定直接迭代的次数,并避免 PBKDF 基准出现。另请参阅 man page cryptsetup(8) 中的 --pbkdf-force-iterations。只有在指定了 --encrypted 时这个选项才有意义,并且与 --pbkdf-time 相互排斥。
--thinpool
创建精简池逻辑卷。(使用 none 挂载点)
--metadatasize=size
指定新精简池设备的元数据大小(单位 MiB)。
--chunksize=size
为新的精简池设备指定块大小(单位 KiB)。
--thin
创建精简逻辑卷。(需要使用 --poolname
--poolname=name
指定要在其中创建精简逻辑卷的精简池名称。需要 --thin 选项。
--profile=name
指定与精简逻辑卷搭配使用的配置配置集的名称。如果使用,该名称也会包含在给定逻辑卷的元数据中。默认情况下,可用的配置集为 defaultthin-performance,在 /etc/lvm/profile/ 目录中定义。有关其他信息,请参见 lvm(8) 手册页。
--cachepvs=
用逗号分开的物理卷列表,它应用作这个卷的缓存。
--cachemode=

指定应该使用哪种模式缓存这个逻辑卷 - writebackwritethrough

注意

有关缓存的逻辑卷及其模式的详情,请参考您系统上的 lvmcache (7) 手册页。

--cachesize=
附加到逻辑卷的缓存大小,以 MiB 为单位。此选项需要 --cachepvs= 选项。

备注

  • 在使用 Kickstart 安装 Red Hat Enterprise Linux 时,不要在逻辑卷和卷组名称中使用短划线(-)字符。如果使用这个字符,安装会完成,但 /dev/mapper/ 目录会列出这些卷和卷组的每个横线都会加倍。例如,名为 volgrp-01 的卷组包含一个逻辑卷 logvol-01,它将被列为 /dev/mapper/volgrp-​01-logvol—​01.

    这个限制只适用于新创建的逻辑卷和卷组名称。如果您使用 --noformat 选项重复使用现有的名称,则不会更改它们的名称。

  • 如果您丢失了 LUKS 密码短语,那么就完全无法访问所有加密的分区及其数据。丢失的密码短语是无法找回的。但是,您可以使用 --escrowcert 保存加密密码短语,并使用 --backuppassphrase 选项创建加密密码短语备份。

示例

  • 首先创建分区,然后创建逻辑卷组,然后创建逻辑卷:

    part pv.01 --size 3000
    volgroup myvg pv.01
    logvol / --vgname=myvg --size=2000 --name=rootvol
    Copy to Clipboard Toggle word wrap
  • 首先创建分区,然后创建逻辑卷组,再创建逻辑卷以占据卷组中剩余的 90% 空间:

    part pv.01 --size 1 --grow
    volgroup myvg pv.01
    logvol / --vgname=myvg --name=rootvol --percent=90
    Copy to Clipboard Toggle word wrap

C.5.12. snapshot

snapshot Kickstart 命令是可选的。在安装过程中使用 LVM 精简卷快照来创建 LVM 精简卷快照。这可让您在安装前或安装后备份逻辑卷。

要创建多个快照,请多次添加 snaphost Kickstart 命令。

语法

snapshot vg_name/lv_name --name=snapshot_name --when=pre-install|post-install
Copy to Clipboard Toggle word wrap

选项

  • vg_name/lv_name - 设置卷组和逻辑卷的名称,以便从中创建快照。
  • --name=snapshot_name - 设置快照的名称。这个名称在卷组中必须是唯一的。
  • --when=pre-install|post-install - 如果在安装开始前或安装完成后创建快照,则设置。

C.5.13. mount

mount Kickstart 命令是可选的。它为现有块设备分配挂载点,并选择性地将其重新格式化为给定格式。

语法

mount [OPTIONS] device mountpoint
Copy to Clipboard Toggle word wrap

必须的选项

  • device - 要挂载的块设备。
  • mountpoint - 挂载 device 的位置。它必须是有效的挂载点,如 //usr,如果设备不可卸载,则为 none (如 swap)。

可选选项:

  • --reformat= - 指定应重新格式化该设备的新格式(如 ext4)。
  • --mkfsoptions= - 指定要传递给 命令的附加选项,该命令将创建 --reformat= 中指定的新文件系统。这里提供的选项列表没有被处理,因此必须使用可直接传递给 mkfs 程序的格式指定。根据具体文件系统,选项列表应该用逗号分开,或使用双引号分开。有关具体详情,请参阅 mkfs man page(例如 mkfs.ext4(8)mkfs.xfs(8))。
  • --mountoptions= - 指定自由格式字符串,其中包含挂载文件系统时要使用的选项。字符串将复制到安装的系统上的 /etc/fstab 文件,并使用双引号括起来。有关挂载选项的完整列表,请参见 mount(8) 手册页,有关基础知识,请参见 fstab(5)

备注

  • 与 Kickstart 中的大多数其他存储配置命令不同,mount 不需要您在 Kickstart 文件中描述整个存储配置。您只需要确定系统中存在描述的块设备。但是,如果要使用挂载的所有设备创建存储堆栈,则必须使用其他命令,比如 part 要这样做。
  • 在同一个 Kickstart 文件中,您不能将 mount 与其他存储相关的命令,如 partlogvolautopart 一起使用。

C.5.14. zipl

zipl Kickstart 命令是可选的。它为 64 位 IBM Z 指定 ZIPL 配置。只使用此命令一次。

选项

  • --secure-boot - 如果安装系统支持,则启用安全引导。
注意

当在 IBM z14 之后的系统中安装时,无法从 IBM z14 或更早的型号引导安装的系统。

  • --force-secure-boot - 无条件启用安全引导。
注意

IBM z14 及更早的型号不支持安装。

  • --no-secure-boot - 禁用安全引导.
注意

IBM z14 及更早的型号不支持安全引导。如果要在 IBM z14 及更早的型号中引导安装的系统,请使用 --no-secure-boot

C.5.15. fcoe

fcoe Kickstart 命令是可选的。它指定除了由 EDD (Enhanced Disk Drive Services)发现的设备外,还要自动激活哪些 FCoE 设备。

语法

fcoe --nic=name [OPTIONS]
Copy to Clipboard Toggle word wrap

选项

  • --nic= (必需)- 要激活的设备的名称。
  • --dcb= - 建立数据中心桥接 (DCB) 设置。
  • --autovlan - 自动发现 VLAN。默认启用这个选项。

C.5.16. iscsi

iscsi Kickstart 命令是可选的。它指定了在安装过程中要添加的附加 iSCSI 存储。

语法

iscsi --ipaddr=address [OPTIONS]
Copy to Clipboard Toggle word wrap

必填选项

  • --ipaddr= (必需)- 要连接的目标的 IP 地址。

可选选项

  • --port= (必需)- 端口号。如果没有,则默认自动使用 --port=3260
  • --target= - 目标 IQN(iSCSI 限定名称)。
  • --iface= - 将连接绑定到特定网络接口,而不使用由网络层决定的默认接口。一旦使用,必须在整个 Kickstart 文件的 iscsi 命令的所有实例中指定它。
  • --user= - 与目标进行身份验证所需的用户名
  • --password= - 与为目标指定的用户名对应的密码
  • --reverse-user= - 从使用反向 CHAP 身份验证的目标向启动器进行身份验证所需的用户名
  • --reverse-password= - 与为启动器指定的用户名对应的密码

备注

  • 如果使用 iscsi 命令,还必须使用 iscsiname 命令为 iSCSI 节点分配名称。在 Kickstart 文件中,iscsiname 命令需要在 iscsi 命令的前面。
  • 尽可能在系统 BIOS 或固件(Intel 系统的iBFT)中配置 iSCSI 存储,而不是使用 iscsi 命令。Anaconda 自动检测并使用在 BIOS 或固件中配置的磁盘,且在 Kickstart 文件中不需要特殊配置。
  • 如果您必须使用 iscsi 命令,请确保在安装开始时激活联网,并且在使用 clearpartignoredisk 等命令引用 iSCSI 磁盘iscsi 命令会出现在 Kickstart 文件中。

C.5.17. iscsiname

iscsiname Kickstart 命令是可选的。它为 iscsi 命令指定的 iSCSI 节点分配名称。仅使用此命令一次。

语法

iscsiname iqname
Copy to Clipboard Toggle word wrap

选项

  • iqname - 分配给 iSCSI 节点的名称。

备注

  • 如果在 Kickstart 文件中使用 iscsi 命令,则必须在 Kickstart 文件 前面 指定 iscsiname

C.5.18. nvdimm

nvdimm Kickstart 命令是可选的。它对非线性内存模块(NVDIMM)设备执行操作。默认情况下,NVDIMM 设备会被安装程序忽略。您必须使用 nvdimm 命令在这些设备中启用安装。

语法

nvdimm action [OPTIONS]
Copy to Clipboard Toggle word wrap

操作

  • reconfigure - 将特定 NVDIMM 设备重新配置为给定模式。另外,指定的设备被隐式标记为要使用的,因此后续的同一设备 nvdimm use 命令就冗余了。这个操作使用以下格式:

    nvdimm reconfigure [--namespace=NAMESPACE] [--mode=MODE] [--sectorsize=SECTORSIZE]
    Copy to Clipboard Toggle word wrap
    • --namespace= - 按命名空间的设备规格。例如:

      nvdimm reconfigure --namespace=namespace0.0 --mode=sector --sectorsize=512
      Copy to Clipboard Toggle word wrap
    • --mode= - 模式规格。目前,只有值 sector 可用。
    • --sectorsize= - 扇区模式的扇区大小。例如:

      nvdimm reconfigure --namespace=namespace0.0 --mode=sector --sectorsize=512
      Copy to Clipboard Toggle word wrap

      支持的扇区大小为 512 和 4096 字节。

  • use - 将 NVDIMM 设备指定为安装目标。该设备必须已通过 nvdimm reconfigure 命令配置为扇区模式。这个操作使用以下格式:

    nvdimm use [--namespace=NAMESPACE|--blockdevs=DEVICES]
    Copy to Clipboard Toggle word wrap
    • --namespace= - 按命名空间指定设备。例如:

      nvdimm use --namespace=namespace0.0
      Copy to Clipboard Toggle word wrap
    • --blockdevs= - 指定与要使用的 NVDIMM 设备对应的块设备列表。支持星号 * 通配符。例如:

      nvdimm use --blockdevs=pmem0s,pmem1s
      nvdimm use --blockdevs=pmem*
      Copy to Clipboard Toggle word wrap

C.5.19. zfcp

zfcp Kickstart 命令是可选的。它定义了光纤通道设备。

这个选项只适用于 64 位 IBM Z。必须指定以下所有选项。

语法

zfcp --devnum=devnum [--wwpn=wwpn --fcplun=lun]
Copy to Clipboard Toggle word wrap

选项

  • --devnum= - 设备号(zFCP 适配器设备总线 ID)。
  • --WWPN= - 设备的全球端口名称 (WWPN)。形式为 16 位数字,前面带有 0x
  • --fcplun= - 该设备的逻辑单元号 (LUN)。形式为 16 位数字,前面带有 0x
注意

如果提供了自动 LUN 扫描且安装了 8 或更高版本,则可以指定 FCP 设备总线 ID。否则,所有这三个参数都是必需的。如果没有通过 zfcp.allow_lun_scan 模块参数禁用,自动 LUN 扫描可用于在 NPIV 模式下对 FCP 设备的操作。(默认启用)它对使用指定的总线 ID 附加到 FCP 设备上的存储区域网络中发现的所有 SCSI 设备提供访问权限。

示例

zfcp --devnum=0.0.4000 --wwpn=0x5005076300C213e9 --fcplun=0x5022000000000000
zfcp --devnum=0.0.4000
Copy to Clipboard Toggle word wrap

这部分中的 Kickstart 命令与 Red Hat Enterprise Linux 安装程序默认提供的附加组件相关:Kdump 和 OpenSCAP。

C.6.1. %addon com_redhat_kdump

%addon com_redhat_kdump Kickstart 命令是可选的。这个命令配置 kdump 内核崩溃转储机制。

语法

%addon com_redhat_kdump [OPTIONS]
%end
Copy to Clipboard Toggle word wrap

注意

这个命令的语法比较特殊,因为它是一个附加组件,不是内置的 Kickstart 命令。

备注

Kdump 是内核崩溃转储机制,可让您保存系统内存内容,以便稍后进行分析。它依赖于 kexec,可用于在不重新启动系统的情况下从另一个内核上下文引导 Linux 内核,并保留第一个内核内存的内容,否则会丢失第一个内核的内存。

如果系统崩溃,kexec 引导进入第二个内核(捕获内核)。这个捕获内核位于系统内存的保留部分。然后 Kdump 会捕获崩溃内核的内存(崩溃转储)并将其保存到指定位置。无法使用这个 Kickstart 命令配置该位置 ; 必须在安装后通过编辑 /etc/kdump.conf 配置文件来配置该位置。

有关 Kdump 的详情,请参考 安装 kdump

选项

  • --enable - 在安装的系统中启用 kdump。
  • --disable - 在安装的系统中禁用 kdump。
  • --reserve-mb= - 要为 kdump 保留的内存量,单位为 MiB。例如:

    %addon com_redhat_kdump --enable --reserve-mb=128
    %end
    Copy to Clipboard Toggle word wrap

    您还可以指定 auto 而不是数字值。在这种情况下,安装程序将根据 管理、监控和更新内核 文档中的 kdump 内存要求部分中描述的标准自动决定内存量。

    如果启用 kdump 且没有指定 --reserve-mb= 选项,则会使用 auto 值。

  • --enablefadump - 在允许它的系统中(特别是 IBM Power Systems 服务器)启用固件辅助转储。

C.6.2. %addon org_fedora_oscap

%addon org_fedora_oscap Kickstart 命令是可选的。

OpenSCAP 安装程序附加组件是用来在安装的系统中应用 SCAP(安全内容自动化协议)内容 - 安全策略。从 Red Hat Enterprise Linux 7.2 开始默认启用此附加组件。启用后,会自动安装提供这个功能的软件包。但默认情况下不会强制任何策略。这代表,除非特别指定,在安装过程中或安装后不会执行任何检查。

重要

不需要在所有系统中应用安全策略。只有在您的机构规则或政府法规强制某种策略时,才使用这个命令。

与大多数命令不同,此附加组件不接受常规选项,而是使用 %addon 定义正文中的键值对。这些键值对无法验证空白。值可以选择使用单引号 (') 或者双引号(")括起来。

语法

%addon org_fedora_oscap
key = value
%end
Copy to Clipboard Toggle word wrap

Keys

以下键可以被附加组件识别:

content-type

安全内容的类型。可能的值有 datastreamarchiverpmscap-security-guide

如果 content-typescap-security-guide,则附加组件将使用 scap-security-guide 软件包提供的内容,该内容存在于引导介质中。这意味着,除了 profile 外所有其他键都无效。

content-url
安全内容的位置。必须通过 HTTP、HTTPS 或者 FTP 访问该内容。必须有可用的网络连接方可访问远程位置中的内容定义。
datastream-id
content-url 值中引用的数据流的 ID。仅在 content-typedatastream 时使用。
xccdf-id
要使用的基准 ID。
content-path
应使用到 datastream 或 XCCDF 文件的路径,在归档中使用相对路径。
配置集
要应用的配置集 ID。使用 default 应用 default 配置文件。
fingerprint
content-url 引用的内容的 MD5、SHA1 或 SHA2 的校验和。
tailoring-path
应使用的定制文件的路径,在归档中作为相对路径指定。

示例

  • 以下是一个 %addon org_fedora_oscap 部分的示例,它使用安装介质中的 scap-security-guide 中的内容:

    例 C.1. 使用 SCAP 安全指南的 OpenSCAP 附加组件定义示例

    %addon org_fedora_oscap
    content-type = scap-security-guide
    profile = xccdf_org.ssgproject.content_profile_pci-dss
    %end
    Copy to Clipboard Toggle word wrap
  • 以下是从 web 服务器加载自定义配置集的复杂示例:

    例 C.2. 使用 Datastream 的 OpenSCAP 附加组件定义示例

    %addon org_fedora_oscap
    content-type = datastream
    content-url = http://www.example.com/scap/testing_ds.xml
    datastream-id = scap_example.com_datastream_testing
    xccdf-id = scap_example.com_cref_xccdf.xml
    profile =  xccdf_example.com_profile_my_profile
    fingerprint = 240f2f18222faa98856c3b4fc50c4195
    %end
    Copy to Clipboard Toggle word wrap

C.7. Anaconda 中使用的命令

pwpolicy 命令是 Anaconda UI 特定的命令,只能在 kickstart 文件的 %anaconda 部分中使用。

C.7.1. pwpolicy

pwpolicy Kickstart 命令是可选的。在安装过程中使用这个命令强制使用自定义密码策略。策略要求您为 root、用户或 luks 用户帐户创建密码。密码长度和强度等因素决定了密码的有效性。

语法

pwpolicy name [--minlen=length] [--minquality=quality] [--strict|--notstrict] [--emptyok|--notempty] [--changesok|--nochanges]
Copy to Clipboard Toggle word wrap

必填选项

  • name - 使用 rootuserluks 替换,以分别强制执行与 root 密码、用户密码或 LUKS 密码短语相关的策略。

可选选项

  • --minlen= - 以字符为单位设置允许密码长度的最小值。默认值为 6
  • --minquality= - 设置 libpwquality 库定义的最小允许密码质量。默认值为 1
  • --strict - 启用严格的密码强制.不接受没有满足 --minquality=--minlen= 中指定的要求的密码。默认禁用这个选项。
  • --notstrict - 在 GUI 中点 Done 两次后,可以接受不符合 --minquality=-minlen= 选项中指定的最低质量要求的密码。文本模式界面使用类似的机制。
  • --emptyok - 允许使用空密码。对于用户密码,默认启用。
  • --notempty - 不允许使用空密码。对于 root 密码和 LUKS 密码,默认启用。
  • --changesok - 允许在用户界面中更改密码,即使 Kickstart 文件已指定了密码。默认禁用此选项。
  • --nochanges - 不允许更改在 Kickstart 文件中已设置的密码。默认启用此选项。

备注

  • pwpolicy 命令是 Anaconda UI 特定的命令,只能在 kickstart 文件的 %anaconda 部分中使用。
  • libpwquality 程序库用于检查最低密码要求(长度和服务)。您可以使用 libpwquality 软件包提供的 pwscorepwmake 命令检查密码质量得分,或使用给定分数创建随机密码。有关这些命令的详情,请查看 pwscore(1)pwmake(1) man page。

C.8. kickstart 命令进行系统恢复

这部分中的 Kickstart 命令修复安装了的系统。

C.8.1. rescue

rescue Kickstart 命令是可选的。它提供有 root 特权的 shell 环境,以及一组系统管理工具修复安装以及排除问题,例如:

  • 以只读方式挂载文件系统
  • 阻塞列表或添加驱动程序磁盘中提供的驱动程序
  • 安装或升级系统软件包
  • 管理分区
注意

Kickstart 的救援模式与系统的救援模式和紧急模式不同,后者是 systemd 和服务管理器的一部分。

rescue 命令不自行修改系统。它只能通过在 /mnt/sysimage 下挂载系统的读写模式来设置救援环境。您可以选择不挂载系统,或者将其挂载为只读模式。仅使用此命令一次。

语法

rescue [--nomount|--romount]
Copy to Clipboard Toggle word wrap

选项

  • --nomount--romount - 控制如何在救援环境中挂载安装的系统。默认情况下,安装程序会找到您的系统并以读写模式挂载它,同时告知它在什么位置进行挂载。您可以选择不挂载任何内容(-- nomount 选项)或以只读模式挂载(-- romount 选项)。只能使用这两个选项中的一个。

备注

要运行救援模式,请制作 Kickstart 文件的副本,并在该文件中包含 rescue 命令。

使用 rescue 命令可使安装程序执行以下步骤:

  1. 运行 %pre 脚本。
  2. 为救援模式设置环境。

    下面的 kickstart 命令生效:

    1. updates
    2. sshpw
    3. logging
    4. lang
    5. network
  3. 设置高级存储环境。

    下面的 kickstart 命令生效:

    1. fcoe
    2. iscsi
    3. iscsiname
    4. nvdimm
    5. zfcp
  4. 挂载系统

    rescue [--nomount|--romount]
    Copy to Clipboard Toggle word wrap
  5. 运行 %post 脚本

    只有在安装的系统被挂载为读写模式时才运行这一步。

  6. 启动 shell
  7. 重启系统

部分 II. 安全设计

第 14 章 在安装过程中和安装后保护 RHEL

安全性甚至始于您开始安装红帽企业 Linux 之前。从一开始就安全地配置系统可以使以后更容易实施其他安全设置。

14.1. 磁盘分区

对于裸机上安装以及支持调整虚拟磁盘硬件和包含已安装了操作系统的文件系统的虚拟化或云环境,推荐的磁盘分区实践有所不同。

为了确保在 裸机安装 上隔离和保护数据,请为 /boot//home/tmp/var/tmp/ 目录创建单独的分区:

/boot
这个分区是系统在启动过程中读取的第一个分区。引导装载程序和用于将系统引导到 RHEL 8 的内核镜像保存在这个分区中。此分区不应加密。如果此分区包含在 / 中,并且该分区已加密或者不可用,那么您的系统将无法引导。
/home
当用户数据(/home)存储在 / 而不是独立分区中时,分区可能会填满,从而导致操作系统不稳定。另外,在将您的系统升级到下一个 RHEL 8 版本时,在将数据保存在 /home 分区中时会更容易,因为它不会在安装过程中被覆盖。如果 root 分区(/)损坏,则您的数据将永久丢失。通过使用单独的分区,对数据丢失有稍微多一点的保护。您还可以将此分区作为频繁备份的目标。
/tmp/var/tmp/
/tmp/var/tmp/ 目录都是用来存储不需要长期存储的数据。但是,如果大量数据填充了其中一个目录,则它可能会消耗掉您的所有存储空间。如果发生这种情况,且这些目录存储在 / 中,则您的系统可能会变得不稳定并崩溃。因此,将这些目录移到它们自己的分区中是一个不错的想法。

对于 虚拟机或云实例,单独的 /boot/home/tmp/var/tmp 分区是可选的,因为如果开始填满了,您可以增加虚拟磁盘大小和 / 分区。设置监控,以定期检查 / 分区使用情况,以便在相应增加虚拟磁盘大小之前,其不会填满。

注意

在安装过程中,您可以选择加密分区。您必须提供密码短语。此密语充当解锁批量加密密钥的密钥,该密钥用于保护分区的数据。

14.2. 在安装过程中限制网络连接

安装 RHEL 8 时,安装介质代表系统在特定时间的快照。因此,它可能没有最新的安全修复程序,并且可能容易受到某些问题的攻击,这些问题是在安装介质提供的系统发布后才修复的。

安装有潜在漏洞的操作系统时,始终将暴露限制在最近的必要网络区内。最安全的选择是"无网络"区,这意味着在安装过程中使计算机断开连接。在某些情况下,LAN 或内部网连接就足够了,而互联网连接的风险最大。要遵循最佳安全实践,请在从网络安装 RHEL 8 时选择与您的存储库最近的区域。

14.3. 安装所需的最少软件包

最好只安装您要使用的软件包,因为计算机上的每一款软件都可能包含漏洞。如果您要从 DVD 介质安装,请仔细选择要在安装过程中安装的软件包。如果您发现需要其他软件包,您可在以后将其添加到系统中。

14.4. 安装后流程

以下步骤是安全相关的流程,在安装 RHEL 8 后应该立即执行。

  • 更新您的系统。以 root 用户身份输入以下命令:

    # yum update
    Copy to Clipboard Toggle word wrap
  • 虽然在安装 Red Hat Enterprise Linux 时会自动启用防火墙服务 firewalld,但可以在 Kickstart 配置中明确禁用它。在这种情况下,请重新启用防火墙。

    要启动 firewalld,请以 root 用户身份输入以下命令:

    # systemctl start firewalld
    # systemctl enable firewalld
    Copy to Clipboard Toggle word wrap
  • 要提高安全性,请禁用您不需要的服务。例如,如果您的计算机上没有安装打印机,请使用以下命令禁用 cups 服务:

    # systemctl disable cups
    Copy to Clipboard Toggle word wrap

    要查看活动状态的服务,请输入以下命令:

    $ systemctl list-units | grep service
    Copy to Clipboard Toggle word wrap

在出现滥用 CPU SMT 的攻击时禁用 Simultaneous Multi Threading(SMT)。禁用 SMT 可缓解安全漏洞(如 L1TF 或 MDS)对系统的影响。

重要

禁用 SMT 可能会降低系统性能。

先决条件

  • 已安装 RHEL 8 web 控制台。
  • 您已启用了 cockpit 服务。
  • 您的用户帐户被允许登录到 web 控制台。

    具体步骤请参阅安装并启用 Web 控制台

流程

  1. 登录到 RHEL 8 web 控制台。

    详情请参阅 登录到 web 控制台

  2. Overview 选项卡中,找到 系统信息 字段并点查看硬件详细信息
  3. CPU Security 行上,点 Mitigations

    如果这个链接不存在,这意味着您的系统不支持 SMT,因此不会受到这个安全漏洞的影响。

  4. CPU Security Toggles 表中,打开 Disable simultaneous multithreading (nosmt) 选项。
  5. 保存并重启按钮。

系统重启后,CPU 不再使用 SMT。

第 15 章 使用系统范围的加密策略

系统范围的加密策略是一个系统组件,它配置核心加密子系统,包括 TLS、IPsec、SSH、DNSSec 和 Kerberos 协议。它提供了一小组策略,管理员可以选择这些策略。

15.1. 系统范围的加密策略

设置系统范围的策略时,RHEL 中的应用程序会紧随其后,并拒绝使用不符合该策略的算法和协议,除非您明确请求该应用程序这样做。也就是说,该策略适用于应用使用系统提供的配置运行时的默认行为,但在需要时您可以覆盖它。

RHEL 8 包含以下预定义的策略:

DEFAULT
默认的系统范围加密策略级别为当前威胁模型提供了安全设置。它允许 TLS 1.2 和 1.3 协议,以及 IKEv2 和 SSH2 协议。如果 RSA 密钥和 Diffie-Hellman 参数至少是 2048 位,则可以接受它们。
LEGACY
确保与 Red Hat Enterprise Linux 5 及更早版本的最大兼容性;由于攻击面增加而不太安全。除了 DEFAULT 级别算法和协议外,它还包括对 TLS 1.0 和 1.1 协议的支持。允许算法 DSA、3DES 和 RC4,如果 RSA 密钥和 Diffie-Hellman 参数至少是 1023 位,则可以接受它们。
FUTURE

更严格的前瞻性安全级别,旨在测试未来可能的策略。此策略不允许在签名算法中使用 SHA-1。它允许 TLS 1.2 和 1.3 协议,以及 IKEv2 和 SSH2 协议。如果 RSA 密钥和 Diffie-Hellman 参数至少是 3072 位,则可以接受它们。如果您的系统在公共互联网上进行通信,您可能会遇到互操作性问题。

重要

因为客户门户网站 API 中的证书使用的加密密钥不满足 FUTURE 系统范围的加密策略的要求,所以 redhat-support-tool 程序目前无法使用这个策略级别。

要临时解决这个问题,在连接到客户门户网站 API 时使用 DEFAULT 加密策略。

FIPS

符合 FIPS 140 要求。将 RHEL 系统切换到 FIPS 模式的 fips-mode-setup 工具在内部使用此策略。切换到 FIPS 策略不能保证符合 FIPS 140 标准。在将系统设置为 FIPS 模式后,还必须重新生成所有加密密钥。这在很多情况下都不可能。

RHEL 还提供 FIPS:OSPP 系统范围的子策略,其中包含对通用标准(CC)认证所需的加密算法的进一步限制。设置了此子策略后,系统的互操作性会降低。例如,您无法使用比 3072 位少的 RSA 和 DH 密钥、其它的 SSH 算法和几个 TLS 组。设置 FIPS:OSPP 也会阻止连接到 Red Hat Content Delivery Network (CDN)结构。另外,您无法将活动目录(AD)集成到使用 FIPS:OSPP 的 IdM 部署中 ,使用 FIPS:OSPP 的 RHEL 主机和 AD 域之间的通信可能无法工作,或者某些 AD 帐户可能无法进行身份验证。

注意

设置了 FIPS:OSPP 加密子策略后,您的系统不符合 CC 。使您的 RHEL 系统符合 CC 标准的唯一正确方法是遵循 cc-config 软件包中提供的指导。有关已认证的 RHEL 版本的列表、验证报告以及 CC 指南的链接,请参阅 Product compliance 红帽客户门户网站页面上的 Common Criteria 部分。

红帽不断调整所有策略级别,以便所有库都提供安全默认值,但使用 LEGACY 策略时除外。虽然 LEGACY 配置文件不提供安全默认值,但它不包括任何易被利用的算法。因此,在 Red Hat Enterprise Linux 生命周期内,任何所提供的策略中已启用的算法或可接受的密钥大小可能会发生变化。

此变更反映了新的安全标准和新的安全研究。如果您必须确保在 Red Hat Enterprise Linux 的整个生命周期内与特定系统的互操作性,对于与该系统交互的组件,您应该选择不使用系统范围的加密策略,或使用自定义加密策略重新启用特定的算法。

只有在应用程序支持它们时,策略级别中才允许所描述的具体算法和密码:

Expand
表 15.1. 在加密策略中启用的密码套件和协议
 LEGACYDEFAULTFIPSFUTURE

IKEv1

3DES

RC4

DH

最少 1024 位

最少 2048 位

最少 2048 位[a]

最少 3072 位

RSA

最少 1024 位

最少 2048 位

最少 2048 位

最少 3072 位

DSA

TLS v1.0

TLS v1.1

数字签名中的 SHA-1

CBC 模式密码

[b]

密钥小于 256 位的对称密码

证书中的 SHA-1 和 SHA-224 签名

[a] 您只能使用 RFC 7919 和 RFC 3526 中定义的 Diffie-Hellman 组。
[b] TLS 禁用 CBC 密码。在非 TLS 场景中,AES-128-CBC 被禁用,但启用了 AES-256-CBC。要禁用 AES-256-CBC,请应用自定义子策略。

15.2. 更改系统范围的加密策略

您可以使用 update-crypto-policies 工具更改系统上的系统范围加密策略,并重启系统。

先决条件

  • 您在系统上具有 root 权限。

流程

  1. 可选:显示当前加密策略:

    $ update-crypto-policies --show
    DEFAULT
    Copy to Clipboard Toggle word wrap
  2. 设置新的加密策略:

    # update-crypto-policies --set <POLICY>
    <POLICY>
    Copy to Clipboard Toggle word wrap

    <POLICY> 替换为您要设置的策略或子策略,如 FUTURELEGACYFIPS:OSPP

  3. 重启系统:

    # reboot
    Copy to Clipboard Toggle word wrap

验证

  • 显示当前加密策略:

    $ update-crypto-policies --show
    <POLICY>
    Copy to Clipboard Toggle word wrap

Red Hat Enterprise Linux 8 中的默认系统范围加密策略不允许使用较旧的不安全协议进行通信。对于需要与 Red Hat Enterprise Linux 6 兼容,以及需要与更早的版本兼容的情况,可以使用不太安全的 LEGACY 策略级别。

警告

切换到 LEGACY 策略级别会导致系统和应用程序的安全性较低。

流程

  1. 要将系统范围的加密策略切换到 LEGACY 级别,请以 root 用户身份输入以下命令:

    # update-crypto-policies --set LEGACY
    Setting system policy to LEGACY
    Copy to Clipboard Toggle word wrap

15.4. 在 web 控制台中设置系统范围的加密策略

您可以在 RHEL web 控制台界面中直接设置系统范围的加密策略和子策略。除了四个预定义的系统范围的加密策略外,您现在还可以通过图形界面应用以下策略和子策略的组合:

DEFAULT:SHA1
启用了 SHA-1 算法的 DEFAULT 策略。
LEGACY:AD-SUPPORT
具有不太安全设置的 LEGACY 策略提高了活动目录服务的互操作性。
FIPS:OSPP
信息安全评估标准的通用标准所需的具有进一步限制的 FIPS 策略。
警告

因为 FIPS:OSPP 系统范围的子策略包含对通用标准(CC)认证所需的加密算法的进一步限制,因此设置后系统的互操作性较差。例如,您无法使用少于 3072 位的 RSA 和 DH 密钥、其它 SSH 算法和几个 TLS 组。设置 FIPS:OSPP 也会阻止连接到 Red Hat Content Delivery Network (CDN)结构。另外,您无法将活动目录(AD)集成到使用 FIPS:OSPP 的 IdM 部署中 ,使用 FIPS:OSPP 的 RHEL 主机和 AD 域之间的通信可能无法工作,或者某些 AD 帐户可能无法进行身份验证。

请注意,在设置了 FIPS:OSPP 加密子策略后,您的 系统不符合 CC。使您的 RHEL 系统符合 CC 标准的唯一正确方法是遵循 cc-config 软件包中提供的指导。有关认证的 RHEL 版本的列表、验证报告以及到 国家信息保障合作伙伴(NIAP) 网站上托管的 CC 的链接,请参阅 产品合规 红帽客户门户网页上的 通用标准 部分。

先决条件

  • 已安装 RHEL 8 web 控制台。
  • 您已启用了 cockpit 服务。
  • 您的用户帐户被允许登录到 web 控制台。

    具体步骤请参阅安装并启用 Web 控制台

  • 您有 root 权限或使用 sudo 输入管理命令的权限。

流程

  1. 登录到 RHEL 8 web 控制台。

    详情请参阅 登录到 web 控制台

  2. Overview 页面的 Configuration 卡中,点 Crypto 策略旁的当前策略值。

    The web console: Overview

  3. Change crypto policy 对话框窗口中,点您要在系统上开始使用的策略。

    The web console: Change the system-wide cryptographic policy

  4. 应用并重新引导按钮。

验证

  • 重启后,重新登录到 web 控制台,并检查 Crypto policy 值是否与您选择的策略值对应。

    或者,您可以输入 update-crypto-policies --show 命令来在终端中显示当前系统范围的加密策略。

您可以通过在应用程序中直接配置受支持的密码套件和协议来自定义应用程序所使用的加密设置。

您还可以从 /etc/crypto-policies/back-ends 目录中删除与应用程序相关的符号链接,并使用您自定义的加密设置来替换它。此配置可防止对使用排除后端的应用程序使用系统范围的加密策略。此外,红帽不支持此修改。

15.5.1. 选择退出系统范围加密策略的示例

wget

要自定义 wget 网络下载器所使用的加密设置,请使用 --secure-protocol--ciphers 选项。例如:

$ wget --secure-protocol=TLSv1_1 --ciphers="SECURE128" https://example.com
Copy to Clipboard Toggle word wrap

如需更多信息,请参阅 wget(1) 手册页中的 HTTPS(SSL/TLS)选项部分。

curl

要指定 curl 工具使用的密码,请使用 --ciphers 选项,并提供以冒号分隔的密码列表作为值。例如:

$ curl https://example.com --ciphers '@SECLEVEL=0:DES-CBC3-SHA:RSA-DES-CBC3-SHA'
Copy to Clipboard Toggle word wrap

如需更多信息,请参阅 curl(1) 手册页。

Firefox

尽管您无法在 Firefox Web 浏览器中选择不使用系统范围的加密策略,但您可以在 Firefox 的配置编辑器中进一步限制受支持的密码和 TLS 版本。在地址栏中输入 about:config ,并根据需要修改 security.tls.version.min 选项的值。将 security.tls.version.min 设置为 1,允许将 TLS 1.0 作为最低要求,security.tls.version.min 2 启用 TLS 1.1,如此等等。

OpenSSH

要为您的 OpenSSH 服务器选择不使用系统范围的加密策略,请在 /etc/sysconfig/sshd 文件中取消具有 CRYPTO_POLICY= 变量的行的注释。更改后,您在 /etc/ssh/sshd_config 文件中的 CiphersMACKexAlgoritmsGSSAPIKexAlgorithms 部分指定的值不会被覆盖。

详情请查看 sshd_config(5) 手册页。

要为您的 OpenSSH 客户端选择不使用系统范围的加密策略,请执行以下任务之一:

  • 对于给定的用户,使用 ~/.ssh/config 文件中特定于用户的配置覆盖全局 ssh_config
  • 对于整个系统,在 /etc/ssh/ssh_config.d/ 目录中的置入配置文件中指定加密策略,使用小于 5 的两位数字前缀,以便其在字典顺序上位于 05-redhat.conf 文件之前,并带有 .conf 后缀,例如 04-crypto-policy-override.conf

详情请查看 ssh_config(5) 手册页。

Libreswan

有关详细信息,请参阅 安全网络 文档中的 配置不使用系统范围加密策略的 IPsec 连接

15.6. 使用子属性自定义系统范围的加密策略

使用这个步骤调整启用的加密算法或协议集合。

您可以在现有系统范围的加密策略之上应用自定义子policies,或者从头开始定义此类策略。

范围的策略概念允许为不同的后端启用不同的算法集合。您可以将每个配置指令限制为特定的协议、库或服务。

另外,指令可以使用星号来指定使用通配符的多个值。

/etc/crypto-policies/state/CURRENT.pol 文件列出了通配符扩展后当前应用了系统范围加密策略中的所有设置。要使您的加密策略更严格,请考虑使用 /usr/share/crypto-policies/policies/FUTURE.pol 文件中列出的值。

您可以在 /usr/share/crypto-policies/policies/modules/ 目录中找到示例子策略。这个目录中的子策略文件还包含注释掉的行中的描述。

注意

RHEL 8.2 提供了对系统范围加密策略的自定义。您可以使用特定策略的概念,以及使用 RHEL 8.5 及更新版本中的通配符选项。

流程

  1. 签出到 /etc/crypto-policies/policies/modules/ 目录:

    # cd /etc/crypto-policies/policies/modules/
    Copy to Clipboard Toggle word wrap
  2. 为您的调整创建子政策,例如:

    # touch MYCRYPTO-1.pmod
    # touch SCOPES-AND-WILDCARDS.pmod
    Copy to Clipboard Toggle word wrap
    重要

    在策略模块的文件名中使用大写字母。

  3. 在您选择的文本编辑器中打开策略模块并插入修改系统范围加密策略的选项,例如:

    # vi MYCRYPTO-1.pmod
    Copy to Clipboard Toggle word wrap
    min_rsa_size = 3072
    hash = SHA2-384 SHA2-512 SHA3-384 SHA3-512
    Copy to Clipboard Toggle word wrap
    # vi SCOPES-AND-WILDCARDS.pmod
    Copy to Clipboard Toggle word wrap
    # Disable the AES-128 cipher, all modes
    cipher = -AES-128-*
    
    # Disable CHACHA20-POLY1305 for the TLS protocol (OpenSSL, GnuTLS, NSS, and OpenJDK)
    cipher@TLS = -CHACHA20-POLY1305
    
    # Allow using the FFDHE-1024 group with the SSH protocol (libssh and OpenSSH)
    group@SSH = FFDHE-1024+
    
    # Disable all CBC mode ciphers for the SSH protocol (libssh and OpenSSH)
    cipher@SSH = -*-CBC
    
    # Allow the AES-256-CBC cipher in applications using libssh
    cipher@libssh = AES-256-CBC+
    Copy to Clipboard Toggle word wrap
  4. 将更改保存到模块文件中。
  5. 将您的策略调整应用到 DEFAULT 系统范围加密策略级别:

    # update-crypto-policies --set DEFAULT:MYCRYPTO-1:SCOPES-AND-WILDCARDS
    Copy to Clipboard Toggle word wrap
  6. 要使您的加密设置对已经运行的服务和应用程序有效,请重启系统:

    # reboot
    Copy to Clipboard Toggle word wrap

验证

  • 检查 /etc/crypto-policies/state/CURRENT.pol 文件是否包含您的更改,例如:

    $ cat /etc/crypto-policies/state/CURRENT.pol | grep rsa_size
    min_rsa_size = 3072
    Copy to Clipboard Toggle word wrap

因为 SHA-1 哈希函数本身存在弱设计,并且升级加密分析使其容易受到攻击,所以 RHEL 8 默认不使用 SHA-1。然而,一些第三方应用程序(如公共签名)仍然使用 SHA-1。要在您系统的在签名算法中禁用 SHA-1,您可以使用 NO-SHA1 策略模块。

重要

NO-SHA1 策略模块只在签名中禁用 SHA-1 哈希函数,而在其它地方不禁用。特别是,NO-SHA1 模块仍然允许使用带有基于哈希消息验证代码(HMAC)的 SHA-1 。这是因为 HMAC 安全属性不依赖于相应哈希功能的冲突性,因此最近对 SHA-1 的攻击会对 HMAC 使用 SHA-1 的影响显著降低。

如果您的场景需要禁用特定的密钥交换(KEX)算法组合,例如 diffie-hellman-group-exchange-sha1,但您仍然想在其他组合中使用相关的 KEX 和 算法,请参阅红帽知识库解决方案步骤来禁用 SSH 中的 diffie-hellman-group1-sha1 算法

注意

RHEL 8.3 提供了禁用 SHA-1 的模块。RHEL 8.2 提供了对系统范围加密策略的自定义。

流程

  1. 将您的策略调整应用到 DEFAULT 系统范围加密策略级别:

    # update-crypto-policies --set DEFAULT:NO-SHA1
    Copy to Clipboard Toggle word wrap
  2. 要使您的加密设置对已经运行的服务和应用程序有效,请重启系统:

    # reboot
    Copy to Clipboard Toggle word wrap

15.8. 创建并设置自定义系统范围的加密策略

对于特定场景,您可以通过创建和使用完整的策略文件来自定义系统范围的加密策略。

注意

RHEL 8.2 提供了对系统范围加密策略的自定义。

流程

  1. 为自定义创建一个策略文件:

    # cd /etc/crypto-policies/policies/
    # touch MYPOLICY.pol
    Copy to Clipboard Toggle word wrap

    或者,从复制四个预定义策略级别中的一个开始:

    # cp /usr/share/crypto-policies/policies/DEFAULT.pol /etc/crypto-policies/policies/MYPOLICY.pol
    Copy to Clipboard Toggle word wrap
  2. 在您选择的文本编辑器中编辑带有自定义加密策略的文件以满足您的要求,例如:

    # vi /etc/crypto-policies/policies/MYPOLICY.pol
    Copy to Clipboard Toggle word wrap
  3. 将系统范围的加密策略切换到自定义级别:

    # update-crypto-policies --set MYPOLICY
    Copy to Clipboard Toggle word wrap
  4. 要使您的加密设置对已经运行的服务和应用程序有效,请重启系统:

    # reboot
    Copy to Clipboard Toggle word wrap

您可以使用 crypto_policies RHEL 系统角色在受管节点上配置 FUTURE 策略。例如,此策略有助于实现:

  • 未来应对新兴威胁:预见计算能力的前进.
  • 增强安全性:更强大的加密标准需要更长的密钥长度和更安全的算法。
  • 遵守高安全性标准:例如在医疗保健、电信和财务方面,数据敏感度很高,并且强大的加密可用性至关重要。

通常,FUTURE 适合处理高度敏感数据的环境,准备将来的法规,或采用长期安全策略。

警告

传统系统或软件不必支持更现代化且更严格的算法和协议,由 FUTURE 策略实施。例如,旧的系统可能不支持 TLS 1.3 或更大的密钥大小。这可能导致兼容性问题。

另外,使用强大的算法通常会增加计算工作负载,这可能会对您的系统性能造成负面影响。

先决条件

流程

  1. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    ---
    - name: Configure cryptographic policies
      hosts: managed-node-01.example.com
      tasks:
        - name: Configure the FUTURE cryptographic security policy on the managed node
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.crypto_policies
          vars:
            - crypto_policies_policy: FUTURE
            - crypto_policies_reboot_ok: true
    Copy to Clipboard Toggle word wrap

    示例 playbook 中指定的设置包括以下内容:

    crypto_policies_policy:未来
    在受管节点上配置所需的加密策略(FUTURE)。它可以是基本策略,也可以是带有一些子策略的基本策略。必须在受管节点上提供指定的基本策略和子策略。默认值为 null。这意味着配置没有被更改,crypto_policies RHEL 系统角色只会收集 Ansible 事实。
    crypto_policies_reboot_ok: true
    会导致系统在加密策略更改后重新启动,以确保所有服务和应用程序都将读取新的配置文件。默认值为 false

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.crypto_policies/README.md 文件。

  2. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    请注意,这个命令只验证语法,不会防止错误但有效的配置。

  3. 运行 playbook:

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap
警告

因为 FIPS:OSPP 系统范围的子策略包含对通用标准(CC)认证所需的加密算法的进一步限制,所以在设置它后系统的互操作性较差。例如,您无法使用少于 3072 位的 RSA 和 DH 密钥、其它 SSH 算法和几个 TLS 组。设置 FIPS:OSPP 也会阻止连接到 Red Hat Content Delivery Network (CDN)结构。另外,您无法将活动目录(AD)集成到使用 FIPS:OSPP 的 IdM 部署中 ,使用 FIPS:OSPP 的 RHEL 主机和 AD 域之间的通信可能无法工作,或者某些 AD 帐户可能无法进行身份验证。

请注意,在设置了 FIPS:OSPP 加密子策略后,您的 系统不符合 CC。使您的 RHEL 系统符合 CC 标准的唯一正确方法是遵循 cc-config 软件包中提供的指导。有关认证的 RHEL 版本的列表、验证报告以及到 国家信息保障合作伙伴(NIAP) 网站上托管的 CC 的链接,请参阅 产品合规 红帽客户门户网页上的 通用标准 部分。

验证

  1. 在控制节点上,创建另一个 playbook,例如 verify_playbook.yml

    ---
    - name: Verification
      hosts: managed-node-01.example.com
      tasks:
        - name: Verify active cryptographic policy
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.crypto_policies
        - name: Display the currently active cryptographic policy
          ansible.builtin.debug:
            var: crypto_policies_active
    Copy to Clipboard Toggle word wrap

    示例 playbook 中指定的设置包括以下内容:

    crypto_policies_active
    导出的 Ansible 事实,其中含有当前活动的策略名称,格式为 crypto_policies_policy 变量接受的格式。
  2. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/verify_playbook.yml
    Copy to Clipboard Toggle word wrap
  3. 运行 playbook:

    $ ansible-playbook ~/verify_playbook.yml
    TASK [debug] **************************
    ok: [host] => {
        "crypto_policies_active": "FUTURE"
    }
    Copy to Clipboard Toggle word wrap

    crypto_policies_active 变量显示受管节点上的活动策略。

分离有关专用加密设备的 secret 信息部分,如用于最终用户身份验证的智能卡和加密令牌,以及用于服务器应用程序的硬件安全模块(HSM),提供了额外的安全层。在 RHEL 中,通过 PKCS #11 API 对加密硬件的支持在不同的应用程序之间是一致的,加密硬件上的 secret 并不是一个复杂的任务。

16.1. 通过 PKCS #11 的加密硬件支持

公钥加密标准(PKCS)#11为保存加密信息并执行加密功能的加密设备定义一个应用程序编程接口(API)。

PKCS #11 引入了 加密令牌,它是一个以统一的方式向应用程序呈现每个硬件或软件设备的对象。因此,应用程序会查看智能卡等设备,这些设备通常由个人使用,硬件安全模块通常被计算机使用,作为 PKCS #11 加密令牌。

PKCS #11 令牌可以存储各种对象类型,包括证书、数据对象以及公有、私有或机密密钥。这些对象可通过 PKCS #11 统一资源标识符(URI)方案来唯一识别。

PKCS #11 URI 是一种标准方法,其根据对象属性来识别 PKCS #11 模块中的特定对象。这可让您以 URI 格式,使用同样的配置字符串来配置所有的库和应用程序。

RHEL 默认为智能卡提供 OpenSC PKCS #11 驱动程序。但是,硬件令牌和 HSM 可以有自己的 PKCS #11 模块,这些模块在系统中没有对应项。您可以使用 p11-kit 工具注册这样的 PKCS #11 模块,它作为系统中注册的智能卡驱动程序的包装器。

要使您自己的 PKCS #11 模块在系统上正常工作,请在 /etc/pkcs11/modules/ 目录中添加一个新的文本文件

您可以通过在 /etc/pkcs11/modules/ 目录中创建一个新的文本文件,来将自己的 PKCS #11 模块添加到系统。例如,p11-kit 中的 OpenSC 配置文件如下所示:

$ cat /usr/share/p11-kit/modules/opensc.module
module: opensc-pkcs11.so
Copy to Clipboard Toggle word wrap

您可以在智能卡中创建和存储 ECDSA 和 RSA 密钥,并由 OpenSSH 客户端中的智能卡进行身份验证。智能卡验证替换了默认密码验证。

先决条件

  • 在客户端中安装了 opensc 软件包,pcscd 服务正在运行。

流程

  1. 列出所有由 OpenSC PKCS #11 模块提供的密钥,包括其 PKCS #11 URIs,并将输出保存到 key.pub 文件:

    $ ssh-keygen -D pkcs11: > keys.pub
    Copy to Clipboard Toggle word wrap
  2. 将公钥传送到远程服务器。使用带有上一步中创建的 key .pub 文件的 ssh-copy-id 命令:

    $ ssh-copy-id -f -i keys.pub <username@ssh-server-example.com>
    Copy to Clipboard Toggle word wrap
  3. 使用 ECDSA 密钥连接到 < ssh-server-example.com >。您只能使用 URI 的子集,它唯一引用您的密钥,例如:

    $ ssh -i "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" <ssh-server-example.com>
    Enter PIN for 'SSH key':
    [ssh-server-example.com] $
    Copy to Clipboard Toggle word wrap

    因为 OpenSSH 使用 p11-kit-proxy 打包程序和 OpenSC PKCS modprobe 模块注册到 p11-kit 工具,所以您可以简化上一个命令:

    $ ssh -i "pkcs11:id=%01" <ssh-server-example.com>
    Enter PIN for 'SSH key':
    [ssh-server-example.com] $
    Copy to Clipboard Toggle word wrap

    如果您跳过 PKCS #11 URI 的 id= 部分,则 OpenSSH 会加载代理模块中可用的所有密钥。这可减少输入所需的数量:

    $ ssh -i pkcs11: <ssh-server-example.com>
    Enter PIN for 'SSH key':
    [ssh-server-example.com] $
    Copy to Clipboard Toggle word wrap
  4. 可选:您可以使用 ~/.ssh/config 文件中的同一 URI 字符串使配置持久:

    $ cat ~/.ssh/config
    IdentityFile "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so"
    $ ssh <ssh-server-example.com>
    Enter PIN for 'SSH key':
    [ssh-server-example.com] $
    Copy to Clipboard Toggle word wrap

    ssh 客户端工具现在自动使用来自智能卡中的这个 URI 和密钥。

在应用程序中使用智能卡进行身份验证可能会提高安全性,并简化自动化。您可以使用以下方法将公钥加密标准(PKCS) #11 URIs 集成到应用程序中:

  • Firefox web 浏览器会自动加载 p11-kit-proxy PKCS #11 模块。这意味着系统中的每个支持的智能卡都会被自动检测到。对于使用 TLS 客户端身份验证,不需要额外的设置,在服务器请求它们时会自动使用智能卡中的密钥和证书。
  • 如果您的应用程序使用 GnuTLSNSS 库,则它已经支持 PKCS #11 URI。另外,依赖 OpenSSL 库的应用程序可以通过 openssl-pkcs11 软件包提供的 pkcs11 引擎访问加密硬件模块,包括智能卡。
  • 需要使用智能卡上的私钥且不使用 NSSGnuTLSOpenSSL 的应用程序可以直接使用 p11-kit API 来使用加密硬件模块,包括智能卡,而不是使用特定 PKCS #11 模块的 PKCS #11 API。
  • 使用 wget 网络下载程序,您可以指定 PKCS #11 URI ,而不是本地存储的私钥和证书的路径。这可能会简化为需要安全存储私钥和证书的任务创建脚本。例如:

    $ wget --private-key 'pkcs11:token=softhsm;id=%01;type=private?pin-value=111111' --certificate 'pkcs11:token=softhsm;id=%01;type=cert' https://example.com/
    Copy to Clipboard Toggle word wrap
  • 您还可以在使用 curl 工具时指定 PKCS #11 URI :

    $ curl --key 'pkcs11:token=softhsm;id=%01;type=private?pin-value=111111' --cert 'pkcs11:token=softhsm;id=%01;type=cert' https://example.com/
    Copy to Clipboard Toggle word wrap

16.4. 在 Apache 中使用 HSM 保护私钥

Apache HTTP 服务器可以使用存储在硬件安全模块(HSM)上的私钥,这有助于防止密钥泄漏和中间人攻击。请注意,对于繁忙的服务器,这通常需要高性能的 HSM 。

对于 HTTPS 协议形式的安全通信,Apache HTTP 服务器(httpd)使用 OpenSSL 库。OpenSSL 本身不支持 PKCS #11 。要使用 HSMs,您必须安装 openssl-pkcs11 软件包,该软件包通过引擎界面提供对 PKCS #11 模块的访问。您可以使用 PKCS #11 URI 而不是常规文件名在 /etc/httpd/conf.d/ssl.conf 配置文件中指定服务器密钥和证书,例如:

SSLCertificateFile    "pkcs11:id=%01;token=softhsm;type=cert"
SSLCertificateKeyFile "pkcs11:id=%01;token=softhsm;type=private?pin-value=111111"
Copy to Clipboard Toggle word wrap

安装 httpd-manual 软件包以获取 Apache HTTP 服务器的完整文档,包括 TLS 配置。/etc/httpd/conf.d/ssl.conf 配置文件中的指令在 /usr/share/httpd/manual/mod_ssl.html 文件中进行了详细的描述。

16.5. 使用 HSM 保护 Nginx 中的私钥

Nginx HTTP 服务器可以使用存储在硬件安全模块(HSM)上的私钥,这有助于防止密钥泄漏和中间人攻击。请注意,对于繁忙的服务器,这通常需要高性能的 HSM 。

因为 Nginx 也使用 OpenSSL 进行加密操作,所以对 PKCS #11 的支持必须通过 openssl-pkcs11 引擎。nginx 目前只支持从 HSM 加载私钥,证书必须作为常规文件单独提供。修改 /etc/nginx/nginx.conf 配置文件 server 部分的 ssl_certificate ssl_certificate_key 选项:

ssl_certificate     /path/to/cert.pem
ssl_certificate_key "engine:pkcs11:pkcs11:token=softhsm;id=%01;type=private?pin-value=111111";
Copy to Clipboard Toggle word wrap

请注意,在 Nginx 配置文件中,PKCS #11 URI 需要 engine:pkcs 11: 前缀。这是因为其它 pkcs11 前缀引用引擎名称。

第 17 章 使用共享的系统证书

共享的系统证书存储使 NSS、GnuTLS、OpenSSL 和 Java 能够共享用于检索系统证书锚和块列表信息的默认源。默认情况下,信任存储包含 Mozilla CA 列表,包括正和负信任。系统允许更新核心 Mozilla CA 列表或选择其他证书列表。

17.1. 系统范围的信任存储

在 RHEL 中,整合的系统范围的信任存储位于 /etc/pki/ca-trust//usr/share/pki/ca-trust-source/ 目录中。对 /usr/share/pki/ca-trust-source/ 中信任设置的优先级的处理低于/etc/pki/ca-trust/ 中的设置。

证书文件根据它们所安装到的子目录处理。例如,信任定位符属于 /usr/share/pki/ca-trust-source/anchors//etc/pki/ca-trust/source/anchors/ 目录。

注意

在分层加密系统中,信任锚是其他各方认为值得信任的权威实体。在 X.509 架构中,根证书是从中派生信任链的信任锚。要启用链验证,信任方必须首先能够访问信任锚。

17.2. 添加新证书

要使用新的信任来源确认系统上的应用程序,请将相应的证书添加到系统范围的存储中,并使用 update-ca-trust 命令。

先决条件

  • ca-certificates 软件包存在于系统中。

流程

  1. 要在简单的 PEM 或 DER 文件格式中添加证书到系统中信任的 CA 列表中,请将证书文件复制到 /usr/share/pki/ca-trust-source/anchors//etc/pki/ca-trust/source/anchors/ 目录中,例如:

    # cp ~/certificate-trust-examples/Cert-trust-test-ca.pem /usr/share/pki/ca-trust-source/anchors/
    Copy to Clipboard Toggle word wrap
  2. 要更新系统范围的信任存储配置,请使用 update-ca-trust 命令:

    # update-ca-trust extract
    Copy to Clipboard Toggle word wrap
注意

虽然 Firefox 浏览器可以在不预先执行 update-ca-trust 的情况下使用一个添加的证书,但在每次 CA 更改后需要输入 update-ca-trust 命令。另请注意,浏览器(如 Firefox、Chromium 和 GNOME Web 缓存文件),您可能需要清除浏览器的缓存或重新启动浏览器来加载当前的系统证书配置。

17.3. 管理信任的系统证书

trust 命令提供了在共享的系统范围信任存储中管理证书的一种便捷方式。

  • 要列出、提取、添加、删除或修改信任锚,请使用 trust 命令。要查看这个命令的内置帮助信息,请不要输入任何参数,或使用 --help 指令:

    $ trust
    usage: trust command <args>...
    
    Common trust commands are:
      list             List trust or certificates
      extract          Extract certificates and trust
      extract-compat   Extract trust compatibility bundles
      anchor           Add, remove, change trust anchors
      dump             Dump trust objects in internal format
    
    See 'trust <command> --help' for more information
    Copy to Clipboard Toggle word wrap
  • 要列出所有系统信任锚和证书,请使用 trust list 命令:

    $ trust list
    pkcs11:id=%d2%87%b4%e3%df%37%27%93%55%f6%56%ea%81%e5%36%cc%8c%1e%3f%bd;type=cert
        type: certificate
        label: ACCVRAIZ1
        trust: anchor
        category: authority
    
    pkcs11:id=%a6%b3%e1%2b%2b%49%b6%d7%73%a1%aa%94%f5%01%e7%73%65%4c%ac%50;type=cert
        type: certificate
        label: ACEDICOM Root
        trust: anchor
        category: authority
    ...
    Copy to Clipboard Toggle word wrap
  • 要将信任锚存储在系统范围的信任存储中,请使用 trust anchor 子命令,并指定证书的路径。将 <path.to/certificate.crt> 替换为证书的路径及其文件名:

    # trust anchor <path.to/certificate.crt>
    Copy to Clipboard Toggle word wrap
  • 要删除证书,请使用证书的路径或证书的 ID:

    # trust anchor --remove <path.to/certificate.crt>
    # trust anchor --remove "pkcs11:id=<%AA%BB%CC%DD%EE>;type=cert"
    Copy to Clipboard Toggle word wrap

第 18 章 扫描系统以了解安全合规和漏洞

18.1. RHEL 中的配置合规工具

您可以使用以下配置合规工具在 Red Hat Enterprise Linux 中执行完全自动化的合规审计。这些工具基于安全内容自动化协议(SCAP)标准,专为自动定制合规策略而设计。

SCAP 工作台
scap-workbench 图形工具旨在对单个本地或远程系统执行配置和漏洞扫描。您还可以根据这些扫描和评估,使用它来生成安全报告。
OpenSCAP

带有 oscap 命令行工具的 OpenSCAP 库旨在对本地系统执行配置和漏洞扫描,以验证配置合规内容,并根据这些扫描和评估生成报告和指南。

重要

在使用 OpenSCAP 时可能会遇到内存消耗问题,这可能会导致程序过早停止,并阻止生成任何结果文件。详情请查看 OpenSCAP 内存消耗问题 知识库文章。

SCAP 安全指南(SSG)
scap-security-guide 软件包为 Linux 系统提供安全策略的集合。该指南包括一个实用强化建议目录,在适用的情况下与政府的要求相关联。该项目弥补了一般性政策要求和具体实施指南间的差距。
脚本检查引擎(SCE)
通过 SCE(即 SCAP 协议的扩展),管理员可以使用脚本语言(如 Bash、Python 和 Ruby)编写其安全内容。SCE 扩展在 openscap-engine-sce 软件包中提供。SCE 本身不是 SCAP 标准的一部分。

要在多个系统上远程执行自动合规审计,您可以使用 Red Hat Satellite 的 OpenSCAP 解决方案。

18.2. 红帽安全咨询 OVAL 源

Red Hat Enterprise Linux 安全审计功能是基于安全内容自动化协议(SCAP)标准的。SCAP 是一种多用途规格框架,支持自动化配置、漏洞和补丁检查、技术控制合规性活动和安全衡量。

SCAP 规范创建一个生态系统,其中安全内容的格式是众所周知的且标准化的,尽管扫描程序或策略编辑器的实现并不是强制性的。这使得组织能够一次性构建它们的安全策略(SCAP 内容),无论他们使用了多少家安全供应商。

开放式漏洞评估语言(OVAL)是 SCAP 最基本、最古老的组件。与其他工具和自定义脚本不同,OVAL 以声明式方法描述资源的必需状态。OVAL 代码从不直接执行,而是使用称为扫描器的 OVAL 解释器工具。OVAL 的声明性质可确保评估的系统状态不会被意外修改。

与所有其他 SCAP 组件一样,OVAL 也是基于 XML。SCAP 标准定义了多个文档格式。每一个都包括一种不同的信息,用于不同的目的。

红帽产品安全团队 通过跟踪和调查影响红帽客户的所有安全问题,来帮助客户评估和管理风险。它在红帽客户门户网站上提供及时、简洁的补丁和安全公告。红帽创建和支持 OVAL 补丁定义,提供机器可读的安全公告版本。

由于平台、版本及其他因素之间存在差异,红帽产品安全严重性等级评级无法直接与第三方提供的通用漏洞评分系统(CVSS)基准评级一致。因此,我们建议您使用 RHSA OVAL 定义,而不是第三方提供的定义。

RHSA OVAL 定义 可以单独提供,也可以作为一个完整的软件包提供,并在红帽客户门户网站上提供新安全公告的一小时内进行更新。

每个 OVAL 补丁定义将一对一地映射到红帽安全公告(RHSA)。由于 RHSA 可以包含对多个漏洞的修复,因此每个漏洞都通过其通用漏洞和风险(CVE)名称单独列出,并在我们的公共 bug 数据库中有一个指向其条目的链接。

RHSA OVAL 定义旨在检查系统上安装的 RPM 软件包是否存易受攻击的版本。可以扩展这些定义以包括进一步的检查,例如,查找软件包是否在易受攻击的配置中被使用。这些定义旨在涵盖红帽所提供的软件和更新。需要其他定义来检测第三方软件的补丁状态。

注意

Red Hat Enterprise Linux 合规服务的 Red Hat Insights 可帮助 IT 安全和合规性管理员评估、监控和报告 Red Hat Enterprise Linux 系统安全策略合规性。您还可以完全在合规服务 UI 中创建和管理 SCAP 安全策略。

18.3. 漏洞扫描

18.3.1. 红帽安全咨询 OVAL 源

Red Hat Enterprise Linux 安全审计功能是基于安全内容自动化协议(SCAP)标准的。SCAP 是一种多用途规格框架,支持自动化配置、漏洞和补丁检查、技术控制合规性活动和安全衡量。

SCAP 规范创建一个生态系统,其中安全内容的格式是众所周知的且标准化的,尽管扫描程序或策略编辑器的实现并不是强制性的。这使得组织能够一次性构建它们的安全策略(SCAP 内容),无论他们使用了多少家安全供应商。

开放式漏洞评估语言(OVAL)是 SCAP 最基本、最古老的组件。与其他工具和自定义脚本不同,OVAL 以声明式方法描述资源的必需状态。OVAL 代码从不直接执行,而是使用称为扫描器的 OVAL 解释器工具。OVAL 的声明性质可确保评估的系统状态不会被意外修改。

与所有其他 SCAP 组件一样,OVAL 也是基于 XML。SCAP 标准定义了多个文档格式。每一个都包括一种不同的信息,用于不同的目的。

红帽产品安全团队 通过跟踪和调查影响红帽客户的所有安全问题,来帮助客户评估和管理风险。它在红帽客户门户网站上提供及时、简洁的补丁和安全公告。红帽创建和支持 OVAL 补丁定义,提供机器可读的安全公告版本。

由于平台、版本及其他因素之间存在差异,红帽产品安全严重性等级评级无法直接与第三方提供的通用漏洞评分系统(CVSS)基准评级一致。因此,我们建议您使用 RHSA OVAL 定义,而不是第三方提供的定义。

RHSA OVAL 定义 可以单独提供,也可以作为一个完整的软件包提供,并在红帽客户门户网站上提供新安全公告的一小时内进行更新。

每个 OVAL 补丁定义将一对一地映射到红帽安全公告(RHSA)。由于 RHSA 可以包含对多个漏洞的修复,因此每个漏洞都通过其通用漏洞和风险(CVE)名称单独列出,并在我们的公共 bug 数据库中有一个指向其条目的链接。

RHSA OVAL 定义旨在检查系统上安装的 RPM 软件包是否存易受攻击的版本。可以扩展这些定义以包括进一步的检查,例如,查找软件包是否在易受攻击的配置中被使用。这些定义旨在涵盖红帽所提供的软件和更新。需要其他定义来检测第三方软件的补丁状态。

注意

Red Hat Enterprise Linux 合规服务的 Red Hat Insights 可帮助 IT 安全和合规性管理员评估、监控和报告 Red Hat Enterprise Linux 系统安全策略合规性。您还可以完全在合规服务 UI 中创建和管理 SCAP 安全策略。

18.3.2. 扫描系统漏洞

oscap命令行实用程序使您能够扫描本地系统,验证配置合规性内容,并根据这些扫描和评估生成报告和指南。此工具充当 OpenSCAP 库的前端,并根据它所处理的 SCAP 内容类型将其功能分组到模块(子命令)。

先决条件

  • openscap-scannerbzip2 软件包已安装。

流程

  1. 下载系统的最新 RHSA OVAL 定义:

    # wget -O - https://www.redhat.com/security/data/oval/v2/RHEL8/rhel-8.oval.xml.bz2 | bzip2 --decompress > rhel-8.oval.xml
    Copy to Clipboard Toggle word wrap
  2. 扫描系统漏洞并将结果保存到 vulnerability.html 文件中:

    # oscap oval eval --report vulnerability.html rhel-8.oval.xml
    Copy to Clipboard Toggle word wrap

验证

  • 在您选择的浏览器中检查结果,例如:

    $ firefox vulnerability.html &
    Copy to Clipboard Toggle word wrap

18.3.3. 扫描远程系统的漏洞

您可以通过 SSH 协议使用 oscap-ssh 工具,通过 OpenSCAP 扫描程序检查远程系统上的漏洞。

先决条件

  • openscap-utilsbzip2 软件包已安装在您用于扫描的系统中。
  • openscap-scanner 软件包已安装在远程系统上。
  • SSH 服务器在远程系统上运行。

流程

  1. 下载系统的最新 RHSA OVAL 定义:

    # wget -O - https://www.redhat.com/security/data/oval/v2/RHEL8/rhel-8.oval.xml.bz2 | bzip2 --decompress > rhel-8.oval.xml
    Copy to Clipboard Toggle word wrap
  2. 扫描远程系统上的漏洞,并将结果保存到文件中:

    # oscap-ssh <username>@<hostname> <port> oval eval --report <scan-report.html> rhel-8.oval.xml
    Copy to Clipboard Toggle word wrap

    替换:

    • 带有用户名和远程系统主机名的 <username>@<hostname>
    • 您可以通过端口号 <port> 访问远程系统,例如 22
    • 使用 oscap 保存扫描结果的文件名 <scan-report.html>

18.4. 配置合规性扫描

18.4.1. RHEL 中的配置合规性

您可以使用配置合规性扫描来遵循特定组织定义的基准。例如,如果您与美国政府合作,您可能需要使您的系统与操作系统保护配置文件(OSPP)保持一致,如果您是一个支付处理器,您可能需要使您的系统与支付卡行业数据安全标准(PCI-DSS)保持一致。您还可以执行配置合规性扫描来强化您的系统安全。

红帽建议您遵循 SCAP 安全指南软件包中提供的安全内容自动化协议(SCAP)的内容,因为它符合红帽针对受影响组件的最佳实践。

SCAP 安全指南软件包提供了符合 SCAP 1.2 和 SCAP 1.3 标准的内容。openscap 扫描器实用程序与SCAP安全指南包中提供的SCAP 1.2和SCAP 1.3内容兼容。

重要

执行配置合规性扫描不能保证系统是合规的。

SCAP 安全指南套件以数据流文档的形式为多个平台提供配置文件。数据流是包含定义、基准、配置文件和单个规则的文件。每条规则都规定了合规的适用性和要求。RHEL 提供多个配置文件来遵守安全策略。除了行业标准之外,红帽数据流还包含用于修复失败规则的信息。

合规性扫描资源的结构

Data stream
   ├── xccdf
   |      ├── benchmark
   |            ├── profile
   |            |    ├──rule reference
   |            |    └──variable
   |            ├── rule
   |                 ├── human readable data
   |                 ├── oval reference
   ├── oval          ├── ocil reference
   ├── ocil          ├── cpe reference
   └── cpe           └── remediation
Copy to Clipboard Toggle word wrap

配置文件是基于安全策略的一组规则,如 OSPP、PCI-DSS 和健康保险可移植性和责任法案(HIPAA)。这可让您以自动化的方式审核系统,以符合安全标准。

您可以修改(定制)配置文件来自定义某些规则,例如密码长度。有关配置文件定制的更多信息,请参阅 使用 SCAP Workbench 自定义安全配置文件

18.4.2. OpenSCAP 扫描的可能结果

根据应用到 OpenSCAP 扫描的数据流和配置文件,以及系统的各种属性,每个规则可能会产生一个特定的结果。以下是可能的结果,并有其含义的简要解释:

Pass
扫描没有发现与此规则有任何冲突。
Fail
扫描发现与此规则有冲突。
Not checked
OpenSCAP 对此规则不执行自动评估。手动检查您的系统是否符合此规则。
Not applicable
此规则不适用于当前配置。
Not selected
此规则不是配置文件的一部分。OpenSCAP 不评估此规则,也不会在结果中显示这些规则。
Error
扫描遇到了错误。要获得更多信息,您可以输入带有 --verbose DEVEL 选项的 oscap 命令。在红帽客户门户上提交支持问题单,或在 Red Hat Jira 的 RHEL 项目中 创建一个问题单。
Unknown
扫描遇到了意外情况。要获得更多信息,您可以输入带有 '--verbose DEVEL 选项的 oscap 命令。在红帽客户门户上提交支持问题单,或在 Red Hat Jira 的 RHEL 项目中 创建一个问题单。

18.4.3. 查看配置文件是否符合配置合规

在决定使用配置文件进行扫描或补救前,您可以使用 oscap info 子命令列出它们并检查其详细描述。

先决条件

  • openscap-scannerscap-security-guide 软件包已安装。

流程

  1. 列出 SCAP 安全指南项目所提供的带有安全合规配置文件的所有可用文件:

    $ ls /usr/share/xml/scap/ssg/content/
    ssg-firefox-cpe-dictionary.xml  ssg-rhel6-ocil.xml
    ssg-firefox-cpe-oval.xml        ssg-rhel6-oval.xml
    …
    ssg-rhel6-ds-1.2.xml          ssg-rhel8-oval.xml
    ssg-rhel8-ds.xml              ssg-rhel8-xccdf.xml
    …
    Copy to Clipboard Toggle word wrap
  2. 使用 oscap info 子命令显示有关所选数据流的详细信息。包含数据流的 XML 文件由其名称中的 -ds 字符串表示。在 Profiles 部分,您可以找到可用的配置文件及其 ID 列表:

    $ oscap info /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
    Profiles:
    …
      Title: Health Insurance Portability and Accountability Act (HIPAA)
        Id: xccdf_org.ssgproject.content_profile_hipaa
      Title: PCI-DSS v3.2.1 Control Baseline for Red Hat Enterprise Linux 8
        Id: xccdf_org.ssgproject.content_profile_pci-dss
      Title: OSPP - Protection Profile for General Purpose Operating Systems
        Id: xccdf_org.ssgproject.content_profile_ospp
    …
    Copy to Clipboard Toggle word wrap
  3. 从数据流文件中选择一个配置文件,并显示所选配置文件的更多详情。为此,可使用带有 --profile 选项的 oscap info ,后跟上一命令输出中显示的 ID 的最后一部分。例如,HIPPA 配置文件的 ID 是 xccdf_org.ssgproject.content_profile_hipaa--profile 选项的值为 hipaa

    $ oscap info --profile hipaa /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
    …
    Profile
    	Title: Health Insurance Portability and Accountability Act (HIPAA)
    
    	Description: The HIPAA Security Rule establishes U.S. national standards to protect individuals’ electronic personal health information that is created, received, used, or maintained by a covered entity.
    …
    Copy to Clipboard Toggle word wrap

18.4.4. 评估配置是否符合特定基准

您可以确定您的系统或远程系统是否符合特定基准,并使用 oscap 命令行工具将结果保存在报告中。

先决条件

  • openscap-scannerscap-security-guide 软件包已安装。
  • 您知道系统应遵守的基准中的配置文件的 ID。要查找 ID,请参阅 查看配置合规性的配置文件 部分。

流程

  1. 扫描本地系统以确定是否符合所选的配置文件,并将扫描结果保存到文件中:

    $ oscap xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
    Copy to Clipboard Toggle word wrap

    替换:

    • 使用 oscap 保存扫描结果的文件名 <scan-report.html>
    • 系统应该遵守的配置文件 ID <profileID>,例如 hipaa
  2. 可选:扫描远程系统以确定是否符合所选的配置文件,并将扫描结果保存到文件中:

    $ oscap-ssh <username>@<hostname> <port> xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
    Copy to Clipboard Toggle word wrap

    替换:

    • 带有用户名和远程系统主机名的 <username>@<hostname>
    • 您可以访问远程系统的 <port> 端口号。
    • 使用 oscap 保存扫描结果的文件名 <scan-report.html>
    • 系统应该遵守的配置文件 ID <profileID>,例如 hipaa

18.5. 修复系统,使其与特定基准一致

您可以修正 RHEL 系统,使其与特定基准一致。您可以修复系统,使其与 SCAP 安全指南提供的任何配置文件保持一致。有关列出可用配置文件的详情,请查看 查看配置合规的配置文件 部分。

警告

如果不小心使用,在启用了 Remediate 选项的情况下运行系统评估可能会导致系统无法正常工作。红帽不提供任何自动的方法来恢复由安全补救机制所做的更改。默认配置的 RHEL 系统支持自动安全补救功能。如果在安装后更改了您的系统,运行补救可能无法使其与所需安全配置兼容。

先决条件

  • scap-security-guide 软件包已安装。

流程

  1. 使用带有 --remediate 选项的 oscap 命令修复系统:

    # oscap xccdf eval --profile <profileID> --remediate /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
    Copy to Clipboard Toggle word wrap

    <profileID> 替换为系统应该遵守的配置文件的 ID,例如 hipaa

  2. 重启您的系统。

验证

  1. 使用配置文件评估系统的合规性,并将扫描结果保存到文件中:

    $ oscap xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
    Copy to Clipboard Toggle word wrap

    替换:

    • 使用 oscap 保存扫描结果的文件名 <scan-report.html>
    • 系统应该遵守的配置文件 ID <profileID>,例如 hipaa

您可以使用 SCAP 安全指南项目中的 Ansible Playbook 文件修复您的系统,使其与特定基准一致。您可以修复,使其与 SCAP 安全指南提供的任何配置集保持一致。

警告

如果不小心使用,在启用了 Remediate 选项的情况下运行系统评估可能会导致系统无法正常工作。红帽不提供任何自动的方法来恢复由安全补救机制所做的更改。默认配置的 RHEL 系统支持自动安全补救功能。如果在安装后更改了您的系统,运行补救可能无法使其与所需安全配置兼容。

先决条件

流程

  1. 使用 Ansible 修复您的系统,使其与所选配置文件一致:

    # ANSIBLE_COLLECTIONS_PATH=/usr/share/rhc-worker-playbook/ansible/collections/ansible_collections/ ansible-playbook -i "localhost," -c local /usr/share/scap-security-guide/ansible/rhel8-playbook-<profileID>.yml
    Copy to Clipboard Toggle word wrap

    ANSIBLE_COLLECTIONS_PATH 环境变量是运行命令才能运行 playbook 所必需的。

    <profileID > 替换为所选配置集的配置集 ID。

  2. 重新启动系统。

验证

  • 使用所选配置集评估系统的合规性,并将扫描结果保存到文件中:

    # oscap xccdf eval --profile <profileID> --report <scan-report.html> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
    Copy to Clipboard Toggle word wrap

    <scan-report.html> 替换为 oscap 保存扫描结果的文件名。

您可以创建一个 Ansible Playbook,它只包含使您的系统与特定基准保持一致所需的补救。此 playbook 更小,因为它没有涵盖已满足要求。创建 playbook 不会以任何方式修改您的系统,您只需为后续应用程序准备一个文件。

注意

在 RHEL 8.6 中,Ansible Engine 被 ansible-core 软件包替代,该软件包只包含内置模块。请注意,很多 Ansible 补救使用社区和可端口操作系统接口(POSIX)集合中的模块,它们没有包含在内置模块中。在这种情况下,您可以使用 Bash 补救来替代 Ansible 补救。RHEL 8.6 中的 Red Hat Connector 包括修复 playbook 与 Ansible Core 正常工作所需的 Ansible 模块。

先决条件

流程

  1. 扫描系统并保存结果:

    # oscap xccdf eval --profile <profileID> --results <profile-results.xml> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
    Copy to Clipboard Toggle word wrap
  2. 在带有结果的文件中找到结果 ID 的值:

    # oscap info <profile-results.xml>
    Copy to Clipboard Toggle word wrap
  3. 根据第 1 步中生成的文件生成 Ansible Playbook:

    # oscap xccdf generate fix --fix-type ansible --result-id xccdf_org.open-scap_testresult_xccdf_org.ssgproject.content_profile_<profileID> --output <profile-remediations.yml> <profile-results.xml>
    Copy to Clipboard Toggle word wrap
  4. 检查生成的 &lt ;profile-remediations.yml > 文件是否包含在第 1 步中执行的扫描中失败的规则的 Ansible 修复。
  5. 使用 Ansible 修复您的系统,使其与所选配置文件一致:

    # ANSIBLE_COLLECTIONS_PATH=/usr/share/rhc-worker-playbook/ansible/collections/ansible_collections/ ansible-playbook -i "localhost," -c local <profile-remediations.yml>`
    Copy to Clipboard Toggle word wrap

    ANSIBLE_COLLECTIONS_PATH 环境变量是运行命令才能运行 playbook 所必需的。

    警告

    如果不小心使用,在启用了 Remediate 选项的情况下运行系统评估可能会导致系统无法正常工作。红帽不提供任何自动的方法来恢复由安全补救补救所做的更改。默认配置的 RHEL 系统支持自动安全补救功能。如果在安装后更改了您的系统,运行修复可能无法使其遵守所需的安全配置文件。

验证

  • 使用所选配置集评估系统的合规性,并将扫描结果保存到文件中:

    # oscap xccdf eval --profile <profileID> --report <scan-report.html> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
    Copy to Clipboard Toggle word wrap

    <scan-report.html> 替换为 oscap 保存扫描结果的文件名。

18.8. 为后续应用程序创建补救 Bash 脚本

使用此流程创建一个 Bash 脚本,其中包含使您的系统与 HIPAA 等安全配置文件一致的补救。通过以下步骤,您不需要对系统进行任何修改,您只需为后续应用准备一个文件。

先决条件

  • scap-security-guide 软件包已安装在您的 RHEL 系统上。

流程

  1. 使用 oscap 命令扫描系统,并将结果保存到 XML 文件中。在以下示例中,oscap 会根据 hipaa 配置文件评估系统:

    # oscap xccdf eval --profile hipaa --results <hipaa-results.xml> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
    Copy to Clipboard Toggle word wrap
  2. 在带有结果的文件中找到结果 ID 的值:

    # oscap info <hipaa-results.xml>
    Copy to Clipboard Toggle word wrap
  3. 根据在第 1 步中生成的结果文件生成一个 Bash 脚本:

    # oscap xccdf generate fix --fix-type bash --result-id <xccdf_org.open-scap_testresult_xccdf_org.ssgproject.content_profile_hipaa> --output <hipaa-remediations.sh> <hipaa-results.xml>
    Copy to Clipboard Toggle word wrap
  4. <hipaa-remediations.sh> 文件包含在第 1 步中执行扫描的过程中失败的规则的补救。查看生成的文件后,当您位于与此文件相同的目录中时,您可以使用 ./<hipaa-remediations.sh> 命令应用该文件。

验证

  • 在您选择的文本编辑器中,检查 <hipaa-remediations.sh> 文件包含在第 1 步中执行的扫描中失败的规则。

scap-workbench软件包中包含的SCAP Workbench是一个图形化的实用程序,用户可以在单个本地或远程系统上进行配置和漏洞扫描,对系统进行修复,并根据扫描评估结果生成报告。请注意,与 oscap 命令行工具相比,SCAP Workbench 的功能有限。SCAP Workbench 处理数据流文件形式的安全内容。

18.9.1. 使用 SCAP Workbench 来扫描和修复系统

要根据所选的安全策略来评估您的系统,请使用以下流程。

先决条件

  • scap-workbench 软件包已经安装在您的系统中。

流程

  1. 要从 GNOME Classic 桌面环境运行 SCAP Workbench,请按 Super 键进入 Activities Overview,输入 scap-workbench,然后按 Enter。或者,使用:

    $ scap-workbench &
    Copy to Clipboard Toggle word wrap
  2. 使用以下其中一个选项来选择安全策略:

    • 开始窗口中的 Load Content 按钮
    • 打开 SCAP 安全指南中的内容
    • File 中打开 Other Content,搜索相关的 XCCDF、SCAP RPM 或数据流文件。

  3. 您可以选择 Remediate 复选框来允许自动修正系统配置。启用此选项后,SCAP Workbench 会尝试根据策略所应用的安全规则来修改系统配置。这个过程应该修复系统扫描过程中失败的相关检查。

    警告

    如果不小心使用,在启用了 Remediate 选项的情况下运行系统评估可能会导致系统无法正常工作。红帽不提供任何自动的方法来恢复由安全补救机制所做的更改。默认配置的 RHEL 系统支持自动安全补救功能。如果在安装后更改了您的系统,运行补救可能无法使其与所需安全配置兼容。

  4. 单击Scan按钮,使用所选配置文件扫描您的系统。

  5. 要以 XCCDF、ARF 或 HTML 文件的形式保存扫描结果,请点击 Save Results 组合框。选择 HTML Report 选项,以人类可读的格式生成扫描报告。XCCDF 和 ARF(数据流)格式适合进一步自动处理。您可以重复选择所有三个选项。
  6. 要将基于结果的补救导出到文件,请使用 Generate remediation role 弹出菜单。

18.9.2. 使用 SCAP Workbench 自定义安全配置文件

您可以通过更改某些规则中的参数(如最小密码长度)、删除以不同方式涵盖的规则,并选择额外的规则来自定义安全配置文件,以实现内部策略。您不能通过自定义配置文件来定义新规则。

以下流程演示了如何使用 SCAP Workbench 来自定义(定制)配置文件。您还可以保存定制的配置文件,以便在 oscap 命令行工具中使用。。

先决条件

  • scap-workbench 软件包已经安装在您的系统中。

流程

  1. 运行 SCAP Workbench,选择要自定义的配置文件,方法是使用 打开 SCAP 安全指南中的内容 或者在 File 菜单中 打开其他内容
  2. 要根据您的需要调整所选的安全配置文件,请点击 Customize 按钮。

    这会打开新的 Customization 窗口,允许您在不修改原始数据流文件的情况下修改当前选择的配置文件。选择新的配置文件 ID。

  3. 使用将规则组织成逻辑组的树结构或 Search 字段查找要修改的规则。
  4. 使用树结构中的复选框来包含或排除规则,或者在适用情况下修改规则中的值。

  5. 点击 OK 按钮以确认修改。
  6. 要永久存储您的修改,请使用以下选项之一:

    • 使用 File 菜单中的 Save Customization Only 分别保存自定义文件。
    • 通过在 File 菜单中的 Save All 来一次保存所有安全内容。

      如果您选择了 Into a directory 选项,SCAP Workbench 将数据流文件和自定义文件保存到指定的位置。您可以使用它作为备份解决方案。

      通过选择 As RPM 选项,您可以指示 SCAP Workbench 创建包含数据流文件和自定义文件的 RPM 软件包。这对于将安全内容分发到无法远程扫描的系统以及交付内容以供进一步处理非常有用。

注意

因为 SCAP Workbench 不支持对定制配置文件的基于结果的补救,所以请使用 oscap 命令行工具导出的补救。

18.10. 扫描容器和容器镜像以查找漏洞

使用这个流程查找容器或容器镜像中的安全漏洞。

注意

oscap-podman 命令从 RHEL 8.2 开始提供。对于RHEL 8.1和8.0,请参阅 Using OpenSCAP for scanning containers in RHEL 8

先决条件

  • openscap-utilsbzip2 软件包已安装。

流程

  1. 下载系统的最新 RHSA OVAL 定义:

    # wget -O - https://www.redhat.com/security/data/oval/v2/RHEL8/rhel-8.oval.xml.bz2 | bzip2 --decompress > rhel-8.oval.xml
    Copy to Clipboard Toggle word wrap
  2. 获取容器或容器镜像的 ID,例如:

    # podman images
    REPOSITORY                            TAG      IMAGE ID       CREATED       SIZE
    registry.access.redhat.com/ubi8/ubi   latest   096cae65a207   7 weeks ago   239 MB
    Copy to Clipboard Toggle word wrap
  3. 扫描容器或容器镜像的漏洞,并将结果保存到 vulnerability.html 文件中:

    # oscap-podman 096cae65a207 oval eval --report vulnerability.html rhel-8.oval.xml
    Copy to Clipboard Toggle word wrap

    请注意,oscap-podman 命令需要 root 特权,容器的 ID 是第一个参数。

验证

  • 在您选择的浏览器中检查结果,例如:

    $ firefox vulnerability.html &
    Copy to Clipboard Toggle word wrap

您可以评估您的容器或容器镜像是否符合特定的安全基线,如操作系统保护配置文件(OSPP)、支付卡行业数据安全标准(PCI-DSS)以及健康保险流通与责任法案(HIPAA)。

注意

oscap-podman 命令从 RHEL 8.2 开始提供。对于RHEL 8.1和8.0,请参阅 Using OpenSCAP for scanning containers in RHEL 8

先决条件

  • openscap-utilsscap-security-guide 软件包已安装。
  • 有对系统的 root 访问权限。

流程

  1. 查找容器或容器镜像的 ID:

    1. 要查找容器的 ID,请输入 podman ps -a 命令。
    2. 要查找容器镜像的 ID,请输入 podman images 命令。
  2. 评估容器或容器镜像是否符合配置文件,并将扫描结果保存到一个文件中:

    # oscap-podman <ID> xccdf eval --report <scan-report.html> --profile <profileID> /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
    Copy to Clipboard Toggle word wrap

    替换:

    • 使用容器或容器镜像的 ID 替换 <ID>
    • 使用 oscap 保存扫描结果的文件名替换 <scan-report.html>
    • 使用系统应该遵循的配置文件 ID 替换 <profileID>,例如 hipaaospppci-dss

验证

  • 在您选择的浏览器中检查结果,例如:

    $ firefox <scan-report.html> &
    Copy to Clipboard Toggle word wrap
注意

标记为 notapplicable 的规则仅适用于裸机和虚拟化系统,不适用于容器或容器镜像。

18.12. 使用 AIDE 检查完整性

高级入侵检测环境(AIDE)是一个在系统上创建文件数据库的工具,然后使用该数据库确保文件的完整性,并检测系统入侵。

18.12.1. 安装 AIDE

要使用 AIDE 启动文件完整性检查,您必须安装相应的软件包并启动 AIDE 数据库。

先决条件

  • AppStream存储库已启用。

流程

  1. 安装 aide 软件包:

    # yum install aide
    Copy to Clipboard Toggle word wrap
  2. 生成一个初始数据库:

    # aide --init
    Start timestamp: 2024-07-08 10:39:23 -0400 (AIDE 0.16)
    AIDE initialized database at /var/lib/aide/aide.db.new.gz
    
    Number of entries:	55856
    
    ---------------------------------------------------
    The attributes of the (uncompressed) database(s):
    ---------------------------------------------------
    
    /var/lib/aide/aide.db.new.gz
    …
      SHA512   : mZaWoGzL2m6ZcyyZ/AXTIowliEXWSZqx
                 IFYImY4f7id4u+Bq8WeuSE2jasZur/A4
                 FPBFaBkoCFHdoE/FW/V94Q==
    Copy to Clipboard Toggle word wrap
  3. 可选:在默认配置中,aide --init 命令只检查 /etc/aide.conf 文件中定义的一组目录和文件。要在 AIDE 数据库中包含其他目录或文件,并更改其监视的参数,请相应地编辑 /etc/aide.conf
  4. 要开始使用数据库,请从初始数据库文件名中删除 .new 子字符串:

    # mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
    Copy to Clipboard Toggle word wrap
  5. 可选:要更改 AIDE 数据库的位置,请编辑 /etc/aide.conf 文件,并修改 DBDIR 值。要获得额外的安全性,请将数据库、配置和 /usr/sbin/aide 二进制文件存储在安全的位置,如只读介质。

18.12.2. 使用 AIDE 执行完整性检查

您可以使用 crond 服务来调度使用 AIDE 的常规文件完整性检查。

先决条件

  • AIDE 已正确安装,其数据库已初始化。请参阅 安装 AIDE

流程

  1. 启动手动检查:

    # aide --check
    Start timestamp: 2024-07-08 10:43:46 -0400 (AIDE 0.16)
    AIDE found differences between database and filesystem!!
    
    Summary:
      Total number of entries:	55856
      Added entries:		0
      Removed entries:		0
      Changed entries:		1
    
    ---------------------------------------------------
    Changed entries:
    ---------------------------------------------------
    
    f   ...      ..S : /root/.viminfo
    
    ---------------------------------------------------
    Detailed information about changes:
    ---------------------------------------------------
    
    File: /root/.viminfo
      SELinux  : system_u:object_r:admin_home_t:s | unconfined_u:object_r:admin_home
                 0                                | _t:s0
    …
    Copy to Clipboard Toggle word wrap
  2. 至少,将系统配置为每周运行 AIDE。最好每天运行 AIDE。例如,要使用 cron 命令计划在每日 04:05 a.m. 执行 AIDE,请在 /etc/crontab 文件中添加以下行:

     05 4 * * * root /usr/sbin/aide --check
    Copy to Clipboard Toggle word wrap

18.12.3. 更新 AIDE 数据库

验证系统的更改后,如软件包更新或配置文件调整,也会更新您的基准 AIDE 数据库。

先决条件

  • AIDE 已正确安装,其数据库已初始化。请参阅 安装 AIDE

流程

  1. 更新您的基准 AIDE 数据库:

    # aide --update
    Copy to Clipboard Toggle word wrap

    aide --update 命令创建 /var/lib/aide/aide.db.new.gz 数据库文件。

  2. 若要开始使用更新的数据库进行完整性检查,请从文件名中删除 .new 子字符串。

18.12.4. 文件完整性工具:AIDE 和 IMA

Red Hat Enterprise Linux 提供多个用于检查和维护系统上文件和目录完整性的工具。下表可帮助您决定哪个工具更适合您的场景。

Expand
表 18.1. AIDE 和 IMA 之间的比较
问题高级入侵检测环境(AIDE)完整性测量架构 (IMA)

什么

AIDE 是一个在系统上创建文件和目录数据库的工具。此数据库用于检查文件完整性及检测入侵检测。

IMA 通过检查与之前存储的扩展属性相比的文件度量(哈希值)来检查文件是否被修改了。

如何

AIDE 使用规则来比较文件和目录的完整性状态。

IMA 使用文件哈希值来检测入侵。

为什么

检测 - AIDE 通过验证规则来检测文件是否被修改。

检测和防止 - IMA 通过替换文件的扩展属性来检测和防止攻击。

使用

当文件或目录被修改了,AIDE 会检测到威胁。

当有人试图更改整个文件时,IMA 会检测到威胁。

扩展

AIDE 检查本地系统上文件和目录的完整性。

IMA 确保本地和远程系统的安全性。

18.13. 使用 LUKS 加密块设备

通过使用磁盘加密,您可以通过对其进行加密来保护块设备上的数据。要访问设备的解密内容,请输入密码短语或密钥作为身份验证。这对移动计算机和可移动介质非常重要,因为它有助于保护设备的内容,即使它已从系统上物理移除。LUKS 格式是 Red Hat Enterprise Linux 中块设备加密的默认实现。

18.13.1. LUKS 磁盘加密

Linux Unified Key Setup-on-disk-format (LUKS)提供了一组简化管理加密设备的工具。使用 LUKS,您可以加密块设备,并使多个用户密钥解密主密钥。要批量加密分区,请使用这个主密钥。

Red Hat Enterprise Linux 使用 LUKS 执行块设备加密。默认情况下,在安装过程中不选中加密块设备的选项。如果您选择加密磁盘的选项,则系统会在每次引导计算机时提示您输入密码短语。这个密码短语解锁了解密分区的批量加密密钥。如果要修改默认分区表,您可以选择要加密的分区。这是在分区表设置中设定的。

Ciphers

LUKS 使用的默认密码是 aes-xts-plain64。LUKS 的默认密钥大小为 512 字节。Anaconda XTS 模式的 LUKS 的默认密钥大小为 512 位。以下是可用的密码:

  • 高级加密标准(AES)
  • Twofish
  • Serpent

LUKS 执行的操作

  • LUKS 对整个块设备进行加密,因此非常适合保护移动设备的内容,如可移动存储介质或笔记本电脑磁盘驱动器。
  • 加密块设备的底层内容是任意的,这有助于加密交换设备。对于将特殊格式化块设备用于数据存储的某些数据库,这也很有用。
  • LUKS 使用现有的设备映射器内核子系统。
  • LUKS 增强了密码短语,防止字典攻击。
  • LUKS 设备包含多个密钥插槽,这意味着您可以添加备份密钥或密码短语。
重要

在以下情况下不建议使用 LUKS:

  • 磁盘加密解决方案,如 LUKS,仅在您的系统关闭时保护数据。在系统启动并且 LUKS 解密磁盘后,该磁盘上的文件可供有权访问它们的用户使用。
  • 需要多个用户对同一设备具有不同的访问密钥的情况。LUKS1 格式提供八个密钥插槽,LUKS2 提供最多 32 个密钥插槽。
  • 需要文件级加密的应用程序。

18.13.2. RHEL 中的 LUKS 版本

在 Red Hat Enterprise Linux 中,LUKS 加密的默认格式为 LUKS2。旧的 LUKS1 格式仍被完全支持,它作为与早期 Red Hat Enterprise Linux 版本兼容的格式提供。与 LUKS1 重新加密相比,LUKS2 重新加密被视为更强大且更安全。

LUKS2 格式允许各种部分的未来更新,而无需修改二进制结构。它在内部对元数据使用 JSON 文本格式,提供元数据冗余,检测元数据损坏,并从元数据副本自动修复。

重要

不要在只支持 LUKS1 的系统中使用 LUKS2,因为 LUKS2 和 LUKS1 使用不同的命令来加密磁盘。对 LUKS 版本使用错误的命令可能会导致数据丢失。

Expand
表 18.2. 取决于 LUKS 版本的加密命令
LUKS 版本加密命令

LUKS2

cryptsetup reencrypt

LUKS1

cryptsetup-reencrypt

在线重新加密

LUKS2 格式支持在设备正在使用时重新加密加密设备。例如:您不必卸载该设备中的文件系统来执行以下任务:

  • 更改卷密钥
  • 更改加密算法

    加密未加密的设备时,您仍然必须卸载文件系统。您可以在简短初始化加密后重新挂载文件系统。

    LUKS1 格式不支持在线重新加密。

转换

在某些情况下,您可以将 LUKS1 转换为 LUKS2。在以下情况下无法进行转换:

  • LUKS1 设备被标记为被基于策略的解密(PBD) Clevis 解决方案使用。当检测到某些 luksmeta 元数据时,cryptsetup 工具不会转换设备。
  • 设备正在活跃。在任何转换前,设备必须处于不活跃状态。

18.13.3. LUKS2 重新加密过程中数据保护选项

LUKS2 提供了几个选项,在重新加密过程中优先选择性能或数据保护。它为 resilience 选项提供以下模式,您可以使用 cryptsetup reencrypt --resilience resilience-mode /dev/sdx 命令选择这些模式之一:

checksum

默认模式。它在数据保护和性能之间保持平衡。

这个模式将扇区的校验和存储在重新加密的区域,恢复过程可以检测 LUKS2 重新加密的扇区。模式要求块设备扇区写入具有“原子”性。

journal
最安全的模式,但也是最慢的模式。由于此模式在二进制区域中记录重新加密区域,因此 LUKS2 将数据写入两次。
none
none 模式优先选择性能,不提供数据保护。它只保护数据免受安全进程终止的影响,如 SIGTERM 信号或用户按了 Ctrl+C 键。任何意外的系统故障或应用程序失败都可能会导致数据损坏。

如果 LUKS2 重新加密进程意外被强行终止,LUKU2 可通过以下方法执行恢复:

自动

在下一个 LUKS2 设备打开操作过程中,执行以下操作之一会触发自动恢复操作:

  • 执行 cryptsetup open 命令。
  • 使用 systemd-cryptsetup 命令附加设备。
手动
通过在 LUKS2 设备上使用 cryptsetup repair /dev/sdx 命令。

18.13.4. 使用 LUKS2 加密块设备上的现有数据

您可以使用 LUKS2 格式在尚未加密的设备上加密现有数据。新的 LUKS 标头保存在设备的标头中。

先决条件

  • 块设备有一个文件系统。
  • 已备份了数据。

    警告

    由于硬件、内核或人为故障,您可能会在加密过程中丢失数据。在开始加密数据之前,请确保您有可靠的备份。

流程

  1. 卸载您要加密的设备上的所有文件系统,例如:

    # umount /dev/mapper/vg00-lv00
    Copy to Clipboard Toggle word wrap
  2. 为存储 LUKS 标头腾出空间。使用以下适合您场景的选项之一:

    • 如果是加密逻辑卷,您可以扩展逻辑卷而无需调整文件系统的大小。例如:

      # lvextend -L+32M /dev/mapper/vg00-lv00
      Copy to Clipboard Toggle word wrap
    • 使用分区管理工具(如 parted )扩展分区。
    • 缩小该设备的文件系统。您可以对 ext2、ext3 或 ext4 文件系统使用 resize2fs 工具。请注意,您无法缩小 XFS 文件系统。
  3. 初始化加密:

    # cryptsetup reencrypt --encrypt --init-only --reduce-device-size 32M /dev/mapper/vg00-lv00 lv00_encrypted
    
    /dev/mapper/lv00_encrypted is now active and ready for online encryption.
    Copy to Clipboard Toggle word wrap
  4. 挂载该设备:

    # mount /dev/mapper/lv00_encrypted /mnt/lv00_encrypted
    Copy to Clipboard Toggle word wrap
  5. /etc/crypttab 文件添加持久映射的一个条目:

    1. 查找 luksUUID

      # cryptsetup luksUUID /dev/mapper/vg00-lv00
      
      a52e2cc9-a5be-47b8-a95d-6bdf4f2d9325
      Copy to Clipboard Toggle word wrap
    2. 在您选择的文本编辑器中打开 /etc/crypttab,并在此文件中添加设备:

      $ vi /etc/crypttab
      
      lv00_encrypted UUID=a52e2cc9-a5be-47b8-a95d-6bdf4f2d9325 none
      Copy to Clipboard Toggle word wrap

      a52e2cc9-a5be-47b8-a95d-6bdf4f2d9325 替换为您设备的 luksUUID

    3. 使用 dracut 刷新 initramfs:

      $ dracut -f --regenerate-all
      Copy to Clipboard Toggle word wrap
  6. /etc/fstab 文件中添加一个永久挂载条目:

    1. 查找活跃 LUKS 块设备的文件系统 UUID:

      $ blkid -p /dev/mapper/lv00_encrypted
      
      /dev/mapper/lv00-encrypted: UUID="37bc2492-d8fa-4969-9d9b-bb64d3685aa9" BLOCK_SIZE="4096" TYPE="xfs" USAGE="filesystem"
      Copy to Clipboard Toggle word wrap
    2. 在您选择的文本编辑器中打开 /etc/fstab,并在此文件中添加设备,例如:

      $ vi /etc/fstab
      
      UUID=37bc2492-d8fa-4969-9d9b-bb64d3685aa9 /home auto rw,user,auto 0
      Copy to Clipboard Toggle word wrap

      37bc2492-d8fa-4969-9d9b-bb64d3685aa9 替换为您文件系统的 UUID。

  7. 恢复在线加密:

    # cryptsetup reencrypt --resume-only /dev/mapper/vg00-lv00
    
    Enter passphrase for /dev/mapper/vg00-lv00:
    Auto-detected active dm device 'lv00_encrypted' for data device /dev/mapper/vg00-lv00.
    Finished, time 00:31.130, 10272 MiB written, speed 330.0 MiB/s
    Copy to Clipboard Toggle word wrap

验证

  1. 验证现有数据是否已加密:

    # cryptsetup luksDump /dev/mapper/vg00-lv00
    
    LUKS header information
    Version: 2
    Epoch: 4
    Metadata area: 16384 [bytes]
    Keyslots area: 16744448 [bytes]
    UUID: a52e2cc9-a5be-47b8-a95d-6bdf4f2d9325
    Label: (no label)
    Subsystem: (no subsystem)
    Flags: (no flags)
    
    Data segments:
      0: crypt
    	offset: 33554432 [bytes]
    	length: (whole device)
    	cipher: aes-xts-plain64
    [...]
    Copy to Clipboard Toggle word wrap
  2. 查看加密的空白块设备的状态:

    # cryptsetup status lv00_encrypted
    
    /dev/mapper/lv00_encrypted is active and is in use.
      type:    LUKS2
      cipher:  aes-xts-plain64
      keysize: 512 bits
      key location: keyring
      device:  /dev/mapper/vg00-lv00
    Copy to Clipboard Toggle word wrap

您可以加密块设备上的现有数据,而无需为存储 LUKS 标头创建可用空间。标头存储在分离的位置,它也充当额外的安全层。该流程使用 LUKS2 加密格式。

先决条件

  • 块设备有一个文件系统。
  • 已备份了数据。

    警告

    由于硬件、内核或人为故障,您可能会在加密过程中丢失数据。在开始加密数据之前,请确保您有可靠的备份。

流程

  1. 卸载设备上的所有文件系统,例如:

    # umount /dev/nvme0n1p1
    Copy to Clipboard Toggle word wrap
  2. 初始化加密:

    # cryptsetup reencrypt --encrypt --init-only --header /home/header /dev/nvme0n1p1 nvme_encrypted
    
    WARNING!
    ========
    Header file does not exist, do you want to create it?
    
    Are you sure? (Type 'yes' in capital letters): YES
    Enter passphrase for /home/header:
    Verify passphrase:
    /dev/mapper/nvme_encrypted is now active and ready for online encryption.
    Copy to Clipboard Toggle word wrap

    /home/header 替换为带有分离的 LUKS 标头的文件的路径。分离的 LUKS 标头必须可以访问,以便稍后解锁加密设备。

  3. 挂载该设备:

    # mount /dev/mapper/nvme_encrypted /mnt/nvme_encrypted
    Copy to Clipboard Toggle word wrap
  4. 恢复在线加密:

    # cryptsetup reencrypt --resume-only --header /home/header /dev/nvme0n1p1
    
    Enter passphrase for /dev/nvme0n1p1:
    Auto-detected active dm device 'nvme_encrypted' for data device /dev/nvme0n1p1.
    Finished, time 00m51s,   10 GiB written, speed 198.2 MiB/s
    Copy to Clipboard Toggle word wrap

验证

  1. 验证使用带有分离标头的 LUKS2 块设备上的现有数据是否已加密:

    # cryptsetup luksDump /home/header
    
    LUKS header information
    Version:       	2
    Epoch:         	88
    Metadata area: 	16384 [bytes]
    Keyslots area: 	16744448 [bytes]
    UUID:          	c4f5d274-f4c0-41e3-ac36-22a917ab0386
    Label:         	(no label)
    Subsystem:     	(no subsystem)
    Flags:       	(no flags)
    
    Data segments:
      0: crypt
    	offset: 0 [bytes]
    	length: (whole device)
    	cipher: aes-xts-plain64
    	sector: 512 [bytes]
    [...]
    Copy to Clipboard Toggle word wrap
  2. 查看加密的空白块设备的状态:

    # cryptsetup status nvme_encrypted
    
    /dev/mapper/nvme_encrypted is active and is in use.
      type:    LUKS2
      cipher:  aes-xts-plain64
      keysize: 512 bits
      key location: keyring
      device:  /dev/nvme0n1p1
    Copy to Clipboard Toggle word wrap

18.13.6. 使用 LUKS2 加密空白块设备

您可以加密空白块设备,您可以使用 LUKS2 格式将其用于加密存储。

先决条件

  • 空白块设备。您可以使用 lsblk 等命令来查找该设备上是否没有实际的数据,例如,文件系统。

流程

  1. 将分区设置为加密的 LUKS 分区:

    # cryptsetup luksFormat /dev/nvme0n1p1
    
    WARNING!
    ========
    This will overwrite data on /dev/nvme0n1p1 irrevocably.
    Are you sure? (Type 'yes' in capital letters): YES
    Enter passphrase for /dev/nvme0n1p1:
    Verify passphrase:
    Copy to Clipboard Toggle word wrap
  2. 打开加密的 LUKS 分区:

    # cryptsetup open /dev/nvme0n1p1 nvme0n1p1_encrypted
    
    Enter passphrase for /dev/nvme0n1p1:
    Copy to Clipboard Toggle word wrap

    这会解锁分区,并使用设备映射器将其映射到新设备。要不覆盖加密的数据,这个命令会警告内核,该设备是一个加密设备,并使用 /dev/mapper/device_mapped_name 路径通过 LUKS 解决了。

  3. 创建一个文件系统来将加密的数据写入分区,该分区必须可通过设备映射名称访问:

    # mkfs -t ext4 /dev/mapper/nvme0n1p1_encrypted
    Copy to Clipboard Toggle word wrap
  4. 挂载该设备:

    # mount /dev/mapper/nvme0n1p1_encrypted mount-point
    Copy to Clipboard Toggle word wrap

验证

  1. 验证空白块设备是否已加密:

    # cryptsetup luksDump /dev/nvme0n1p1
    
    LUKS header information
    Version:       	2
    Epoch:         	3
    Metadata area: 	16384 [bytes]
    Keyslots area: 	16744448 [bytes]
    UUID:          	34ce4870-ffdf-467c-9a9e-345a53ed8a25
    Label:         	(no label)
    Subsystem:     	(no subsystem)
    Flags:       	(no flags)
    
    Data segments:
      0: crypt
    	offset: 16777216 [bytes]
    	length: (whole device)
    	cipher: aes-xts-plain64
    	sector: 512 [bytes]
    [...]
    Copy to Clipboard Toggle word wrap
  2. 查看加密的空白块设备的状态:

    # cryptsetup status nvme0n1p1_encrypted
    
    /dev/mapper/nvme0n1p1_encrypted is active and is in use.
      type:    LUKS2
      cipher:  aes-xts-plain64
      keysize: 512 bits
      key location: keyring
      device:  /dev/nvme0n1p1
      sector size:  512
      offset:  32768 sectors
      size:    20938752 sectors
      mode:    read/write
    Copy to Clipboard Toggle word wrap

18.13.7. 在 web 控制台中配置 LUKS 密码短语

如果要在系统中的现有逻辑卷中添加加密,则只能通过格式化卷进行。

先决条件

  • 已安装 RHEL 8 web 控制台。
  • 您已启用了 cockpit 服务。
  • 您的用户帐户被允许登录到 web 控制台。

    具体步骤请参阅安装并启用 Web 控制台

  • cockpit-storaged 软件包已安装在您的系统上。
  • 在没有加密的情况下可用的现有逻辑卷.

流程

  1. 登录到 RHEL 8 web 控制台。

    详情请参阅 Web 控制台的日志记录

  2. 在面板中,单击 Storage
  3. Storage 表中,点您要加密的存储设备的菜单按钮,然后单击 Format
  4. Encryption field 中,选择加密规格 LUKS1LUKS2
  5. 设置并确认您的新密码短语。
  6. 可选:修改其他加密选项。
  7. 完成格式化设置。
  8. Format

18.13.8. 在 web 控制台中更改 LUKS 密码短语

在 web 控制台中的加密磁盘或分区上更改 LUKS 密码短语。

先决条件

  • 已安装 RHEL 8 web 控制台。
  • 您已启用了 cockpit 服务。
  • 您的用户帐户被允许登录到 web 控制台。

    具体步骤请参阅安装并启用 Web 控制台

  • cockpit-storaged 软件包已安装在您的系统上。

流程

  1. 登录到 RHEL 8 web 控制台。

    详情请参阅 登录到 web 控制台

  2. 在面板中,单击 Storage
  3. Storage 表中,选择带有加密数据的磁盘。
  4. 在磁盘页面中,滚动到 Keys 部分,然后点 edit 按钮。
  5. 更改密码短语对话框中:

    1. 输入您当前的密码短语。
    2. 输入您的新密码短语。
    3. 确认您的新密码短语。
  6. 点击 Save

您可以通过运行 Ansible playbook,使用 storage 角色来创建和配置使用 LUKS 加密的卷。

先决条件

流程

  1. 将您的敏感变量存储在一个加密文件中:

    1. 创建 vault :

      $ ansible-vault create ~/vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
      Copy to Clipboard Toggle word wrap
    2. ansible-vault create 命令打开编辑器后,以 <key>: <value> 格式输入敏感数据:

      luks_password: <password>
      Copy to Clipboard Toggle word wrap
    3. 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
  2. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    ---
    - name: Manage local storage
      hosts: managed-node-01.example.com
      vars_files:
        - ~/vault.yml
      tasks:
        - name: Create and configure a volume encrypted with LUKS
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.storage
          vars:
            storage_volumes:
              - name: barefs
                type: disk
                disks:
                  - sdb
                fs_type: xfs
                fs_label: <label>
                mount_point: /mnt/data
                encryption: true
                encryption_password: "{{ luks_password }}"
    Copy to Clipboard Toggle word wrap

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

  3. 验证 playbook 语法:

    $ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    请注意,这个命令只验证语法,不会防止错误但有效的配置。

  4. 运行 playbook:

    $ ansible-playbook --ask-vault-pass ~/playbook.yml
    Copy to Clipboard Toggle word wrap

验证

  1. 查找 LUKS 加密卷的 luksUUID 值:

    # ansible managed-node-01.example.com -m command -a 'cryptsetup luksUUID /dev/sdb'
    
    4e4e7970-1822-470e-b55a-e91efe5d0f5c
    Copy to Clipboard Toggle word wrap
  2. 查看卷的加密状态:

    # ansible managed-node-01.example.com -m command -a 'cryptsetup status luks-4e4e7970-1822-470e-b55a-e91efe5d0f5c'
    
    /dev/mapper/luks-4e4e7970-1822-470e-b55a-e91efe5d0f5c is active and is in use.
      type:    LUKS2
      cipher:  aes-xts-plain64
      keysize: 512 bits
      key location: keyring
      device:  /dev/sdb
    ...
    Copy to Clipboard Toggle word wrap
  3. 验证创建的 LUKS 加密的卷:

    # ansible managed-node-01.example.com -m command -a 'cryptsetup luksDump /dev/sdb'
    
    LUKS header information
    Version:        2
    Epoch:          3
    Metadata area:  16384 [bytes]
    Keyslots area:  16744448 [bytes]
    UUID:           4e4e7970-1822-470e-b55a-e91efe5d0f5c
    Label:          (no label)
    Subsystem:      (no subsystem)
    Flags:          (no flags)
    
    Data segments:
      0: crypt
            offset: 16777216 [bytes]
            length: (whole device)
            cipher: aes-xts-plain64
            sector: 512 [bytes]
    ...
    Copy to Clipboard Toggle word wrap

基于策略的解密(PBD)是技术的一种集合,可在物理和虚拟上解锁加密的根和硬盘的辅助卷。PBD 使用各种解锁方法,如用户密码、受信任的平台模块(TPM)设备、连接到系统的 PKCS #11 设备,如智能卡或特殊的网络服务器。

PBD 允许将不同的解锁方法合并成一个策略,从而可以以不同的方式解锁同一个卷。RHEL 中 PBD 的当前实现由 Clevis 框架和称为 pins 的插件组成。每个 pin 都提供单独的解锁功能。目前,可提供以下 pins :

tang
允许使用网络服务器解锁卷。
tpm2
允许使用 TPM2 策略解锁卷。
sss
允许使用 Shamir 的 Secret 共享(SSS)加密方案部署高可用性系统。

18.14.1. 网络绑定磁盘加密

网络绑定加密 (NBDE) 是基于策略的解密 (PBD) 的子类别,允许将加密的卷绑定到特殊的网络服务器。NBDE 的当前实现包括 Tang 服务器的 Clevis pin 和 Tang 服务器本身。

在 RHEL 中,NBDE 通过以下组件和技术实现:

图 18.1. 使用 LUKS1 加密的卷时的 NBDE 方案。luksmeta 软件包不用于 LUKS2 卷。

Tang 是一个将数据绑定到网络状态的服务器。当系统绑定到某个安全网络时,它会使包含数据的系统变得可用。Tang 是无状态的,不需要 TLS 或身份验证。与基于 escrow 的解决方案不同,服务器存储所有加密密钥并了解以前使用的每个密钥,Tang 从不与任何客户端密钥进行交互,因此不会从客户端获得任何识别信息。

Clevis 是一个自动化解密的可插拔框架。在 NBDE 中,Clevis 提供 LUKS 卷的自动解锁。clevis 软件包提供了该功能的客户端。

Clevis pin 是 Clevis 框架的一个插件。其中一个 pins 是实现与 NBDE 服务器交互的插件 - Tang。

Clevis 和 Tang 是通用的客户端和服务器组件,提供网络绑定加密。在 RHEL 中,它们与 LUKS 一起使用,以加密和解密 root 和非 root 存储卷,以完成网络绑定磁盘加密。

客户端和服务器端组件都使用 José 库来执行加密和解密操作。

当您开始调配 NBDE 时,Tang 服务器的 Clevis pin 将获得 Tang 服务器发布的非对称密钥的列表。或者,由于密钥是非对称的,因此 Tang 的公钥列表可以分发到带外,以便客户端能够在不访问 Tang 服务器的情况下进行操作。此模式称为 脱机调配

Tang 的 Clevis pin 使用其中一个公钥来生成唯一的强加密的加密密钥。使用此密钥加密数据后,密钥将被丢弃。Clevis 客户端应将此调配操作生成的状态存储在方便的位置。这种加密数据的过程就是 调配步骤

LUKS 版本 2(LUKS2)是 RHEL 中的默认磁盘加密格式,因此 NBDE 的调配状态作为令牌存储在 LUKS2 标头中。luksmeta 软件包对 NBDE 的调配状态的利用仅用于使用 LUKS1 加密的卷。

Tang 的 Clevis pin 支持 LUKS1 和 LUKS2,不需要规范。Clevis 可以加密纯文本文件,但您必须使用 cryptsetup 工具加密块设备。如需更多信息,请参阅使用 LUKS 加密块设备

当客户端准备好访问其数据时,它会加载再调配步骤中生成的元数据,并响应恢复加密密钥。此过程是 恢复步骤

在 NBDE 中,Clevis 使用 pin 绑定 LUKS 卷,以便能自动解锁它。成功完成绑定流程后,可以使用提供的 Dracut 解锁程序解锁磁盘。

注意

如果将 kdump 内核崩溃转储机制设置为将系统内存的内容保存到 LUKS 加密的设备中,则会在第二次内核引导时提示您输入密码。

您可以使用 Tang 服务器在启用了 Clevis 的客户端上自动解锁 LUKS 加密的卷。在最简单的场景中,您可以通过安装 tang 软件包,并输入 systemctl enable tangd.socket --now 命令将 Tang 服务器部署在端口 80 上。以下示例流程演示了将运行在自定义端口上的 Tang 服务器部署为 SELinux enforcing 模式下受限制的服务。

先决条件

  • policycoreutils-python-utils 包及其依赖项已经安装。
  • firewalld 服务在运行。

流程

  1. 要安装 tang 软件包及其依赖项,请以 root 用户身份输入以下命令:

    # yum install tang
    Copy to Clipboard Toggle word wrap
  2. 选择一个未被占用的端口,例如 7500/tcp,并允许 tangd 服务绑定到该端口:

    # semanage port -a -t tangd_port_t -p tcp 7500
    Copy to Clipboard Toggle word wrap

    请注意,一个端口一次只能被一个服务使用,因此试图使用已占用的端口意味着 ValueError:端口已定义 错误消息。

  3. 在防火墙中打开端口:

    # firewall-cmd --add-port=7500/tcp
    # firewall-cmd --runtime-to-permanent
    Copy to Clipboard Toggle word wrap
  4. 启用 tangd 服务:

    # systemctl enable tangd.socket
    Copy to Clipboard Toggle word wrap
  5. 创建覆盖文件:

    # systemctl edit tangd.socket
    Copy to Clipboard Toggle word wrap
  6. 在以下编辑器屏幕中,其打开了位于 /etc/systemd/system/tangd.socket.d/ 目录中的一个空 override.conf 文件,通过添加以下行将 Tang 服务器的默认端口从 80 改为之前选择的端口号:

    [Socket]
    ListenStream=
    ListenStream=7500
    Copy to Clipboard Toggle word wrap
    重要

    在以 # Anything between here# Lines below this 开头的行之间插入之前的代码片段,否则系统会丢弃您的更改。

  7. 保存更改并退出编辑器。在默认 vi 编辑器中,您可以通过按 Esc 切换到命令模式,输入 :wq 并按 Enter 来实现。
  8. 重新载入更改的配置:

    # systemctl daemon-reload
    Copy to Clipboard Toggle word wrap
  9. 检查您的配置是否正常工作:

    # systemctl show tangd.socket -p Listen
    Listen=[::]:7500 (Stream)
    Copy to Clipboard Toggle word wrap
  10. 启动 tangd 服务:

    # systemctl restart tangd.socket
    Copy to Clipboard Toggle word wrap

    由于 tangd 使用了 systemd 套接字激活机制,因此服务器会在第一次连接进来时就立即启动。在第一次启动时会自动生成一组新的加密密钥。要执行手动生成密钥等加密操作,请使用 jose 工具。

验证

  • 在您的 NBDE 客户端上,使用以下命令验证您的 Tang 服务器是否正常工作。该命令必须返回您传递的与加密和解密相同的消息:

    # echo test | clevis encrypt tang '{"url":"<tang.server.example.com:7500>"}' -y | clevis decrypt
    test
    Copy to Clipboard Toggle word wrap

为安全起见,轮转 Tang 服务器密钥,并定期更新客户端上的现有绑定。轮转它们的确切间隔取决于您的应用程序、密钥大小以及机构策略。

或者,您可以使用 nbde_server RHEL 系统角色来轮转 Tang 密钥。如需更多信息,请参阅 使用 nbde_server 系统角色来设置多个 Tang 服务器

先决条件

  • Tang 服务器在运行。
  • clevisclevis-luks 软件包已安装在您的客户端上。
  • 请注意,RHEL 8.2 中已引入了clevis luks listclevis luks reportclevis luks regen

流程

  1. 重命名 /var/db/tang 密钥数据库目录中的所有密钥,使其前面有一个 .,将它们隐藏起来,以防被看到。请注意,以下示例中的文件名与 Tang 服务器的密钥数据库目录中的独特文件名不同:

    # cd /var/db/tang
    # ls -l
    -rw-r--r--. 1 root root 349 Feb  7 14:55 UV6dqXSwe1bRKG3KbJmdiR020hY.jwk
    -rw-r--r--. 1 root root 354 Feb  7 14:55 y9hxLTQSiSB5jSEGWnjhY8fDTJU.jwk
    # mv UV6dqXSwe1bRKG3KbJmdiR020hY.jwk .UV6dqXSwe1bRKG3KbJmdiR020hY.jwk
    # mv y9hxLTQSiSB5jSEGWnjhY8fDTJU.jwk .y9hxLTQSiSB5jSEGWnjhY8fDTJU.jwk
    Copy to Clipboard Toggle word wrap
  2. 检查是否重命名了,是否隐藏了 Tang 服务器中的所有密钥:

    # ls -l
    total 0
    Copy to Clipboard Toggle word wrap
  3. 使用 /usr/libexec/tangd-keygen 命令,在Tang 服务器上的 /var/db/tang 中生成新的密钥:

    # /usr/libexec/tangd-keygen /var/db/tang
    # ls /var/db/tang
    3ZWS6-cDrCG61UPJS2BMmPU4I54.jwk zyLuX6hijUy_PSeUEFDi7hi38.jwk
    Copy to Clipboard Toggle word wrap
  4. 检查您的 Tang 服务器是否可以显示新密钥对的签名密钥,例如:

    # tang-show-keys 7500
    3ZWS6-cDrCG61UPJS2BMmPU4I54
    Copy to Clipboard Toggle word wrap
  5. 在 NBDE 客户端上,使用 clevis luks report 命令检查 Tang 服务器显示的密钥是否保持不变。您可以使用 clevis luks list 命令识别带有相关绑定的插槽,例如:

    # clevis luks list -d /dev/sda2
    1: tang '{"url":"http://tang.srv"}'
    # clevis luks report -d /dev/sda2 -s 1
    ...
    Report detected that some keys were rotated.
    Do you want to regenerate luks metadata with "clevis luks regen -d /dev/sda2 -s 1"? [ynYN]
    Copy to Clipboard Toggle word wrap
  6. 要为新密钥重新生成 LUKS 元数据,在上一个命令提示时按 y,或使用 clevis luks regen 命令:

    # clevis luks regen -d /dev/sda2 -s 1
    Copy to Clipboard Toggle word wrap
  7. 当您确定所有旧客户端都使用新密钥时,您可以从 Tang 服务器中删除旧密钥,例如:

    # cd /var/db/tang
    # rm .*.jwk
    Copy to Clipboard Toggle word wrap
警告

在客户端仍在使用旧密钥时删除旧密钥可能会导致数据丢失。如果您意外删除了这些密钥,请在客户端上使用 clevis luks regen 命令,并手动提供您的 LUKS 密码。

您可以使用 Tang 服务器提供的密钥配置 LUKS 加密存储设备的自动解锁。

先决条件

  • 已安装 RHEL 8 web 控制台。
  • 您已启用了 cockpit 服务。
  • 您的用户帐户被允许登录到 web 控制台。

    具体步骤请参阅安装并启用 Web 控制台

  • cockpit-storagedclevis-luks 软件包已安装在您的系统上。
  • cockpit.socket服务运行在9090端口。
  • Tang 服务器可用。详情请参阅 部署 SELinux 处于 enforcing 模式的 Tang 服务器
  • 您有 root 权限或使用 sudo 输入管理命令的权限。

流程

  1. 登录到 RHEL 8 web 控制台。

    详情请参阅 登录到 web 控制台

  2. 切换到管理访问权限,提供您的凭据,然后单击 Storage。在 Storage 表中,点包含您计划添加的加密卷的磁盘,来自动解锁。
  3. 在以下带有所选磁盘详情的页面中,点 Keys 部分中的 + 来添加 Tang 密钥:

  4. 选择 Tang keyserver 作为 Key source,提供 Tang 服务器的地址,以及解锁 LUKS 加密设备的密码。点击 Add 确认:

    以下对话框窗口提供了一个命令来验证密钥哈希是否匹配。

  5. 在 Tang 服务器上的终端中,使用 tang-show-keys 命令来显示密钥哈希以进行比较。在本例中,Tang 服务器运行在端口 7500 上:

    # tang-show-keys 7500
    x100_1k6GPiDOaMlL3WbpCjHOy9ul1bSfdhI3M08wO0
    Copy to Clipboard Toggle word wrap
  6. 当 web 控制台中的密钥哈希与之前列出的命令的输出中的密钥哈希相同时,请点击 Trust key

  7. 在 RHEL 8.8 及更高版本中,选择加密的根文件系统和 Tang 服务器后,您可以跳过在内核命令行中添加 rd.neednet=1 参数,安装 clevis-dracut 软件包,以及重新生成一个初始 RAM 磁盘(initrd)。对于非 root 文件系统,web 控制台现在启用 remote-cryptsetup.targetclevis-luks-akspass.path systemd 单元,安装 clevis-systemd 软件包,并将 _netdev 参数添加到 fstabcrypttab 配置文件中。

验证

  1. 检查新添加的 Tang 密钥现在是否在 Keys 部分中列出,且类型为 Keyserver

  2. 验证绑定是否在早期引导时可用,例如:

    # lsinitrd | grep clevis-luks
    lrwxrwxrwx   1 root     root           48 Jan  4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path
    …
    Copy to Clipboard Toggle word wrap

18.14.5. 基本 NBDE 和 TPM2 加密客户端操作

Clevis 框架可以加密纯文本文件,并使用 JSON Web 加密(JWE)格式和 LUKS 加密块设备解密这两个密码文本。Clevis 客户端可以使用 Tang 网络服务器或受信任的平台模块 2.0(TPM 2.0)芯片进行加密操作。

以下命令在包含纯文本文件的示例上演示 Clevis 提供的基本功能。您还可以使用它们来对 NBDE 或 Clevis+TPM 部署进行故障排除。

绑定到 Tang 服务器的加密客户端

  • 要检查 Clevis 加密客户端是否绑定到 Tang 服务器,请使用 clevis encrypt tang 子命令:

    $ clevis encrypt tang '{"url":"http://tang.srv:port"}' < input-plain.txt > secret.jwe
    The advertisement contains the following signing keys:
    
    _OsIk0T-E2l6qjfdDiwVmidoZjA
    
    Do you wish to trust these keys? [ynYN] y
    Copy to Clipboard Toggle word wrap

    更改上例中的 http://tang.srv:port URL,使其与安装了 tang 的服务器的 URL 匹配。secret.jwe 输出文件包含您的加密密码文本,格式为 JWE。这个密码文本是从 input-plain.txt 输入文件中读取的。

    另外,如果您的配置需要与 Tang 服务器进行非互动通信而无需 SSH 访问,您可以下载公告并将其保存到文件中:

    $ curl -sfg http://tang.srv:port/adv -o adv.jws
    Copy to Clipboard Toggle word wrap

    adv.jws 文件中的公告用于任何以下任务,如文件或消息的加密:

    $ echo 'hello' | clevis encrypt tang '{"url":"http://tang.srv:port","adv":"adv.jws"}'
    Copy to Clipboard Toggle word wrap
  • 要解密数据,请使用 clevis decrypt 命令,并提供密码文本(JWE):

    $ clevis decrypt < secret.jwe > output-plain.txt
    Copy to Clipboard Toggle word wrap

使用 TPM 2.0 加密客户端

  • 要使用 TPM 2.0 芯片加密,请使用 clevis encrypt tpm2 子命令以及 JSON 配置对象的唯一参数:

    $ clevis encrypt tpm2 '{}' < input-plain.txt > secret.jwe
    Copy to Clipboard Toggle word wrap

    要选择不同的层次结构、哈希和密钥算法,请指定配置属性,例如:

    $ clevis encrypt tpm2 '{"hash":"sha256","key":"rsa"}' < input-plain.txt > secret.jwe
    Copy to Clipboard Toggle word wrap
  • 要解密数据,请提供 JSON Web 加密(JWE)格式的密码文本:

    $ clevis decrypt < secret.jwe > output-plain.txt
    Copy to Clipboard Toggle word wrap

pin 还支持将数据封装到平台配置寄存器(PCR)状态。这样,只有 PCR 哈希值与密封时使用的策略匹配,数据才能被取消密封。

例如,对于 SHA-256 块要将数据密封到索引为 0 和 7 的 PCR:

$ clevis encrypt tpm2 '{"pcr_bank":"sha256","pcr_ids":"0,7"}' < input-plain.txt > secret.jwe
Copy to Clipboard Toggle word wrap
警告

可以重写 PCR 中的哈希值,您无法再解锁加密的卷。因此,添加了一个强大的密码短语,以便您手动解锁加密的卷,即使 PCR 中的值有变化也是如此。

如果在升级 shim-x64 软件包后系统无法自动解锁加密的卷,请参阅红帽知识库解决方案 Clevis TPM2 不再重启后解密 LUKS 设备

使用 Clevis 框架,您可以在所选的 Tang 服务器可用时配置客户端来自动解锁 LUKS 加密卷。这创建一个 NBDE (网络绑定磁盘加密)部署。

先决条件

  • Tang 服务器正在运行且可用。

流程

  1. 要自动解锁现有的 LUKS 加密卷,请安装 clevis-luks 子软件包:

    # yum install clevis-luks
    Copy to Clipboard Toggle word wrap
  2. 识别 PBD 的 LUKS 加密卷。在以下示例中,块设备是指 /dev/sda2

    # lsblk
    NAME                                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    sda                                             8:0    0    12G  0 disk
    ├─sda1                                          8:1    0     1G  0 part  /boot
    └─sda2                                          8:2    0    11G  0 part
      └─luks-40e20552-2ade-4954-9d56-565aa7994fb6 253:0    0    11G  0 crypt
        ├─rhel-root                               253:0    0   9.8G  0 lvm   /
        └─rhel-swap                               253:1    0   1.2G  0 lvm   [SWAP]
    Copy to Clipboard Toggle word wrap
  3. 使用 clevis luks bind 命令将卷绑定到 Tang 服务器:

    # clevis luks bind -d /dev/sda2 tang '{"url":"http://tang.srv"}'
    The advertisement contains the following signing keys:
    
    _OsIk0T-E2l6qjfdDiwVmidoZjA
    
    Do you wish to trust these keys? [ynYN] y
    You are about to initialize a LUKS device for metadata storage.
    Attempting to initialize it may result in data loss if data was
    already written into the LUKS header gap in a different format.
    A backup is advised before initialization is performed.
    
    Do you wish to initialize /dev/sda2? [yn] y
    Enter existing LUKS password:
    Copy to Clipboard Toggle word wrap

    此命令执行四个步骤:

    1. 使用与 LUKS 主密钥相同的无序状态测量法创建新的密钥。
    2. 使用 Clevis 加密新密钥.
    3. 将 Clevis JWE 对象存储在 LUKS2 标头令牌中,或者使用 LUKSMeta(如果使用非默认的 LUKS1 标头)。
    4. 启用与 LUKS 一起使用的新密钥。
    注意

    绑定过程假定至少有一个可用的 LUKS 密码插槽。clevis luks bind 命令占用了其中一个插槽。

    现在可以使用您的现有密码和 Clevis 策略来解锁卷。

  4. 要使早期的引导系统处理磁盘绑定,请在已安装的系统上使用 dracut 工具。在 RHEL 中,Clevis 生成一个没有特定于主机配置选项的通用 initrd(初始 RAM 磁盘),没有向内核命令行自动添加 rd.neednet=1 等参数。如果您的配置依赖于在早期引导期间需要网络的 Tang pin ,请在检测到 Tang 绑定时使用 --hostonly-cmdline 参数和 dracut add rd.neednet=1

    1. 安装 clevis-dracut 软件包:

      # yum install clevis-dracut
      Copy to Clipboard Toggle word wrap
    2. 重新生成初始 RAM 磁盘:

      # dracut -fv --regenerate-all --hostonly-cmdline
      Copy to Clipboard Toggle word wrap
    3. 或者,在 /etc/dracut.conf.d/ 目录中创建一个 .conf 文件,并将 hostonly_cmdline=yes 选项添加到该文件中。然后,您可以使用没有 -hostonly-cmdlinedracut,例如:

      # echo "hostonly_cmdline=yes" > /etc/dracut.conf.d/clevis.conf
      # dracut -fv --regenerate-all
      Copy to Clipboard Toggle word wrap
    4. 您还可以通过使用安装了 Clevis 的系统上的 grubby 工具,确保在早期引导时 Tang pin 的网络可用:

      # grubby --update-kernel=ALL --args="rd.neednet=1"
      Copy to Clipboard Toggle word wrap

验证

  1. 验证 Clevis JWE 对象是否已成功放在 LUKS 标头中,使用 clevis luks list 命令:

    # clevis luks list -d /dev/sda2
    1: tang '{"url":"http://tang.srv:port"}'
    Copy to Clipboard Toggle word wrap
  2. 检查绑定是否对早期引导可用,例如:

    # lsinitrd | grep clevis-luks
    lrwxrwxrwx   1 root     root           48 Jan  4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path
    …
    Copy to Clipboard Toggle word wrap

18.14.7. 配置具有静态 IP 配置的 NBDE 客户端

要将 NBDE 用于具有静态 IP 配置(没有 DHCP)的客户端,您必须手动将网络配置传递给 dracut 工具。

先决条件

步骤

  1. 您可以将静态网络配置提供为 dracut 命令中 kernel-cmdline 选项的值,例如:

    # dracut -fv --regenerate-all --kernel-cmdline "ip=192.0.2.10::192.0.2.1:255.255.255.0::ens3:none nameserver=192.0.2.100"
    Copy to Clipboard Toggle word wrap
  2. 或者,在 /etc/dracut.conf.d/ 目录中创建一个带有静态网络信息的 .conf 文件,然后重新生成初始 RAM 磁盘镜像:

    # cat /etc/dracut.conf.d/static_ip.conf
    kernel_cmdline="ip=192.0.2.10::192.0.2.1:255.255.255.0::ens3:none nameserver=192.0.2.100"
    # dracut -fv --regenerate-all
    Copy to Clipboard Toggle word wrap

您可以使用受信任的平台模块 2.0 (TPM 2.0)策略配置 LUKS 加密卷的解锁。

先决条件

  • 一个可访问的 TPM 2.0 兼容设备。
  • 具有 64 位 Intel 或 64 位 AMD 架构的系统。

步骤

  1. 要自动解锁现有的 LUKS 加密卷,请安装 clevis-luks 子软件包:

    # yum install clevis-luks
    Copy to Clipboard Toggle word wrap
  2. 识别 PBD 的 LUKS 加密卷。在以下示例中,块设备是指 /dev/sda2

    # lsblk
    NAME                                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    sda                                             8:0    0    12G  0 disk
    ├─sda1                                          8:1    0     1G  0 part  /boot
    └─sda2                                          8:2    0    11G  0 part
      └─luks-40e20552-2ade-4954-9d56-565aa7994fb6 253:0    0    11G  0 crypt
        ├─rhel-root                               253:0    0   9.8G  0 lvm   /
        └─rhel-swap                               253:1    0   1.2G  0 lvm   [SWAP]
    Copy to Clipboard Toggle word wrap
  3. 使用 clevis luks bind 命令将卷绑定到 TPM 2.0 设备,例如:

    # clevis luks bind -d /dev/sda2 tpm2 '{"hash":"sha256","key":"rsa"}'
    ...
    Do you wish to initialize /dev/sda2? [yn] y
    Enter existing LUKS password:
    Copy to Clipboard Toggle word wrap

    此命令执行四个步骤:

    1. 使用与 LUKS 主密钥相同的无序状态测量法创建新的密钥。
    2. 使用 Clevis 加密新密钥.
    3. 将 Clevis JWE 对象存储在 LUKS2 标头令牌中,或者使用 LUKSMeta(如果使用非默认的 LUKS1 标头)。
    4. 启用与 LUKS 一起使用的新密钥。

      注意

      绑定过程假定至少有一个可用的 LUKS 密码插槽。clevis luks bind 命令占用了其中一个插槽。

      或者,如果您要将数据封装为特定的平台配置寄存器(PCR)状态,请在 clevis luks bind 命令中添加 pcr_bankpcr_ids 值,例如:

      # clevis luks bind -d /dev/sda2 tpm2 '{"hash":"sha256","key":"rsa","pcr_bank":"sha256","pcr_ids":"0,1"}'
      Copy to Clipboard Toggle word wrap
      重要

      由于只有 PCR 哈希值与密封时使用的策略匹配,并且可以重写哈希时,数据才会被解封,因此添加一个强大的密码短语,以便您可以在 PCR 中的值变化时手动解锁加密的卷。

      如果在升级 shim-x64 软件包后系统无法自动解锁加密的卷,请参阅红帽知识库解决方案 Clevis TPM2 不再在重启后解密 LUKS 设备

  4. 现在可以使用您的现有密码和 Clevis 策略来解锁卷。
  5. 要启用早期引导系统来处理磁盘绑定,请在已安装的系统上使用 dracut 工具:

    # yum install clevis-dracut
    # dracut -fv --regenerate-all
    Copy to Clipboard Toggle word wrap

验证

  1. 要验证 Clevis JWE 对象是否已成功放入 LUKS 标头中,请使用 clevis luks list 命令:

    # clevis luks list -d /dev/sda2
    1: tpm2 '{"hash":"sha256","key":"rsa"}'
    Copy to Clipboard Toggle word wrap

18.14.9. 手动从 LUKS 加密卷中删除 Clevis pin

使用以下步骤手动删除 clevis luks bind 命令创建的元数据,以及擦除包含 Clevis 添加的密码短语的密钥插槽。

重要

从 LUKS 加密卷中删除 Clevis pin 的建议方法是通过 clevis luks unbind 命令。使用 clevis luks unbind 的删除过程只包含一个步骤,适用于 LUKS1 和 LUKS2 卷。以下示例命令删除绑定步骤创建的元数据,并擦除了 /dev/sda2 设备上的密钥插槽 1

# clevis luks unbind -d /dev/sda2 -s 1
Copy to Clipboard Toggle word wrap

先决条件

  • 具有 Clevis 绑定的 LUKS 加密卷。

步骤

  1. 检查卷(如 /dev/sda2) 是使用哪个 LUKS 版本加密的,并标识绑定到 Clevis 的插槽和令牌:

    # cryptsetup luksDump /dev/sda2
    LUKS header information
    Version:        2
    ...
    Keyslots:
      0: luks2
    ...
    1: luks2
          Key:        512 bits
          Priority:   normal
          Cipher:     aes-xts-plain64
    ...
          Tokens:
            0: clevis
                  Keyslot:  1
    ...
    Copy to Clipboard Toggle word wrap

    在上例中,Clevis 令牌标识为 0 ,关联的密钥插槽是 1

  2. 如果是 LUKS2 加密,请删除令牌:

    # cryptsetup token remove --token-id 0 /dev/sda2
    Copy to Clipboard Toggle word wrap
  3. 如果您的设备由 LUKS1 加密,由 Version 表示:1 string 在 cryptsetup luksDump 命令的输出中,使用 luksmeta flush 命令执行这个额外步骤:

    # luksmeta wipe -d /dev/sda2 -s 1
    Copy to Clipboard Toggle word wrap
  4. 擦除包含 Clevis 密码短语的密钥插槽:

    # cryptsetup luksKillSlot /dev/sda2 1
    Copy to Clipboard Toggle word wrap

按照此流程中的步骤配置使用 Clevis 注册 LUKS 加密卷的自动安装过程。

步骤

  1. 指示 Kickstart 对磁盘进行分区,以便使用临时密码为所有挂载点(除 /boot )启用了 LUKS 加密。注册过程的这一步中的密码是临时密码。

    part /boot --fstype="xfs" --ondisk=vda --size=256
    part / --fstype="xfs" --ondisk=vda --grow --encrypted --passphrase=temppass
    Copy to Clipboard Toggle word wrap

    请注意,兼容 OSPP 的系统需要更复杂的配置,例如:

    part /boot --fstype="xfs" --ondisk=vda --size=256
    part / --fstype="xfs" --ondisk=vda --size=2048 --encrypted --passphrase=temppass
    part /var --fstype="xfs" --ondisk=vda --size=1024 --encrypted --passphrase=temppass
    part /tmp --fstype="xfs" --ondisk=vda --size=1024 --encrypted --passphrase=temppass
    part /home --fstype="xfs" --ondisk=vda --size=2048 --grow --encrypted --passphrase=temppass
    part /var/log --fstype="xfs" --ondisk=vda --size=1024 --encrypted --passphrase=temppass
    part /var/log/audit --fstype="xfs" --ondisk=vda --size=1024 --encrypted --passphrase=temppass
    Copy to Clipboard Toggle word wrap
  2. 通过在 %packages 部分中列出它们来安装相关的 Clevis 软件包:

    %packages
    clevis-dracut
    clevis-luks
    clevis-systemd
    %end
    Copy to Clipboard Toggle word wrap
  3. 可选:为确保您可以在需要时手动解锁加密的卷,请在删除临时密码短语前添加强大的密码短语。如需更多信息,请参阅红帽知识库解决方案 如何将密码短语、密钥或密钥文件添加到现有 LUKS 设备
  4. %post 部分中调用 clevis luks bind 来执行绑定。之后,删除临时密码:

    %post
    clevis luks bind -y -k - -d /dev/vda2 \
    tang '{"url":"http://tang.srv"}' <<< "temppass"
    cryptsetup luksRemoveKey /dev/vda2 <<< "temppass"
    dracut -fv --regenerate-all
    %end
    Copy to Clipboard Toggle word wrap

    如果您的配置依赖于在早期引导过程中需要网络的 Tang pin,或者使用带有静态 IP 配置的 NBDE 客户端,那么您必须修改dracut 命令,如 配置 LUKS 加密卷的手动注册 中所述。

    请注意,RHEL 8.3 提供了 clevis luks bind 命令的 -y 选项。在 RHEL 8.2 及更旧版本中,在 clevis luks bind 命令中将 -y 替换为 -f,并从 Tang 服务器下载公告:

    %post
    curl -sfg http://tang.srv/adv -o adv.jws
    clevis luks bind -f -k - -d /dev/vda2 \
    tang '{"url":"http://tang.srv","adv":"adv.jws"}' <<< "temppass"
    cryptsetup luksRemoveKey /dev/vda2 <<< "temppass"
    dracut -fv --regenerate-all
    %end
    Copy to Clipboard Toggle word wrap
    警告

    cryptsetup luksRemoveKey 命令可以防止对应用该命令的 LUKS2 设备进行任何进一步的管理。您只能对 LUKS1 设备使用 dmsetup 命令恢复删除的主密钥。

在使用 TPM 2.0 策略而不是 Tang 服务器时,您可以使用类似的流程。

您可以设置 LUKS 加密的 USB 存储设备的自动解锁过程。

步骤

  1. 要自动解锁 LUKS 加密的可移动存储设备,如 USB 驱动器,请安装 clevis-udisks2 软件包:

    # yum install clevis-udisks2
    Copy to Clipboard Toggle word wrap
  2. 重启系统,然后使用 clevis luks bind 命令执行绑定步骤,如 配置 LUKS 加密卷的手动注册 中所述,例如:

    # clevis luks bind -d /dev/sdb1 tang '{"url":"http://tang.srv"}'
    Copy to Clipboard Toggle word wrap
  3. 现在,可以在 GNOME 桌面会话中自动解锁 LUKS 加密的可移动设备。绑定到 Clevis 策略的设备也可以通过 clevis luks unlock 命令解锁:

    # clevis luks unlock -d /dev/sdb1
    Copy to Clipboard Toggle word wrap

在使用 TPM 2.0 策略而不是 Tang 服务器时,您可以使用类似的流程。

18.14.12. 部署高可用性 NBDE 系统

Tang 提供两种构建高可用性部署的方法:

客户端冗余(推荐)
客户端应配置成能够绑定到多个 Tang 服务器。在此设置中,每个 Tang 服务器都有自己的密钥,客户端可以通过联系这些服务器的子集来进行解密。Clevis 已通过其 sss 插件支持此工作流。红帽建议对高可用性部署使用这个方法。
密钥共享
出于冗余的目的,可以部署多个 Tang 实例。要设置第二个或后续的实例,请安装 tang 软件包,并使用 rsync ,通过 SSH 将密钥目录复制到新主机上。请注意,红帽不推荐此方法,因为共享密钥会增加密钥的风险,需要额外的自动化基础设施。
使用 Shamir 的 Secret 共享的高可用性 NBDE

Shamir 的 Secret 共享(SSS)是一种加密方案,可将Secret 分成多个独特的部分。要重建 secret,需要几个部分。数字称为阈值,SSS 也被称为阈值方案。

Clevis 提供 SSS 的实施。它创建一个密钥,并将其分为若干个片。每片都使用另一个 pin 进行加密,甚至包括递归 SSS。另外,您可以定义阈值 t。如果 NBDE 部署至少解密了 t 片,那么它将恢复加密密钥,并且解密过程会成功。当 Clevis 检测到比阈值中指定的部分少时,它会打印错误消息。

示例 1:带有两个 Tang 服务器的冗余

当两个 Tang 服务器中至少有一个可用时,以下命令会解密 LUKS 加密设备:

# clevis luks bind -d /dev/sda1 sss '{"t":1,"pins":{"tang":[{"url":"http://tang1.srv"},{"url":"http://tang2.srv"}]}}'
Copy to Clipboard Toggle word wrap

上一命令使用以下配置方案:

{
    "t":1,
    "pins":{
        "tang":[
            {
                "url":"http://tang1.srv"
            },
            {
                "url":"http://tang2.srv"
            }
        ]
    }
}
Copy to Clipboard Toggle word wrap

在此配置中,SSS 阈值 t 设置为 1,如果列出的两个 tang 服务器中至少有一台可用,则 clevis luks bind 命令可以成功重建 secret。

示例 2:Tang 服务器和 TPM 设备中的共享 secret

tang 服务器和 tpm2 设备都可用时,以下命令可成功解密 LUKS 加密设备:

# clevis luks bind -d /dev/sda1 sss '{"t":2,"pins":{"tang":[{"url":"http://tang1.srv"}], "tpm2": {"pcr_ids":"0,7"}}}'
Copy to Clipboard Toggle word wrap

现在 SSS 阀值 't' 设置为 '2' 的配置方案是:

{
    "t":2,
    "pins":{
        "tang":[
            {
                "url":"http://tang1.srv"
            }
        ],
        "tpm2":{
            "pcr_ids":"0,7"
        }
    }
}
Copy to Clipboard Toggle word wrap

18.14.13. NBDE 网络中虚拟机的部署

clevis luks bind 命令不会改变 LUKS 主密钥。这意味着,如果您创建了一个在虚拟机或云环境中使用的 LUKS 加密镜像,则所有运行此镜像的实例都会共享一个主密钥。这极其不安全,应始终避免。

这不是 Clevis 的一个限制,而是 LUKS 的设计原则。如果您的场景需要在云中有加密的根卷,请对云中的每个 Red Hat Enterprise Linux 实例执行安装过程(通常使用 Kickstart)。如果没有共享 LUKS 主密钥,就无法共享镜像。

要在虚拟环境中部署自动解锁,请将诸如 loraxvirt-install 的系统与 Kickstart 文件一起使用(请参阅 使用 Kickstart 配置 LUKS 加密卷的自动注册)或其它自动配置工具来确保每个加密的虚拟机都有一个唯一的主密钥。

在云环境中部署可自动注册的加密镜像会带来一系列独特的挑战。与其他虚拟化环境一样,建议减少从一个镜像启动的实例数量,以避免共享 LUKS 主密钥。

因此,最佳实践是创建自定义映像,这些映像不在任何公共存储库中共享,为部署有限数量的实例提供了基础。要创建的实例的确切数量应当由部署的安全策略定义,并且基于与 LUKS 主密钥攻击向量相关联的风险容忍度。

要构建启用 LUKS 的自动化部署,应当使用 Lorax 或 virt-install 等系统以及一个 Kickstart 文件,来确保镜像构建过程中主密钥的唯一性。

云环境支持我们在这里考虑的两种 Tang 服务器部署选项。首先,Tang 服务器可以在云环境本身中部署。其次,Tang 服务器可以部署在云外的独立的基础架构上,并且这两个基础架构之间有 VPN 连接。

在云中原生部署 Tang 可以轻松部署。但是,考虑到它与其他系统的密文数据持久性层共享基础设施,因此 Tang 服务器的私钥和 Clevis 元数据可以存储在同一个物理磁盘上。对这个物理磁盘的访问允许密文数据的完全泄露。

重要

始终在存储数据的地方和运行 Tang 的系统之间保持物理隔离。在云和 Tang 服务器之间的这种隔离可确保 Tang 服务器的私钥不会被意外与 Clevis 元数据组合。如果云基础设施面临风险,它还提供了对 Tang 服务器的本地控制。

18.14.15. 将 Tang 部署为容器

tang 容器镜像为在 OpenShift Container Platform(OCP)集群中或独立虚拟机运行的 Clevis 客户端提供 Tang-server 解密功能。

先决条件

  • podman 软件包及其依赖项已安装在系统上。
  • 你可以使用 podman login registry.redhat.io 命令登录到 registry.redhat.io 容器目录。如需更多信息,请参阅 红帽容器注册表身份验证
  • Clevis 客户端安装在包含 LUKS 加密卷的系统上,您希望使用 Tang 服务器自动解锁这些卷。

流程

  1. registry.redhat.io registry 中拉取 tang 容器镜像:

    # podman pull registry.redhat.io/rhel8/tang
    Copy to Clipboard Toggle word wrap
  2. 运行容器,指定其端口,并指定到 Tang 密钥的路径。前面的示例运行 tang 容器,指定端口 7500,并指示到 /var/db/tang 目录的 Tang 密钥的路径:

    # podman run -d -p 7500:7500 -v tang-keys:/var/db/tang --name tang registry.redhat.io/rhel8/tang
    Copy to Clipboard Toggle word wrap

    请注意,Tang 默认使用端口 80,但这可能与其他服务冲突,如 Apache HTTP 服务器。

  3. 可选:为提高安全性,请定期轮转 Tang 密钥。您可以使用 tangd-rotate-keys 脚本,例如:

    # podman run --rm -v tang-keys:/var/db/tang registry.redhat.io/rhel8/tang tangd-rotate-keys -v -d /var/db/tang
    Rotated key 'rZAMKAseaXBe0rcKXL1hCCIq-DY.jwk' -> .'rZAMKAseaXBe0rcKXL1hCCIq-DY.jwk'
    Rotated key 'x1AIpc6WmnCU-CabD8_4q18vDuw.jwk' -> .'x1AIpc6WmnCU-CabD8_4q18vDuw.jwk'
    Created new key GrMMX_WfdqomIU_4RyjpcdlXb0E.jwk
    Created new key _dTTfn17sZZqVAp80u3ygFDHtjk.jwk
    Keys rotated successfully.
    Copy to Clipboard Toggle word wrap

验证

  • 在包含 LUKS 加密卷的系统上,通过 Tang 服务器自动解锁,检查 Clevis 客户端是否可以使用 Tang 加密和解密纯文本消息:

    # echo test | clevis encrypt tang '{"url":"http://localhost:7500"}' | clevis decrypt
    The advertisement contains the following signing keys:
    
    x1AIpc6WmnCU-CabD8_4q18vDuw
    
    Do you wish to trust these keys? [ynYN] y
    test
    Copy to Clipboard Toggle word wrap

    localhost URL 上的 Tang 服务器可用并通过端口 7500 进行通信时,上一示例命令在其输出的末尾显示 test 字符串。

18.14.16. 使用 RHEL 系统角色配置 NBDE

您可以使用 nbde_clientnbde_server RHEL 系统角色使用 Clevis 和 Tang 自动部署基于策略的解密(PBD)解决方案。rhel-system-roles 包中包含了这些系统角色、相关的例子以及参考文档。

通过使用 nbde_server 系统角色,您可以部署和管理 Tang 服务器作为自动磁盘加密解决方案的一部分。此角色支持以下功能:

  • 轮转 Tang 密钥
  • 部署和备份 Tang 密钥

先决条件

流程

  1. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    ---
    - name: Deploy a Tang server
      hosts: tang.server.example.com
      tasks:
      - name: Install and configure periodic key rotation
        ansible.builtin.include_role:
            name: redhat.rhel_system_roles.nbde_server
        vars:
          nbde_server_rotate_keys: yes
          nbde_server_manage_firewall: true
          nbde_server_manage_selinux: true
    Copy to Clipboard Toggle word wrap

    此示例 playbook 确保部署 Tang 服务器和密钥轮转。

    示例 playbook 中指定的设置包括以下内容:

    nbde_server_manage_firewall: true
    使用 firewall 系统角色管理 nbde_server 角色使用的端口。
    nbde_server_manage_selinux: true

    使用 selinux 系统角色管理 nbde_server 角色使用的端口。

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.nbde_server/README.md 文件。

  2. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    请注意,这个命令只验证语法,不会防止错误但有效的配置。

  3. 运行 playbook:

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

验证

  • 在您的 NBDE 客户端上,使用以下命令验证您的 Tang 服务器是否正常工作。该命令必须返回您传递的与加密和解密相同的消息:

    # ansible managed-node-01.example.com -m command -a 'echo test | clevis encrypt tang '{"url":"<tang.server.example.com>"}' -y | clevis decrypt'
    test
    Copy to Clipboard Toggle word wrap

nbde_client 系统角色使您能够以自动化的方式部署多个Clevis客户端。

此角色支持将 LUKS 加密卷绑定到一个或多个网络绑定(NBDE)服务器 - Tang 服务器。您可以使用密码短语保留现有的卷加密,或者将其删除。删除密码短语后,您只能使用 NBDE 解锁卷。当卷最初是使用在置备系统后会删除的临时密钥或密码进行加密时,这非常有用,

如果您同时提供密语和密钥文件,角色将使用您首先提供的那一个。如果找不到任何有效密语或密码,它将尝试从现有的绑定中检索密码短语。

基于策略的解密(PBD)将绑定定义为设备到插槽的映射。这意味着对同一个设备你可以有多个绑定。默认插槽是插槽 1。

注意

nbde_client 系统角色只支持 Tang 绑定。因此,您无法将其用于 TPM2 绑定。

先决条件

流程

  1. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    ---
    - name: Configure clients for unlocking of encrypted volumes by Tang servers
      hosts: managed-node-01.example.com
      tasks:
        - name: Create NBDE client bindings
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.nbde_client
          vars:
            nbde_client_bindings:
              - device: /dev/rhel/root
                encryption_key_src: /etc/luks/keyfile
                nbde_client_early_boot: true
                state: present
                servers:
                  - http://server1.example.com
                  - http://server2.example.com
              - device: /dev/rhel/swap
                encryption_key_src: /etc/luks/keyfile
                servers:
                  - http://server1.example.com
                  - http://server2.example.com
    Copy to Clipboard Toggle word wrap

    这个示例 playbook 配置 Clevis 客户端,以便在两个 Tang 服务器中至少有一个可用时自动解锁两个 LUKS 加密卷。

    示例 playbook 中指定的设置包括以下内容:

    state: present
    state 的值表示运行 playbook 后的配置。使用 present 值来创建新绑定或更新现有绑定。与 clevis luks bind 命令不同,您可以使用 state: present 来覆盖其设备插槽中的现有绑定。absent 的值会删除指定的绑定。
    nbde_client_early_boot: true

    nbde_client 角色可确保 Tang pin 的网络默认在早期引导时可用。如果您需要禁用此功能,请在 playbook 中添加 nbde_client_early_boot: false 变量。

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.nbde_client/README.md 文件。

  2. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    请注意,这个命令只验证语法,不会防止错误但有效的配置。

  3. 运行 playbook:

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

验证

  1. 在 NBDE 客户端中,检查您的 Tang 服务器是否应自动解锁的加密卷,其中包含其 LUKS pin 中对应的信息:

    # ansible managed-node-01.example.com -m command -a 'clevis luks list -d /dev/rhel/root'
    1: tang '{"url":"<http://server1.example.com/>"}'
    2: tang '{"url":"<http://server2.example.com/>"}'
    Copy to Clipboard Toggle word wrap
  2. 如果不使用 nbde_client_early_boot: false 变量,请验证绑定可用于早期引导,例如:

    # ansible managed-node-01.example.com -m command -a 'lsinitrd | grep clevis-luks'
    lrwxrwxrwx   1 root     root           48 Jan  4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path
    …
    Copy to Clipboard Toggle word wrap

nbde_client RHEL 系统角色只支持使用动态主机配置协议(DHCP)的情况。在带有静态 IP 配置的 NBDE 客户端中,您必须将网络配置作为内核引导参数传递。

通常,管理员希望重复使用 playbook,且不会为 Ansible 在早期引导过程中为其分配静态 IP 地址的每个主机维护单独的 playbook。在这种情况下,您可以在 playbook 中使用变量并在外部文件中提供设置。因此,您只需要一个 playbook 和一个带有设置的文件。

先决条件

流程

  1. 使用主机的网络设置创建文件,如 static-ip-settings-clients.yml,并添加您要动态分配给主机的值:

    clients:
      managed-node-01.example.com:
        ip_v4: 192.0.2.1
        gateway_v4: 192.0.2.254
        netmask_v4: 255.255.255.0
        interface: enp1s0
      managed-node-02.example.com:
        ip_v4: 192.0.2.2
        gateway_v4: 192.0.2.254
        netmask_v4: 255.255.255.0
        interface: enp1s0
    Copy to Clipboard Toggle word wrap
  2. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    - name: Configure clients for unlocking of encrypted volumes by Tang servers
      hosts: managed-node-01.example.com,managed-node-02.example.com
      vars_files:
        - ~/static-ip-settings-clients.yml
      tasks:
        - name: Create NBDE client bindings
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.network
          vars:
            nbde_client_bindings:
              - device: /dev/rhel/root
                encryption_key_src: /etc/luks/keyfile
                servers:
                  - http://server1.example.com
                  - http://server2.example.com
              - device: /dev/rhel/swap
                encryption_key_src: /etc/luks/keyfile
                servers:
                  - http://server1.example.com
                  - http://server2.example.com
    
        - name: Configure a Clevis client with static IP address during early boot
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.bootloader
          vars:
            bootloader_settings:
              - kernel: ALL
                options:
                  - name: ip
                    value: "{{ clients[inventory_hostname]['ip_v4'] }}::{{ clients[inventory_hostname]['gateway_v4'] }}:{{ clients[inventory_hostname]['netmask_v4'] }}::{{ clients[inventory_hostname]['interface'] }}:none"
    Copy to Clipboard Toggle word wrap

    此 playbook 为 ~/static-ip-settings-clients.yml 文件中列出的每个主机动态读取某些值。

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.network/README.md 文件。

  3. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    请注意,这个命令只验证语法,不会防止错误但有效的配置。

  4. 运行 playbook:

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

第 19 章 使用 SELinux

19.1. SELinux 入门

SELinux(Security Enhanced Linux)提供了一个额外的系统安全层。SELinux 从根本上回答问题:<subject> do <action> to <object>?,例如:Web 服务器是否可以访问用户主目录中的文件?

19.1.1. SELinux 简介

系统管理员一般无法通过基于用户、组群和其它权限(称为 Discretionary Access Control,DAC)的标准访问策略生成全面、精细的安全策略。例如,限制特定应用程序只能查看日志文件,而同时允许其他应用程序在日志文件中添加新数据。

Security Enhanced Linux(SELinux)实施强制访问控制(MAC)。每个进程和系统资源都有一个特殊的安全性标签,称为 SELinux 上下文(context)。SELinux 上下文有时被称为 SELinux 标签,它是一个提取系统级别细节并专注于实体的安全属性的标识符。这不仅提供了在 SELinux 策略中引用对象的一个一致方法,而且消除了在其他身份识别系统中可能存在的模糊性。例如,某个文件可以在使用绑定挂载的系统中有多个有效的路径名称。

SELinux 策略在一系列规则中使用这些上下文,它们定义进程如何相互交互以及与各种系统资源进行交互。默认情况下,策略不允许任何交互,除非规则明确授予了相应的权限。

注意

请记住,对 SELinux 策略规则的检查是在 DAC 规则后进行的。如果 DAC 规则已拒绝了访问,则不会使用 SELinux 策略规则。这意味着,如果传统的 DAC 规则已阻止了访问,则不会在 SELinux 中记录拒绝信息。

SELinux 上下文包括以下字段: user(用户)、role(角色)、type(类型)和 security level(安全级别)。在 SELinux 策略中,SELinux 类型信息可能是最重要的。这是因为,最常用的、用于定义允许在进程和系统资源间进行的交互的策略规则会使用 SELinux 类型而不是 SELinux 的完整上下文。SELinux 类型以 _t 结尾.例如,Web 服务器的类型名称是 httpd_t。通常位于 /var/www/html/ 中的文件和目录的类型上下文是 httpd_sys_content_t。通常位于 /tmp 和 /var/tmp/ 中的文件和目录的类型上下文是 tmp_t。Web 服务器端口的类型上下文是 http_port_t

有一个策略规则允许 Apache(作为 httpd_t运行的 Web 服务器进程)访问 /var/www/html/ 和其他 Web 服务器目录(httpd_sys_content_t)中通常找到的文件和目录。策略中没有针对通常位于 /tmp 和 /var/tmp / 中的文件的允许规则,因此不允许访问。有了 SELinux,即使 Apache 被破坏并且恶意的脚本可以访问,它仍然无法访问 /tmp 目录。

图 19.1. 通过 SELinux 以安全的方式运行 Apache 和 MariaDB 的示例。

如上例所示,SELinux 允许以 httpd_t 身份运行的 Apache 进程访问 /var/www/html/ 目录,并且拒绝同一进程访问 /data/mysql/ 目录,因为 httpd_t 和 mysqld_db_t 类型上下文没有允许规则。另一方面,作为 mysqld_t 运行的 MariaDB 进程能够访问 /data/mysql/ 目录,SELinux 也正确拒绝类型为 mysqld_t 的进程,以访问标记为 httpd_ sys_content_t/var/www/html/ 目录。

19.1.2. 运行 SELinux 的好处

SELinux 提供以下优点:

  • 所有进程和文件都被标记。SELinux 策略规则定义了进程如何与文件交互,以及进程如何相互交互。只有存在明确允许的 SELinux 策略规则时,才能允许访问。
  • SELinux 提供精细的访问控制。传统的 UNIX 通过用户的授权、基于 Linux 的用户和组进行控制。而 SELinux 的访问控制基于所有可用信息,如 SELinux 用户、角色、类型以及可选的安全级别。
  • SELinux 策略由系统管理员进行定义,并在系统范围内强制执行。
  • SELinux 可以缓解权限升级攻击。进程在域中运行,因此是相互分离的。SELinux 策略规则定义了如何处理访问文件和其它进程。如果某个进程被破坏,攻击者只能访问该进程的正常功能,而且只能访问已被配置为可以被该进程访问的文件。例如:如果 Apache HTTP 服务器被破坏,攻击者无法使用该进程读取用户主目录中的文件,除非添加或者配置了特定的 SELinux 策略规则允许这类访问。
  • SELinux 可以强制实施数据保密性和完整性,并可以防止进程不受不受信任的输入的影响。

SELinux 旨在增强现有的安全解决方案,而不是替换 antivirus 软件、安全密码、防火墙或其他安全系统。即使运行 SELinux,仍需要遵循好的安全实践,如保持软件更新、使用安全的密码、使用防火墙。

19.1.3. SELinux 示例

以下示例演示了 SELinux 如何提高安全性:

  • 默认操作为 deny(拒绝)。如果 SELinux 策略规则不存在允许访问(如允许进程打开一个文件),则拒绝访问。
  • SELinux 可以限制 Linux 用户。SELinux 策略中包括很多受限制的 SELinux 用户。可将 Linux 用户映射到受限制的 SELinux 用户,以便利用其使用的安全规则和机制。例如,将 Linux 用户映射到 SELinux user_u 用户,使得 Linux 用户将无法运行,除非有其他配置的用户 ID(setuid)应用程序,如 sudosu
  • 增加进程和数据的分离。SELinux 域(domain)的概念允许定义哪些进程可以访问某些文件和目录。例如:在运行 SELinux 时,除非有其他配置,攻击者将无法侵入 Samba 服务器,然后使用 Samba 服务器作为攻击向量读取和写入其它进程使用的文件(如 MariaDB 数据库)。
  • SELinux 可帮助缓解配置错误带来的破坏。在区传输(zone transfer)过程中,不同的 DNS 服务器通常会在彼此间复制信息。攻击者可以利用区传输来更新 DNS 服务器使其包括错误的信息。当在 Red Hat Enterprise Linux 中使用 BIND(Berkeley Internet Name Domain)作为 DNS 服务器运行时,即使管理员没有限制哪些服务器可执行区传输,默认的 SELinux 策略也会阻止区文件 [1] 通过 BIND named 守护进程本身或其它进程,使用区传输。
  • 如果没有 SELinux,攻击者可以利用漏洞在 Apache Web 服务器上路径遍历,并使用特殊元素(如 ../)访问存储在文件系统中的文件和目录。如果攻击者尝试对使用了强制模式运行 SELinux 的服务器进行攻击,SELinux 会拒绝对 httpd 进程不能访问的文件的访问。虽然 SELinux 无法完全阻止这型的攻击,但它可以有效地缓解它。
  • 使用强制(enforcing)模式的 SELinux 可以成功防止利用 kernel NULL pointer dereference operators on non-SMAP platforms (CVE-2019-9213) 安全漏洞进行攻击。攻击者可以利用 mmap 功能中的一个漏洞(不检查 null 页面的映射)将任意代码放在本页中。
  • deny_ptrace SELinux boolean 和使用 enforcing 模式的 SELinux 的系统可以防止利用 PTRACE_TRACEME 安全漏洞 (CVE-2019-13272) 进行的攻击。这种配置可以防止攻击者获得 root 特权。
  • nfs_export_all_rwnfs_export_all_ro SELinux 布尔值提供了一个易于使用的工具,以防止错误配置网络文件系统 (NFS),如意外地共享了 /home 目录。

19.1.4. SELinux 构架和软件包

SELinux 是一个内置在 Linux 内核中的 Linux 安全模块(LSM)。内核中的 SELinux 子系统由安全策略驱动,该策略由管理员控制并在引导时载入。系统中所有与安全性相关的、内核级别的访问操作都会被 SELinux 截取,并在加载的安全策略上下文中检查。如果载入的策略允许操作,它将继续进行。否则,操作会被阻断,进程会收到一个错误。

SELinux 决策(如允许或禁止访问)会被缓存。这个缓存被称为 Access Vector Cache(AVC)。通过使用这些缓存的决定,可以较少对 SELinux 策略规则的检查,这会提高性能。请记住,如果 DAC 规则已首先拒绝了访问,则 SELinux 策略规则无效。原始审计消息记录到 /var/log/audit/audit.log 中,它们以 type=AVC 字符串开头。

在 RHEL 8 中,系统服务由 systemd 守护进程控制;systemd 启动 和停止所有服务,用户和进程使用 systemctl 实用程序与 systemd 通信。systemd 守护进程可以参考 SELinux 策略,检查调用进程的标签以及调用者尝试管理的单元文件标签,然后询问 SELinux 是否允许调用者访问。这个方法可控制对关键系统功能的访问控制,其中包括启动和停止系统服务。

systemd 守护进程也充当 SELinux 访问管理器。它检索运行 systemctl 的进程的标签,或向 systemd 发送 D-Bus 消息的进程标签。然后守护进程会查找进程要配置的单元文件标签。最后,如果 SELinux 策略允许进程标签和单元文件标签之间的特定访问,systemd 可以从内核检索信息。这意味着,SELinux 现在可以限制需要与 systemd 交互特定服务的被破坏的应用。策略作者也可以使用这些精细的控制来限制管理员。

如果进程正在向另一个进程发送 D-Bus 消息,如果 SELinux 策略不允许这两个进程 的 D-Bus 通信,则系统将打印 USER_AVC 拒绝消息,并且 D-Bus 通信超时。请注意,两个进程之间的 D-Bus 通信可以双向运行。

重要

为了避免不正确的 SELinux 标记和后续问题,请确保使用 systemctl start 命令启动 服务。

RHEL 8 提供以下用于 SELinux 的软件包:

  • 策略: selinux-policy-targetedselinux-policy-mls
  • 工具:policy coreutils、policycoreutils-guilibselinux-utils、policycoreutils-python-utilssetools-consolecheckpolicy

19.1.5. SELinux 状态和模式

SELinux 可使用三种模式之一运行: enforcing(强制)、permissive(宽容)或 disabled(禁用)。

  • Enforcing 模式是默认操作模式,在 enforcing 模式下 SELinux 可正常运行,并在整个系统中强制实施载入的安全策略。
  • 在 permissive 模式中,系统会象 enforcing 模式一样加载安全策略,包括标记对象并在日志中记录访问拒绝条目,但它并不会拒绝任何操作。不建议在生产环境系统中使用 permissive 模式,但 permissive 模式对 SELinux 策略开发和调试很有帮助。
  • 强烈建议不要使用禁用(disabled)模式。它不仅会使系统避免强制使用 SELinux 策略,还会避免为任何持久对象(如文件)添加标签,这使得在以后启用 SELinux 非常困难。

使用 setenforce 实用程序在 enforcing 模式和 permissive 模式之间变化。使用 setenforce 进行的更改在重启后不会保留。要更改为强制模式,请以 Linux root 用户身份输入 setenforce 1 命令。要更改为 permissive 模式,请输入 setenforce 0 命令。使用 getenforce 工具来查看当前的 SELinux 模式:

# getenforce
Enforcing
Copy to Clipboard Toggle word wrap
# setenforce 0
# getenforce
Permissive
Copy to Clipboard Toggle word wrap
# setenforce 1
# getenforce
Enforcing
Copy to Clipboard Toggle word wrap

在 Red Hat Enterprise Linux 中,您可以在系统处于 enforcing 模式时,将独立的域设置为 permissive 模式。例如,使 httpd_t 域为 permissive 模式:

# semanage permissive -a httpd_t
Copy to Clipboard Toggle word wrap

请注意,permissive 域是一个强大的工具,它可能会破坏您系统的安全性。红帽建议谨慎使用 permissive 域,如仅在调试特定情境时使用。

19.2. 更改 SELinux 状态和模式

启用后,SELinux 可使用两种模式之一运行: enforcing 或 permissive。以下小节介绍了如何永久更改这些模式。

19.2.1. SELinux 状态和模式的更改

SELinux 状态和模式 中所述,SELinux 可以被启用或禁用。启用后,SELinux 有两个模式: enforcing 和 permissive。

使用 getenforcesestatus 命令检查 SELinux 在哪个模式下运行。getenforce 命令返回 EnforcingPmissive 或 Disabled

sestatus 命令返回 SELinux 状态以及正在使用的 SELinux 策略:

$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31
Copy to Clipboard Toggle word wrap
警告

当系统以 permissive 模式运行 SELinux 时,用户和进程可能会错误地标记各种文件系统对象。当禁用 SELinux 时创建的文件系统对象不会被标记。这会在将 SELinux 改为 enforcing 模式时导致问题,因为 SELinux 依赖于正确的文件系统对象标签。

为防止错误标记和未标记的文件造成问题,SELinux 在从 disabled 状态更改为 permissive 或 enforcing 模式时自动重新标记文件系统。以 root 用户身份使用 fixfiles -F onboot 命令创建包含 -F 选项的 /.autorelabel 文件,以确保在下次重启时重新标记文件。

在重新引导系统以进行重新标记之前,请确保系统将以 permissive 模式引导,例如使用 enforcing=0 内核选项。这可防止系统在启动 selinux-autorelabel 服务前需要未标记的文件时,系统无法引导。如需更多信息,请参阅 RHBZ#2021835

19.2.2. 将 SELinux 更改为 permissive 模式

当 SELinux 是以 permissive 模式运行时,不会强制 SELinux 策略。系统可保持正常操作,SELinux 不会拒绝任何操作,而只是记录 AVC 信息,它们可用于故障排除、调试和 SELinux 策略改进。每个 AVC 在这个示例中仅记录一次。

先决条件

  • selinux-policy-targetedlibselinux-utilspolicycoreutils 软件包已安装在您的系统中。
  • 未使用 selinux=0enforcing=0 内核参数。

流程

  1. 在您选择的文本编辑器中打开 /etc/selinux/config 文件,例如:

    # vi /etc/selinux/config
    Copy to Clipboard Toggle word wrap
  2. 配置 SELINUX=permissive 选项:

    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #       enforcing - SELinux security policy is enforced.
    #       permissive - SELinux prints warnings instead of enforcing.
    #       disabled - No SELinux policy is loaded.
    SELINUX=permissive
    # SELINUXTYPE= can take one of these two values:
    #       targeted - Targeted processes are protected,
    #       mls - Multi Level Security protection.
    SELINUXTYPE=targeted
    Copy to Clipboard Toggle word wrap
  3. 重启系统:

    # reboot
    Copy to Clipboard Toggle word wrap

验证

  1. 系统重启后,确认 getenforce 命令返回 许可

    $ getenforce
    Permissive
    Copy to Clipboard Toggle word wrap

19.2.3. 将 SELinux 更改为 enforcing 模式

当 SELinux 处于 enforcing 模式时,它会强制 SELinux 策略并根据 SELinux 策略规则拒绝访问。在 RHEL 中,当系统最初使用 SELinux 安装时,默认启用 enforcing 模式。

先决条件

  • selinux-policy-targetedlibselinux-utilspolicycoreutils 软件包已安装在您的系统中。
  • 未使用 selinux=0enforcing=0 内核参数。

流程

  1. 在您选择的文本编辑器中打开 /etc/selinux/config 文件,例如:

    # vi /etc/selinux/config
    Copy to Clipboard Toggle word wrap
  2. 配置 SELINUX=enforcing 选项:

    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #       enforcing - SELinux security policy is enforced.
    #       permissive - SELinux prints warnings instead of enforcing.
    #       disabled - No SELinux policy is loaded.
    SELINUX=enforcing
    # SELINUXTYPE= can take one of these two values:
    #       targeted - Targeted processes are protected,
    #       mls - Multi Level Security protection.
    SELINUXTYPE=targeted
    Copy to Clipboard Toggle word wrap
  3. 保存更改,重启系统:

    # reboot
    Copy to Clipboard Toggle word wrap

    在下一次引导中,SELinux 会重新标记系统中的所有文件和目录,并为禁用 SELinux 时创建的文件和目录添加 SELinux 上下文。

验证

  1. 系统重启后,确认 getenforce 命令返回 Enforcing:

    $ getenforce
    Enforcing
    Copy to Clipboard Toggle word wrap

故障排除

切换到 enforcing 模式后,SELinux 可能会因为不正确或缺少 SELinux 策略规则而拒绝某些操作。

  • 要查看 SELinux 拒绝的操作,以 root 用户身份输入以下命令:

    # ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts today
    Copy to Clipboard Toggle word wrap
  • 另外,如果安装了 setroubleshoot-server 软件包,请输入:

    # grep "SELinux is preventing" /var/log/messages
    Copy to Clipboard Toggle word wrap
  • 如果 SELinux 活跃且 Audit 守护进程(auditd)没有在您的系统中运行,则在 dmesg 命令输出中搜索某些 SELinux 信息:

    # dmesg | grep -i -e type=1300 -e type=1400
    Copy to Clipboard Toggle word wrap

如需更多信息,请参阅 SELinux 故障排除

19.2.4. 在之前禁用的系统中启用 SELinux

为了避免问题(如系统无法引导或进程失败),当在之前禁用的系统中启用 SELinux 时,首先在 permissive 模式中解析 Access Vector Cache (AVC)信息。

当系统以 permissive 模式运行 SELinux 时,用户和进程可能会错误地标记各种文件系统对象。当禁用 SELinux 时创建的文件系统对象不会被标记。这会在将 SELinux 改为 enforcing 模式时导致问题,因为 SELinux 依赖于正确的文件系统对象标签。

为防止错误标记和未标记的文件造成问题,SELinux 在从 disabled 状态更改为 permissive 或 enforcing 模式时自动重新标记文件系统。

警告

在重新引导系统以进行重新标记之前,请确保系统将以 permissive 模式引导,例如使用 enforcing=0 内核选项。这可防止系统在启动 selinux-autorelabel 服务前需要未标记的文件时,系统无法引导。如需更多信息,请参阅 RHBZ#2021835

流程

  1. 以 permissive 模式启用 SELinux。如需更多信息,请参阅切换到 permissive 模式
  2. 重启您的系统:

    # reboot
    Copy to Clipboard Toggle word wrap
  3. 检查 SELinux 拒绝信息。如需更多信息,请参阅 识别 SELinux 拒绝
  4. 确保在下次重启时重新标记文件:

    # fixfiles -F onboot
    Copy to Clipboard Toggle word wrap

    这会创建包含 -F 选项的 /.autorelabel 文件。

    警告

    进入 fixfiles -F onboot 命令前,始终切换到 permissive 模式。

    默认情况下,autorelabel 使用并行数量的线程,因为系统有可用的 CPU 内核。要在自动重新标记过程中只使用单个线程,请使用 fixfiles -T 1 onboot 命令。

  5. 如果没有拒绝的操作,切换到 enforcing 模式。如需更多信息,请参阅在引导时进入 SELinux 模式

验证

  1. 系统重启后,确认 getenforce 命令返回 Enforcing:

    $ getenforce
    Enforcing
    Copy to Clipboard Toggle word wrap

后续步骤

要在 enforcing 模式下使用 SELinux 运行自定义应用程序,请选择以下之一:

  • unconfined_service_t 域中运行您的应用程序。
  • 为应用程序编写新策略。如需更多信息,请参阅 编写自定义 SELinux 策略 部分。

19.2.5. 禁用 SELinux

当您禁用 SELinux 时,您的系统不会载入 SELinux 策略。因此,系统不会强制执行 SELinux 策略,且不会记录 Access Vector Cache (AVC)信息。因此,运行 SELinux 的好处中介绍的好处都将没有。

除非在特定情况下,否则不要禁用 SELinux,如对性能敏感的系统,当弱安全性不会带来重大风险时。

重要

如果您的场景需要在生产环境中执行调试,请临时使用 permissive 模式,而不是永久禁用 SELinux。如需有关 permissive 模式的更多信息,请参阅切换为 permissive 模式

先决条件

  • 已安装 grubby 软件包:

    $ rpm -q grubby
    grubby-<version>
    Copy to Clipboard Toggle word wrap

流程

  1. 将您的引导装载程序配置为在内核命令行中添加 selinux=0

    $ sudo grubby --update-kernel ALL --args selinux=0
    Copy to Clipboard Toggle word wrap
  2. 重启您的系统:

    $ reboot
    Copy to Clipboard Toggle word wrap

验证

  • 重新引导后,确认 getenforce 命令返回 Disabled

    $ getenforce
    Disabled
    Copy to Clipboard Toggle word wrap

其它方法

在 RHEL 8 中,您仍然可以使用 已弃用 的方法,通过使用 /etc/selinux/config 文件中的 SELINUX=disabled 选项来禁用 SELinux。这会导致内核启用 SELinux,并在稍后的引导过程中切换到禁用模式。因此,可能会出现内存泄漏和竞争条件,从而导致内核 panic。使用此方法:

  1. 在您选择的文本编辑器中打开 /etc/selinux/config 文件,例如:

    # vi /etc/selinux/config
    Copy to Clipboard Toggle word wrap
  2. 配置 SELINUX=disabled 选项:

    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #       enforcing - SELinux security policy is enforced.
    #       permissive - SELinux prints warnings instead of enforcing.
    #       disabled - No SELinux policy is loaded.
    SELINUX=disabled
    # SELINUXTYPE= can take one of these two values:
    #       targeted - Targeted processes are protected,
    #       mls - Multi Level Security protection.
    SELINUXTYPE=targeted
    Copy to Clipboard Toggle word wrap
  3. 保存更改并重启您的系统:

    # reboot
    Copy to Clipboard Toggle word wrap

19.2.6. 在引导时更改 SELinux 模式

在引导时,您可以设置以下内核参数来更改 SELinux 的运行方式:

enforcing=0

设置此参数可让系统以 permissive 模式启动,这在进行故障排除时非常有用。如果您的文件系统被破坏,使用 permissive 模式可能是唯一的选择。在 permissive 模式中,系统将继续正确创建标签。在这个模式中产生的 AVC 信息可能与 enforcing 模式不同。

在 permissive 模式中,只报告来自于同一拒绝的一系列操作的第一个拒绝信息。然而,在 enforcing 模式中,您可能会得到一个与读取目录相关的拒绝信息,应用程序将停止。在 permissive 模式中,您会得到相同的 AVC 信息,但应用程序将继续读取目录中的文件,并为因为每个拒绝额外获得一个 AVC。

selinux=0

这个参数会导致内核不载入 SELinux 构架的任意部分。初始化脚本会注意到系统使用 selinux=0 参数引导,并涉及 /.autorelabel 文件。这会导致系统在下次使用 SELinux enabled 模式引导时自动重新标记。

重要

不要在生产环境中使用 selinux=0 参数。要调试您的系统,请临时使用 permissive 模式而不是禁用 SELinux。

autorelabel=1

这个参数强制系统使用类似以下命令的重新标记:

# touch /.autorelabel
# reboot
Copy to Clipboard Toggle word wrap

如果文件系统中包含大量错误标记的对象,以 permissive 模式启动系统,使 autorelabel 进程成功。



[1] 包括 DNS 信息(如主机名到 IP 地址映射)的文本文件。

部分 III. 网络设计

第 20 章 使用 ifcfg 文件配置 ip 网络

接口配置(ifcfg)文件控制各个网络设备的软件接口。当系统引导时,它使用这些文件来决定启动哪些界面以及如何进行配置。这些文件被命名为 ifcfg-name_pass,其中后缀 name 指的是配置文件控制的设备的名称。按照惯例,ifcfg 文件的后缀与配置文件中 DEVICE 指令给出的字符串相同。

重要

NetworkManager 支持以密钥文件格式存储的配置文件。但是,当使用 NetworkManager API 创建或更新配置文件时,NetworkManager 默认使用 ifcfg 格式。

在未来的主 RHEL 版本中,密钥文件格式将会成为默认格式。如果要手动创建和管理配置文件,请考虑使用密钥文件格式。详情请查看 keyfile 格式的NetworkManager 连接配置文件

如果不使用 NetworkManager 工具和应用程序,您可以通过创建 ifcfg 文件来手动配置网络接口。

流程

  • 要使用 ifcfg 文件,为名为 enp1s0 的接口配置具有静态网络设置的接口,请在 /etc/sysconfig/network-scripts/ 目录中创建一个名为 ifcfg-enp1s0 的文件,其包含以下内容:

    • 对于 IPv4 配置:

      DEVICE=enp1s0
      BOOTPROTO=none
      ONBOOT=yes
      PREFIX=24
      IPADDR=192.0.2.1
      GATEWAY=192.0.2.254
      Copy to Clipboard Toggle word wrap
    • 对于 IPv6 配置:

      DEVICE=enp1s0
      BOOTPROTO=none
      ONBOOT=yes
      IPV6INIT=yes
      IPV6ADDR=2001:db8:1::2/64
      Copy to Clipboard Toggle word wrap

如果不使用 NetworkManager 工具和应用程序,您可以通过创建 ifcfg 文件来手动配置网络接口。

流程

  1. 要使用 ifcfg 文件配置具有动态网络配置、名为 em1 的接口,请在 /etc/sysconfig/network-scripts/ 目录中创建一个名为 ifcfg-em1 的文件,其包含以下内容:

    DEVICE=em1
    BOOTPROTO=dhcp
    ONBOOT=yes
    Copy to Clipboard Toggle word wrap
  2. 要配置发送的接口:

    • DHCP 服务器使用不同的主机名,请在 ifcfg 文件中添加以下行:

      DHCP_HOSTNAME=hostname
      Copy to Clipboard Toggle word wrap
    • DHCP 服务器使用不同的完全限定域名(FQDN),请在 ifcfg 文件中添加以下行:

      DHCP_FQDN=fully.qualified.domain.name
      Copy to Clipboard Toggle word wrap
    注意

    您只能使用这些设置中的一个。如果您同时指定了 DHCP_HOSTNAMEDHCP_FQDN,则只使用 DHCP_FQDN

  3. 要将接口配置为使用特定的 DNS 服务器,请在 ifcfg 文件中添加以下行:

    PEERDNS=no
    DNS1=ip-address
    DNS2=ip-address
    Copy to Clipboard Toggle word wrap

    其中 ip-addressDNS 服务器的地址。这会导致网络服务使用指定的 DNS 服务器更新 /etc/resolv.conf。只需要一个 DNS 服务器地址,另一个是可选的。

默认情况下,主机上的所有用户都可以使用 ifcfg 文件中定义的连接。您可以通过在 ifcfg 文件中添加 USERS 参数,来将此行为限制为特定用户。

前提条件

  • ifcfg 文件已存在。

流程

  1. 编辑 /etc/sysconfig/network-scripts/ 目录中您要限制为某些用户的 ifcfg 文件,并添加:

    USERS="username1 username2 ..."
    Copy to Clipboard Toggle word wrap
  2. 重新激活连接:

    # nmcli connection up connection_name
    Copy to Clipboard Toggle word wrap

第 21 章 开始使用 IPVLAN

IPVLAN 是虚拟网络设备的驱动程序,可在容器环境中用于访问主机网络。IPVLAN 会将一个 MAC 地址公开给外部网络,而不管主机网络中所创建的 IPVLAN 设备的数量。这意味着,用户可以在多个容器中有多个 IPVLAN 设备,相应的交换机会读取单个 MAC 地址。当本地交换机对它可管理的 MAC 地址的总数施加约束时,IPVLAN 驱动程序很有用。

21.1. IPVLAN 模式

IPVLAN 有以下模式可用:

  • L2 模式

    在 IPVLAN L2 模式 中,虚拟设备接收并响应地址解析协议(ARP)请求。netfilter 框架仅在拥有虚拟设备的容器中运行。容器化流量的默认命名空间中不会执行 netfilter 链。使用L2 模式会提供良好的性能,但对网络流量的控制要小。

  • L3 模式

    L3 模式 中,虚拟设备只处理 L3 以上的流量。虚拟设备不响应 ARP 请求,用户必须手动为相关点上的 IPVLAN IP 地址配置邻居条目。相关容器的出口流量位于默认命名空间中的 netfilter POSTROUTING 和 OUTPUT 链上,而入口流量以与 L2 模式 相同的方式被线程化。使用L3 模式会提供很好的控制,但可能会降低网络流量性能。

  • L3S 模式

    L3S 模式 中,虚拟设备处理方式与 L3 模式 中的处理方式相同,但相关容器的出口和入口流量都位于默认命名空间中的 netfilter 链上。L3S 模式 的行为方式和 L3 模式 相似,但提供了对网络的更大控制。

注意

对于 L3L3S 模式,IPVLAN 虚拟设备不接收广播和多播流量。

21.2. IPVLAN 和 MACVLAN 的比较

下表显示了 MACVLAN 和 IPVLAN 之间的主要区别:

Expand
MACVLANIPVLAN

为每个 MACVLAN 设备使用 MAC 地址。

请注意,如果交换机达到了其 MAC 表中可以存储的最大 MAC 地址数,则连接可能会丢失。

使用不限制 IPVLAN 设备数的单个 MAC 地址。

全局命名空间的 Netfilter 规则不会影响子命名空间中到 MACVLAN 设备或来自 MACVLAN 设备的流量。

可以在 L3 mode L3S mode 下控制到 IPVLAN 设备或来自 IPVLAN 设备的流量。

IPVLAN 和 MACVLAN 不需要任何级别的封装。

21.3. 使用 iproute2 创建和配置 IPVLAN 设备

此流程演示了如何使用 iproute2 设置 IPVLAN 设备。

流程

  1. 要创建 IPVLAN 设备,请输入以下命令:

    # ip link add link real_NIC_device name IPVLAN_device type ipvlan mode l2
    Copy to Clipboard Toggle word wrap

    请注意:网络接口控制器(NIC)是将计算机连接到网络的一个硬件组件。

    例 21.1. 创建 IPVLAN 设备

    # ip link add link enp0s31f6 name my_ipvlan type ipvlan mode l2
    # ip link
    47: my_ipvlan@enp0s31f6: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether e8:6a:6e:8a:a2:44 brd ff:ff:ff:ff:ff:ff
    Copy to Clipboard Toggle word wrap
  2. 要给接口分配 IPv4IPv6 地址,请输入以下命令:

    # ip addr add dev IPVLAN_device IP_address/subnet_mask_prefix
    Copy to Clipboard Toggle word wrap
  3. 如果在 L3 模式L3S 模式中配置 IPVLAN 设备,请进行以下设置:

    1. 在远程主机上为远程 peer 配置邻居设置:

      # ip neigh add dev peer_device IPVLAN_device_IP_address lladdr MAC_address
      Copy to Clipboard Toggle word wrap

      其中 MAC_address 是 IPVLAN 设备所基于的实际网卡的 MAC 地址。

    2. 使用以下命令为 L3 模式 配置 IPVLAN 设备:

      # ip route add dev <real_NIC_device> <peer_IP_address/32>
      Copy to Clipboard Toggle word wrap

      对于 L3S 模式

      # ip route add dev real_NIC_device peer_IP_address/32
      Copy to Clipboard Toggle word wrap

      其中 IP-address 代表远程 peer 的地址。

  4. 要设置活跃的 IPVLAN 设备,请输入以下命令:

    # ip link set dev IPVLAN_device up
    Copy to Clipboard Toggle word wrap
  5. 要检查 IPVLAN 设备是否活跃,请在远程主机中执行以下命令:

    # ping IP_address
    Copy to Clipboard Toggle word wrap

    其中 IP_address 使用 IPVLAN 设备的 IP 地址。

使用虚拟路由和转发(VRF),管理员可以在同一主机上同时使用多个路由表。为此,VRF 将网络在第 3 层进行分区。这可让管理员使用每个 VRF 域的独立路由表隔离流量。这个技术与虚拟 LAN(虚拟 LAN)类似,后者在第二层为网络分区,其中操作系统使用不同的 VLAN 标签来隔离共享相同物理介质的流量。

VRF 优于在第二层上分区的好处是,路由会根据涉及的对等者数量进行更好地考虑。

Red Hat Enterprise Linux 为每个 VRF 域使用虚拟 vrt 设备,并通过向 VRF 设备添加现有网络设备来向 VRF 域添加路由。之前附加到原始设备的地址和路由将在 VRF 域中移动。

请注意,每个 VRF 域间都是相互隔离的。

您可以使用虚拟路由和转发(VRF)功能来对一个服务器的不同接口永久使用同样的 IP 地址。

重要

要在重新使用相同的 IP 地址时让远程对等两个 VRF 接口都联系,网络接口必须属于不同的广播域。网络中的广播域是一组节点,它们接收其中任何一个节点发送的广播流量。在大多数配置中,所有连接到同一交换机的节点都属于相同的域。

先决条件

  • root 用户身份登录。
  • 没有配置网络接口。

流程

  1. 创建并配置第一个 VRF 设备:

    1. 为 VRF 设备创建连接并将其分配到路由表中。例如,要创建一个分配给 1001 路由表、名为 vrf0 的 VRF 设备:

      # nmcli connection add type vrf ifname vrf0 con-name vrf0 table 1001 ipv4.method disabled ipv6.method disabled
      Copy to Clipboard Toggle word wrap
    2. 启用 vrf0 设备:

      # nmcli connection up vrf0
      Copy to Clipboard Toggle word wrap
    3. 为刚刚创建的 VRF 分配网络设备。例如,要向 vrf0 VRF 设备添加 enp1s0 以太网设备,并向 enp1s0 分配 IP 地址和子网掩码,请输入:

      # nmcli connection add type ethernet con-name vrf.enp1s0 ifname enp1s0 master vrf0 ipv4.method manual ipv4.address 192.0.2.1/24
      Copy to Clipboard Toggle word wrap
    4. 激活 vrf.enp1s0 连接:

      # nmcli connection up vrf.enp1s0
      Copy to Clipboard Toggle word wrap
  2. 创建并配置下一个 VRF 设备:

    1. 创建 VRF 设备并将其分配到路由表中。例如,要创建一个分配给 1002 路由表、名为 vrf1 的 VRF 设备,请输入:

      # nmcli connection add type vrf ifname vrf1 con-name vrf1 table 1002 ipv4.method disabled ipv6.method disabled
      Copy to Clipboard Toggle word wrap
    2. 激活 vrf1 设备:

      # nmcli connection up vrf1
      Copy to Clipboard Toggle word wrap
    3. 为刚刚创建的 VRF 分配网络设备。例如,要向 vrf1 VRF 设备添加 enp7s0 以太网设备,并给 enp7s0 分配 IP 地址和子网掩码,请输入:

      # nmcli connection add type ethernet con-name vrf.enp7s0 ifname enp7s0 master vrf1 ipv4.method manual ipv4.address 192.0.2.1/24
      Copy to Clipboard Toggle word wrap
    4. 激活 vrf.enp7s0 设备:

      # nmcli connection up vrf.enp7s0
      Copy to Clipboard Toggle word wrap

您可以使用虚拟路由和转发(VRF)功能来对一个服务器的不同接口临时使用同样的 IP 地址。这个过程仅用于测试目的,因为配置是临时的并在重启系统后会丢失。

重要

要在重新使用相同的 IP 地址时让远程对等两个 VRF 接口都联系,网络接口必须属于不同的广播域。广播域是一组节点,它们接收被其中任何一个发送的广播流量。在大多数配置中,所有连接到同一交换机的节点都属于相同的域。

先决条件

  • root 用户身份登录。
  • 没有配置网络接口。

流程

  1. 创建并配置第一个 VRF 设备:

    1. 创建 VRF 设备并将其分配到路由表中。例如,要创建一个分配给 1001 路由表、名为 blue 的 VRF 设备:

      # ip link add dev blue type vrf table 1001
      Copy to Clipboard Toggle word wrap
    2. 启用 blue 设备:

      # ip link set dev blue up
      Copy to Clipboard Toggle word wrap
    3. 为 VRF 设备分配网络设备。例如,要向 blue VRF 设备添加 enp1s0 以太网设备:

      # ip link set dev enp1s0 master blue
      Copy to Clipboard Toggle word wrap
    4. 启用 enp1s0 设备:

      # ip link set dev enp1s0 up
      Copy to Clipboard Toggle word wrap
    5. enp1s0 设备分配 IP 地址和子网掩码。例如,将其设为 192.0.2.1/24

      # ip addr add dev enp1s0 192.0.2.1/24
      Copy to Clipboard Toggle word wrap
  2. 创建并配置下一个 VRF 设备:

    1. 创建 VRF 设备并将其分配到路由表中。例如,要创建一个分配给 1002 路由表、名为 red 的 VRF 设备:

      # ip link add dev red type vrf table 1002
      Copy to Clipboard Toggle word wrap
    2. 启用 red 设备:

      # ip link set dev red up
      Copy to Clipboard Toggle word wrap
    3. 为 VRF 设备分配网络设备。例如,要向 red VRF 设备添加 enp7s0 以太网设备:

      # ip link set dev enp7s0 master red
      Copy to Clipboard Toggle word wrap
    4. 启用 enp7s0 设备:

      # ip link set dev enp7s0 up
      Copy to Clipboard Toggle word wrap
    5. enp7s0 设备分配与 blue VRF 域中 enp1s0 设备所使用的相同的 IP 地址和子网掩码:

      # ip addr add dev enp7s0 192.0.2.1/24
      Copy to Clipboard Toggle word wrap
  3. 可选:如上所述,创建更多 VRF 设备。

第 23 章 安全网络

23.1. 使用 OpenSSH 的两个系统间使用安全通讯

SSH(Secure Shell)是一种协议,它使用客户端-服务器架构在两个系统之间提供安全通信,并允许用户远程登录到服务器主机系统。与其他远程通信协议(如 FTP 或 Telnet )不同,SSH 会加密登录会话,这可防止入侵者从连接中收集未加密的密码。

23.1.1. 生成 SSH 密钥对

您可以使用在本地系统上生成的 SSH 密钥对,并将生成的公钥复制到 OpenSSH 服务器来在不输入密码的情况下登录到 OpenSSH 服务器。每个要创建密钥的用户都必须运行此流程。

要在重新安装系统后保留之前生成的密钥对,请在创建新密钥前备份 ~/.ssh/ 目录。重新安装后,将其复制到主目录中。您可以为系统中的所有用户(包括 root 用户)进行此操作。

先决条件

  • 您已经以希望使用密钥连接到 OpenSSH 服务器的用户的身份登录了。
  • OpenSSH 服务器被配置为允许基于密钥的身份验证。

流程

  1. 生成一个 ECDSA 密钥对:

    $ ssh-keygen -t ecdsa
    Generating public/private ecdsa key pair.
    Enter file in which to save the key (/home/<username>/.ssh/id_ecdsa):
    Enter passphrase (empty for no passphrase): <password>
    Enter same passphrase again: <password>
    Your identification has been saved in /home/<username>/.ssh/id_ecdsa.
    Your public key has been saved in /home/<username>/.ssh/id_ecdsa.pub.
    The key fingerprint is:
    SHA256:Q/x+qms4j7PCQ0qFd09iZEFHA+SqwBKRNaU72oZfaCI <username>@<localhost.example.com>
    The key's randomart image is:
    +---[ECDSA 256]---+
    |.oo..o=++        |
    |.. o .oo .       |
    |. .. o. o        |
    |....o.+...       |
    |o.oo.o +S .      |
    |.=.+.   .o       |
    |E.*+.  .  . .    |
    |.=..+ +..  o     |
    |  .  oo*+o.      |
    +----[SHA256]-----+
    Copy to Clipboard Toggle word wrap

    您还可以使用没有任何参数的 ssh-keygen 命令生成一个 RSA 密钥对,或通过输入 ssh-keygen -t ed25519 命令生成一个 Ed25519 密钥对。请注意,Ed25519 算法不符合 FIPS-140,OpenSSH 在 FIPS 模式下无法使用 Ed25519 密钥。

  2. 将公钥复制到远程机器上:

    $ ssh-copy-id <username>@<ssh-server-example.com>
    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    <username>@<ssh-server-example.com>'s password:
    …
    Number of key(s) added: 1
    
    Now try logging into the machine, with: "ssh '<username>@<ssh-server-example.com>'" and check to make sure that only the key(s) you wanted were added.
    Copy to Clipboard Toggle word wrap

    <username>@<ssh-server-example.com> 替换为您的凭证。

    如果您没有在会话中使用 ssh-agent 程序,上一个命令会复制最新修改的 ~/.ssh/id*.pub 公钥。要指定另一个公钥文件,或在 ssh-agent 内存中缓存的密钥优先选择文件中的密钥,使用带有 -i 选项的 ssh-copy-id 命令。

验证

  • 使用密钥文件登录到 OpenSSH 服务器:

    $ ssh -o PreferredAuthentications=publickey <username>@<ssh-server-example.com>
    Copy to Clipboard Toggle word wrap

要提高系统安全性,通过在 OpenSSH 服务器上禁用密码身份验证来强制进行基于密钥的身份验证。

先决条件

  • 已安装 openssh-server 软件包。
  • sshd 守护进程正在服务器中运行。
  • 您已使用密钥连接到 OpenSSH 服务器。

    详情请参阅 生成 SSH 密钥对 部分。

流程

  1. 在文本编辑器中打开 /etc/ssh/sshd_config 配置,例如:

    # vi /etc/ssh/sshd_config
    Copy to Clipboard Toggle word wrap
  2. PasswordAuthentication 选项改为 no:

    PasswordAuthentication no
    Copy to Clipboard Toggle word wrap
  3. 在不是新默认安装的系统上,检查是否设置了 PubkeyAuthentication 参数,或是否设置为 yes
  4. ChallengeResponseAuthentication 指令设置为 no

    请注意,相应的条目在配置文件中已被注释掉,默认值为 yes

  5. 要在 NFS 挂载的主目录中使用基于密钥的验证,启用 use_nfs_home_dirs SELinux 布尔值:

    # setsebool -P use_nfs_home_dirs 1
    Copy to Clipboard Toggle word wrap
  6. 如果您要进行远程连接,而不使用控制台或带外访问,在禁用密码验证前测试基于密钥的登录过程。
  7. 重新载入 sshd 守护进程以应用更改:

    # systemctl reload sshd
    Copy to Clipboard Toggle word wrap

23.1.3. 使用 ssh-agent 缓存 SSH 凭证

为了避免在每次发起 SSH 连接时输入密码短语,您可以使用 ssh-agent 工具为登录会话缓存 SSH 私钥。如果代理正在运行,并且您的密钥已解锁,您可以使用这些密钥登录到 SSH 服务器,但不必再次输入密钥的密码。确保私钥和密语安全。

先决条件

  • 您有一个运行了 SSH 守护进程的远程主机,并可通过网络访问。
  • 您知道登录到远程主机的 IP 地址或者主机名以及凭证。
  • 您已用密码生成了 SSH 密钥对,并将公钥传送到远程机器。

    详情请参阅 生成 SSH 密钥对 部分。

流程

  1. 将在您的会话中自动启动 ssh-agent 的命令添加到 ~/.bashrc 文件中:

    1. 在您选择的文本编辑器中打开 ~/.bashrc,例如:

      $ vi ~/.bashrc
      Copy to Clipboard Toggle word wrap
    2. 在文件中添加以下行:

      eval $(ssh-agent)
      Copy to Clipboard Toggle word wrap
    3. 保存更改,退出编辑器。
  2. ~/.ssh/config 文件中添加以下行:

    AddKeysToAgent yes
    Copy to Clipboard Toggle word wrap

    使用此选项并在会话中启动了 ssh-agent ,代理仅在您第一次连接到主机时提示输入密码。

验证

  • 登录到使用代理中缓存的私钥的对应的公钥的主机,例如:

    $ ssh <example.user>@<ssh-server@example.com>
    Copy to Clipboard Toggle word wrap

    请注意您不必输入密码短语。

您可以在智能卡上创建并存储 ECDSA 和 RSA 密钥,并通过 OpenSSH 客户端上的智能卡进行身份验证。智能卡验证替换了默认密码验证。

先决条件

  • 在客户端中安装了 opensc 软件包,pcscd 服务正在运行。

流程

  1. 列出所有由 OpenSC PKCS #11 模块提供的密钥,包括其 PKCS #11 URIs,并将输出保存到 key.pub 文件:

    $ ssh-keygen -D pkcs11: > keys.pub
    Copy to Clipboard Toggle word wrap
  2. 将公钥传送到远程服务器。使用ssh-copy-id 命令和上一步中创建的 keys.pub 文件:

    $ ssh-copy-id -f -i keys.pub <username@ssh-server-example.com>
    Copy to Clipboard Toggle word wrap
  3. 使用 ECDSA 密钥连接到 <ssh-server-example.com>。您可以只使用 URI 的子集,它唯一引用您的密钥,例如:

    $ ssh -i "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" <ssh-server-example.com>
    Enter PIN for 'SSH key':
    [ssh-server-example.com] $
    Copy to Clipboard Toggle word wrap

    因为 OpenSSH 使用 p11-kit-proxy 包装器,且 OpenSC PKCS #11 模块已注册到 p11-kit 工具,因此您可以简化上一个命令:

    $ ssh -i "pkcs11:id=%01" <ssh-server-example.com>
    Enter PIN for 'SSH key':
    [ssh-server-example.com] $
    Copy to Clipboard Toggle word wrap

    如果您跳过 PKCS #11 URI 的 id= 部分,则 OpenSSH 会加载代理模块中可用的所有密钥。这可减少输入所需的数量:

    $ ssh -i pkcs11: <ssh-server-example.com>
    Enter PIN for 'SSH key':
    [ssh-server-example.com] $
    Copy to Clipboard Toggle word wrap
  4. 可选:您可以使用 ~/.ssh/config 文件中的同一 URI 字符串使配置持久:

    $ cat ~/.ssh/config
    IdentityFile "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so"
    $ ssh <ssh-server-example.com>
    Enter PIN for 'SSH key':
    [ssh-server-example.com] $
    Copy to Clipboard Toggle word wrap

    ssh 客户端工具现在自动使用此 URI 和智能卡中的密钥。

23.2. 计划并使用 TLS

TLS(传输层安全)是用来保护网络通信的加密协议。在通过配置首选密钥交换协议、身份验证方法和加密算法来强化系统安全设置时,需要记住支持的客户端的范围越广,产生的安全性就越低。相反,严格的安全设置会导致与客户端的兼容性受限,这可能导致某些用户被锁定在系统之外。请确保以最严格的可用配置为目标,并且仅在出于兼容性原因需要时才放宽配置。

23.2.1. SSL 和 TLS 协议

安全套接字层(SSL)协议最初使由 Netscape 公司开发的,以提供一种在互联网上进行安全通信的机制。因此,该协议被互联网工程任务组(IETF)采纳,并重命名为传输层安全(TLS)。

TLS 协议位于应用协议层和可靠的传输层之间,例如 TCP/IP。它独立于应用程序协议,因此可在很多不同的协议下分层,例如:HTTP、FTP、SMTP 等。

Expand
协议版本用法建议

SSL v2

不要使用。具有严重的安全漏洞。从 RHEL 7 开始从核心加密库中删除了。

SSL v3

不要使用。具有严重的安全漏洞。从 RHEL 8 开始从核心加密库中删除了。

TLS 1.0

不建议使用。已知的无法以保证互操作性方式缓解的问题,且不支持现代密码套件。在 RHEL 8 中,只在 LEGACY 系统范围的加密策略配置集中启用。

TLS 1.1

在需要时用于互操作性.不支持现代加密套件。在 RHEL 8 中,只在 LEGACY 策略中启用。

TLS 1.2

支持现代 AEAD 密码组合。此版本在所有系统范围的加密策略中启用,但此协议的可选部分包含漏洞,TLS 1.2 也允许过时的算法。

TLS 1.3

推荐的版本。TLS 1.3 删除了已知有问题的选项,通过加密更多协商握手来提供额外的隐私,由于使用了更有效的现代加密算法,所以可以更快。TLS 1.3 也在所有系统范围的加密策略中启用了。

23.2.2. RHEL 8 中 TLS 的安全注意事项

在 RHEL 8 中,由于系统范围的加密策略,与加密相关的注意事项大大简化了。DEFAULT 加密策略只允许 TLS 1.2 和 1.3。要允许您的系统使用早期版本的 TLS 来协商连接,您需要选择不使用应用程序中的以下加密策略,或使用 update-crypto-policies 命令切换到 LEGACY 策略。如需更多信息,请参阅使用系统范围的加密策略

RHEL 8 中包含的库提供的默认设置足以满足大多数部署的需要。TLS 实现尽可能使用安全算法,而不阻止来自或到旧客户端或服务器的连接。在具有严格安全要求的环境中应用强化设置,在这些环境中,不支持安全算法或协议的旧客户端或服务器不应连接或不允许连接。

强化 TLS 配置的最简单方法是使用 update-crypto-policies --set FUTURE 命令将系统范围的加密策略级别切换到 FUTURE

警告

LEGACY 加密策略禁用的算法不符合红帽的 RHEL 8 安全愿景,其安全属性不可靠。考虑放弃使用这些算法,而不是重新启用它们。如果您确实决定重新启用它们(例如,为了与旧硬件的互操作性),请将它们视为不安全的,并应用额外的保护措施,例如将其网络交互隔离到单独的网络段。不要在公共网络中使用它们。

如果您决定不遵循 RHEL 系统范围的加密策略,或根据您的设置创建自定义的加密策略,请在自定义配置中对首选协议、密码套件和密钥长度使用以下建议:

23.2.2.1. 协议

TLS 的最新版本提供了最佳安全机制。除非有充分的理由包含对旧版本的 TLS 的支持,否则请允许您的系统使用至少 TLS 版本 1.2 来协商连接。

请注意,尽管 RHEL 8 支持 TLS 版本 1.3,但 RHEL 8 组件并不完全支持这个协议的所有功能。例如,Apache Web 服务器尚不完全支持可降低连接延迟的 0-RTT(Zero R Trip Time)功能。

23.2.2.2. 密码套件

现代、更安全的密码套件应该优先于旧的不安全密码套件。一直禁止 eNULL 和 aNULL 密码套件的使用,它们根本不提供任何加密或身份验证。如果有可能,基于 RC4 或 HMAC-MD5 的密码套件也必须被禁用。这同样适用于所谓的出口密码套件,它们被有意地弱化了,因此很容易被破解。

虽然不会立即变得不安全,但提供安全性少于 128 位的密码套件在它们的短使用期中不应该被考虑。使用 128 位或者更高安全性的算法可以预期在至少数年内不会被破坏,因此我们强烈推荐您使用此算法。请注意,虽然 3DES 密码公告使用 168 位但它们实际只提供了 112 位的安全性。

始终优先使用支持(完美)转发保密(PFS)的密码套件,这样可确保加密数据的机密性,以防服务器密钥被泄露。此规则排除了快速 RSA 密钥交换,但允许使用 ECDHE 和 DHE。在两者中,ECDHE 更快,因此是首选。

您还应该优先选择 AEAD 密码,如 AES-GCM,使用 CBC 模式密码,因为它们不容易受到 padding oracle 攻击的影响。此外,在很多情况下,在 CBC 模式下,AES-GCM 比 AES 快,特别是当硬件具有 AES 加密加速器时。

另请注意,在使用带有 ECDSA 证书的 ECDHE 密钥交换时,事务的速度甚至比纯 RSA 密钥交换要快。为了给旧客户端提供支持,您可以在服务器上安装两对证书和密钥:一对带有 ECDSA 密钥(用于新客户端),另一对带有 RSA 密钥(用于旧密钥)。

23.2.2.3. 公钥长度

在使用 RSA 密钥时,总是首选使用至少由 SHA-256 签名的 3072 位的密钥长度,对于真实的 128 位安全性来说,这个值已经足够大。

警告

您的系统安全性仅与链中最弱的连接相同。例如,只是一个强大的密码不能保证良好安全性。密钥和证书以及认证机构(CA)用来签署您的密钥的哈希功能和密钥同样重要。

23.2.3. 在应用程序中强化 TLS 配置

在 RHEL 中,系统范围的加密策略 提供了一种便捷的方法,来确保您的使用加密库的应用程序不允许已知的不安全协议、密码或算法。

如果要使用自定义加密设置来强化与 TLS 相关的配置,您可以使用本节中描述的加密配置选项,并以最少的需求量覆盖系统范围的加密策略。

无论您选择使用什么配置,请始终确保您的服务器应用程序强制实施 服务器端密码顺序,以便使用的密码套件由您配置的顺序来决定。

23.2.3.1. 将 Apache HTTP 服务器配置为使用 TLS

Apache HTTP 服务器 可以使用 OpenSSLNSS 库来满足其 TLS 的需求。RHEL 8 通过 eponymous 软件包提供 mod_ssl 功能:

# yum install mod_ssl
Copy to Clipboard Toggle word wrap

mod_ssl 软件包将安装 /etc/httpd/conf.d/ssl.conf 配置文件,该文件可用来修改 Apache HTTP 服务器 与 TLS 相关的设置。

安装 httpd-manual 软件包以获取 Apache HTTP 服务器 的完整文档,包括 TLS 配置。/etc/httpd/conf.d/ssl.conf 配置文件中的指令在 /usr/share/httpd/manual/mod_ssl.html 文件中详细介绍。/usr/share/httpd/manual/ssl/ssl/ssl_howto.html 文件中描述了各种设置的示例。

修改 /etc/httpd/conf.d/ssl.conf 配置文件中的设置时,请确保至少考虑以下三个指令:

SSLProtocol
使用这个指令指定您要允许的 TLS 或者 SSL 版本。
SSLCipherSuite
使用这个指令来指定您首选的密码套件或禁用您要禁止的密码套件。
SSLHonorCipherOrder
取消注释并将此指令设置为 on,以确保连接的客户端遵循您指定的密码顺序。

例如,只使用 TLS 1.2 和 1.3 协议:

SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
Copy to Clipboard Toggle word wrap

如需更多信息,请参阅 部署不同类型的服务器 文档中的 在 Apache HTTP 服务器上配置 TLS 加密 一章。

要在 Nginx 中启用 TLS 1.3 支持,请将 TLSv1.3 值添加到 /etc/nginx/nginx.conf 配置文件的 server 部分的 ssl_protocols 选项:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ....
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers
    ....
}
Copy to Clipboard Toggle word wrap

如需更多信息,请参阅 部署不同类型的服务器 文档中的 向 Nginx web 服务器添加 TLS 加密 一章。

23.2.3.3. 将 Dovecot 邮件服务器配置为使用 TLS

要将 Dovecot 邮件服务器的安装配置为使用 TLS,请修改 /etc/dovecot/conf.d/10-ssl.conf 配置文件。您可以在 /usr/share/doc/dovecot/wiki/SSL.DovecotConfiguration.txt 文件中找到一些基本配置指令的说明,该文件与 Dovecot 的标准安装一起安装。

修改 /etc/dovecot/conf.d/10-ssl.conf 配置文件中的设置时,请确保至少考虑以下三个指令:

ssl_protocols
使用这个指令指定您要允许或者禁用的 TLS 或者 SSL 版本。
ssl_cipher_list
使用这个指令指定您首选的密码套件或禁用您要禁止的密码套件。
ssl_prefer_server_ciphers
取消注释并将此指令设置为 yes,以确保连接的客户端遵循您指定的密码顺序。

例如,/etc/dovecot/conf.d/10-ssl.conf 中的以下行只允许 TLS 1.1 及之后的版本:

ssl_protocols = !SSLv2 !SSLv3 !TLSv1
Copy to Clipboard Toggle word wrap

23.3. 设置 IPsec VPN

虚拟专用网络(VPN)是一种通过互联网连接到本地网络的方法。Libreswan 提供的 IPsec 是创建 VPN 的首选方法。libreswan 是 VPN 的用户空间 IPsec 实现。VPN 通过在中间网络(如互联网)设置隧道来启用 LAN 和另一个远程 LAN 之间的通信。为了安全起见,VPN 隧道总是使用认证和加密。对于加密操作,Libreswan 使用 NSS 库。

23.3.1. libreswan 作为 IPsec VPN 的实现

在 RHEL 中,您可以使用 Libreswan 应用程序支持的 IPsec 协议配置虚拟专用网络(VPN)。Libreswan 是 Openswan 应用程序的延续,Openswan 文档中的许多示例可以通过 Libreswan 交换。

VPN 的 IPsec 协议使用互联网密钥交换(IKE)协议进行配置。术语 IPsec 和 IKE 可互换使用。IPsec VPN 也称为 IKE VPN、IKEv2 VPN、XAUTH VPN、Cisco VPN 或 IKE/IPsec VPN。IPsec VPN 变体,它使用 Level 2 Tunneling Protocol(L2TP),被称为 L2TP/IPsec VPN,它需要 optional 软件仓库提供的 xl2tpd 软件包。

libreswan 是一个开源用户空间 IKE 实现。IKE v1 和 v2 作为用户级别的守护进程实现。IKE 协议也加密。IPsec 协议由 Linux 内核实现,Libreswan 配置内核以添加和删除 VPN 隧道配置。

IKE 协议使用 UDP 端口 500 和 4500。IPsec 协议由两个协议组成:

  • 封装安全性 Payload(ESP),其协议号为 50。
  • 经过身份验证的标头(AH),其协议号为 51。

不建议使用 AH 协议。建议将 AH 用户迁移到使用 null 加密的 ESP。

IPsec 协议提供两种操作模式:

  • 隧道模式(默认)
  • 传输模式

您可以用没有 IKE 的 IPsec 来配置内核。这称为 手动键控。您还可以使用 ip xfrm 命令来配置手动密钥,但为了安全起见,强烈建议您不要这样做。Libreswan 使用 Netlink 接口与 Linux 内核进行通信。内核执行数据包加密和解密。

Libreswan 使用网络安全服务 (NSS) 加密库。NSS 认证用于 联邦信息处理标准( FIPS)出版物 140-2。

重要

IKE/IPsec VPN(由 Libreswan 和 Linux 内核实现)是 RHEL 中推荐的唯一 VPN 技术。在不了解这样做风险的情况下不要使用任何其他 VPN 技术。

在 RHEL 中,Libreswan 默认遵循系统范围的加密策略。这样可确保 Libreswan 将当前威胁模型包括(IKEv2)的安全设置用作默认协议。如需更多信息,请参阅 使用系统范围的加密策略

Libreswan 没有使用术语"源(source)"和"目的地(destination)"或"服务器(server)"和"客户端(client)",因为 IKE/IPsec 使用对等(peer to peer)协议。相反,它使用术语"左"和"右"来指端点(主机)。这也允许您在大多数情况下在两个端点使用相同的配置。但是,管理员通常选择始终对本地主机使用"左",对远程主机使用"右"。

leftidrightid 选项充当身份验证过程中相应主机的标识。详情请查看 ipsec.conf(5) 手册页。

23.3.2. Libreswan 中的身份验证方法

Libreswan 支持多种身份验证方法,每种方法适合不同的场景。

预共享密钥(PSK)

预共享密钥 (PSK)是最简单的身份验证方法。出于安全考虑,请勿使用小于 64 个随机字符的 PSK。在 FIPS 模式中,PSK 必须符合最低强度要求,具体取决于所使用的完整性算法。您可以使用 authby=secret 连接来设置 PSK。

原始 RSA 密钥

原始 RSA 密钥 通常用于静态主机到主机或子网到子网 IPsec 配置。每个主机都使用所有其他主机的公共 RSA 密钥手动配置,Libreswan 在每对主机之间建立 IPsec 隧道。对于大量主机,这个方法不能很好地扩展。

您可以使用 ipsec newhostkey 命令在主机上生成原始 RSA 密钥。您可以使用 ipsec showhostkey 命令列出生成的密钥。使用 CKA ID 密钥的连接配置需要 leftrsasigkey= 行。原始 RSA 密钥使用 authby=rsasig 连接选项。

X.509 证书

X.509 证书 通常用于大规模部署连接到通用 IPsec 网关的主机。中心 证书颁发机构 (CA)为主机或用户签署 RSA 证书。此中央 CA 负责中继信任,包括单个主机或用户的撤销。

例如,您可以使用 openssl 命令和 NSS certutil 命令来生成 X.509 证书。因为 Libreswan 使用 leftcert= 配置选项中证书的昵称从 NSS 数据库读取用户证书,所以在创建证书时请提供昵称。

如果使用自定义 CA 证书,则必须将其导入到网络安全服务(NSS)数据库中。您可以使用 ipsec import 命令将 PKCS #12 格式的任何证书导入到 Libreswan NSS 数据库。

警告

Libreswan 需要互联网密钥交换(IKE)对等 ID 作为每个对等证书的主题替代名称(SAN),如 RFC 4945 的 3.1 章节 所述。通过设置 require-id-on-certificate=no connection 选项禁用此检查,可能会导致系统容易受到中间人攻击。

使用 authby=rsasig 连接选项,根据使用带 SHA-1 和 SHA-2 的 RSA 的 X.509 证书进行身份验证。您可以通过将 authby= 设为 ecdsa ,使用 SHA-2 ,以及使用通过 authby=rsa-sha2 的基于 SHA-2 的身份验证的 RSA 概率签名方案(RSASSA-PSS)数字签名来进一步限制 ECDSA 数字签名。默认值为 authby=rsasig,ecdsa

证书和 authby= 签名方法应匹配。这提高了互操作性,并在一个数字签名系统中保留身份验证。

NULL 身份验证

NULL 身份验证 用来在没有身份验证的情况下获得网状加密。它可防止被动攻击,但不能防止主动攻击。但是,因为 IKEv2 允许非对称身份验证方法,因此 NULL 身份验证也可用于互联网规模的机会主义 IPsec。在此模型中,客户端对服务器进行身份验证,但服务器不对客户端进行身份验证。此模型类似于使用 TLS 的安全网站。使用 authby=null 进行 NULL 身份验证。

保护量子计算机

除了上述身份验证方法外,您还可以使用 Post-quantum Pre-shared Key (PPK)方法来防止量子计算机可能的攻击。单个客户端或客户端组可以通过指定与带外配置的预共享密钥对应的 PPK ID 来使用它们自己的 PPK。

使用带有预共享密钥的 IKEv1 防止量子攻击者。重新设计 IKEv2 不会原生提供这种保护。Libreswan 提供使用 Post-quantum Pre-shared Key (PPK)来保护 IKEv2 连接免受量子攻击。

要启用可选的 PPK 支持,请在连接定义中添加 ppk=yes。如需要 PPK,请添加 ppk=insist。然后,可以给每个客户端一个带有 secret 值的 PPK ID ,该 secret 值在带外进行通信(最好是量子安全的)。PPK 应该具有很强的随机性,而不是基于字典中的单词。PPK ID 和 PPK 数据保存在 ipsec.secrets 文件中,例如:

@west @east : PPKS "user1" "thestringismeanttobearandomstr"
Copy to Clipboard Toggle word wrap

PPKS 选项指的是静态 PPK。这个实验性功能使用基于一次性平板的动态 PPK。在每个连接中,一次性平板的一个新部件用作 PPK。当使用时,文件中动态 PPK 的那部分被零覆盖,以防止重复使用。如果没有剩下一次性资源,连接会失败。详情请查看 ipsec.secrets(5) 手册页。

警告

动态 PPK 的实现是作为不受支持的技术预览提供的。请谨慎使用。

23.3.3. 安装 Libreswan

在通过 Libreswan IPsec/IKE 实现设置 VPN 之前,您必须安装相应的软件包,启动 ipsec 服务,并在防火墙中允许服务。

先决条件

  • AppStream存储库已启用。

流程

  1. 安装 libreswan 软件包:

    # yum install libreswan
    Copy to Clipboard Toggle word wrap
  2. 如果要重新安装 Libreswan,请删除其旧的数据库文件,并创建一个新的数据库:

    # systemctl stop ipsec
    # rm /etc/ipsec.d/*db
    # ipsec initnss
    Copy to Clipboard Toggle word wrap
  3. 启动 ipsec 服务,并启用该服务,以便其在引导时自动启动:

    # systemctl enable ipsec --now
    Copy to Clipboard Toggle word wrap
  4. 通过添加 ipsec 服务,将防火墙配置为允许 IKE、ESP 和 AH 协议的 500 和 4500/UDP 端口:

    # firewall-cmd --add-service="ipsec"
    # firewall-cmd --runtime-to-permanent
    Copy to Clipboard Toggle word wrap

23.3.4. 创建主机到主机的 VPN

您可以使用原始 RSA 密钥身份验证将 Libreswan 配置为在两个称为 leftright 的主机之间创建主机到主机的 IPsec VPN。

先决条件

  • Libreswan 已安装 ,并在每个节点上启动了 ipsec 服务。

流程

  1. 在每台主机上生成原始 RSA 密钥对:

    # ipsec newhostkey
    Copy to Clipboard Toggle word wrap
  2. 上一步返回生成的密钥的 ckaid。在 主机上使用 ckaid 和以下命令,例如:

    # ipsec showhostkey --left --ckaid 2d3ea57b61c9419dfd6cf43a1eb6cb306c0e857d
    Copy to Clipboard Toggle word wrap

    上一命令的输出生成了配置所需的 leftrsasigkey= 行。在第二台主机()上执行相同的操作:

    # ipsec showhostkey --right --ckaid a9e1f6ce9ecd3608c24e8f701318383f41798f03
    Copy to Clipboard Toggle word wrap
  3. /etc/ipsec.d/ 目录中,创建一个新的 my_host-to-host.conf 文件。将上一步中 ipsec showhostkey 命令的输出中的 RSA 主机密钥写入新文件。例如:

    conn mytunnel
        leftid=@west
        left=192.1.2.23
        leftrsasigkey=0sAQOrlo+hOafUZDlCQmXFrje/oZm [...] W2n417C/4urYHQkCvuIQ==
        rightid=@east
        right=192.1.2.45
        rightrsasigkey=0sAQO3fwC6nSSGgt64DWiYZzuHbc4 [...] D/v8t5YTQ==
        authby=rsasig
    Copy to Clipboard Toggle word wrap
  4. 导入密钥后,重启 ipsec 服务:

    # systemctl restart ipsec
    Copy to Clipboard Toggle word wrap
  5. 加载连接:

    # ipsec auto --add mytunnel
    Copy to Clipboard Toggle word wrap
  6. 建立隧道:

    # ipsec auto --up mytunnel
    Copy to Clipboard Toggle word wrap
  7. 要在 ipsec 服务启动时自动启动隧道,请在连接定义中添加以下行:

    auto=start
    Copy to Clipboard Toggle word wrap
  8. 如果您在带有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能会受到重定向的影响。有关详情和缓解步骤,请参阅将 VPN 连接分配给专用路由表,以防止连接绕过隧道

23.3.5. 配置站点到站点的 VPN

要创建站点到站点的 IPsec VPN,通过加入两个网络,在两个主机之间创建一个 IPsec 隧道。主机因此充当端点,它们配置为允许来自一个或多个子网的流量通过。因此您可以将主机视为到网络远程部分的网关。

站点到站点 VPN 的配置只能与主机到主机 VPN 不同,同时必须在配置文件中指定一个或多个网络或子网。

先决条件

流程

  1. 将带有主机到主机 VPN 配置的文件复制到新文件中,例如:

    # cp /etc/ipsec.d/my_host-to-host.conf /etc/ipsec.d/my_site-to-site.conf
    Copy to Clipboard Toggle word wrap
  2. 在上一步创建的文件中添加子网配置,例如:

    conn mysubnet
         also=mytunnel
         leftsubnet=192.0.1.0/24
         rightsubnet=192.0.2.0/24
         auto=start
    
    conn mysubnet6
         also=mytunnel
         leftsubnet=2001:db8:0:1::/64
         rightsubnet=2001:db8:0:2::/64
         auto=start
    
    # the following part of the configuration file is the same for both host-to-host and site-to-site connections:
    
    conn mytunnel
        leftid=@west
        left=192.1.2.23
        leftrsasigkey=0sAQOrlo+hOafUZDlCQmXFrje/oZm [...] W2n417C/4urYHQkCvuIQ==
        rightid=@east
        right=192.1.2.45
        rightrsasigkey=0sAQO3fwC6nSSGgt64DWiYZzuHbc4 [...] D/v8t5YTQ==
        authby=rsasig
    Copy to Clipboard Toggle word wrap
  3. 如果您在带有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能会受到重定向的影响。有关详情和缓解步骤,请参阅将 VPN 连接分配给专用路由表,以防止连接绕过隧道

23.3.6. 配置远程访问 VPN

公路勇士是指拥有移动客户端和动态分配的 IP 地址的旅行用户。移动客户端使用 X.509 证书进行身份验证。

以下示例显示了 IKEv2 的配置,并且避免使用 IKEv1 XAUTH 协议。

在服务器中:

conn roadwarriors
    ikev2=insist
    # support (roaming) MOBIKE clients (RFC 4555)
    mobike=yes
    fragmentation=yes
    left=1.2.3.4
    # if access to the LAN is given, enable this, otherwise use 0.0.0.0/0
    # leftsubnet=10.10.0.0/16
    leftsubnet=0.0.0.0/0
    leftcert=gw.example.com
    leftid=%fromcert
    leftxauthserver=yes
    leftmodecfgserver=yes
    right=%any
    # trust our own Certificate Agency
    rightca=%same
    # pick an IP address pool to assign to remote users
    # 100.64.0.0/16 prevents RFC1918 clashes when remote users are behind NAT
    rightaddresspool=100.64.13.100-100.64.13.254
    # if you want remote clients to use some local DNS zones and servers
    modecfgdns="1.2.3.4, 5.6.7.8"
    modecfgdomains="internal.company.com, corp"
    rightxauthclient=yes
    rightmodecfgclient=yes
    authby=rsasig
    # optionally, run the client X.509 ID through pam to allow or deny client
    # pam-authorize=yes
    # load connection, do not initiate
    auto=add
    # kill vanished roadwarriors
    dpddelay=1m
    dpdtimeout=5m
    dpdaction=clear
Copy to Clipboard Toggle word wrap

在移动客户端(即 road warrior 的设备)上,使用与之前配置稍有不同的配置:

conn to-vpn-server
    ikev2=insist
    # pick up our dynamic IP
    left=%defaultroute
    leftsubnet=0.0.0.0/0
    leftcert=myname.example.com
    leftid=%fromcert
    leftmodecfgclient=yes
    # right can also be a DNS hostname
    right=1.2.3.4
    # if access to the remote LAN is required, enable this, otherwise use 0.0.0.0/0
    # rightsubnet=10.10.0.0/16
    rightsubnet=0.0.0.0/0
    fragmentation=yes
    # trust our own Certificate Agency
    rightca=%same
    authby=rsasig
    # allow narrowing to the server’s suggested assigned IP and remote subnet
    narrowing=yes
    # support (roaming) MOBIKE clients (RFC 4555)
    mobike=yes
    # initiate connection
    auto=start
Copy to Clipboard Toggle word wrap
注意

如果您在带有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能会受到重定向的影响。有关详情和缓解步骤,请参阅将 VPN 连接分配给专用路由表,以防止连接绕过隧道

23.3.7. 配置网格 VPN

网格 VPN 网络(也称为 any-to-any VPN ) 是一个所有节点都使用 IPsec 进行通信的网络。该配置可以对于无法使用 IPsec 的节点进行例外处理。可使用两种方式配置网格 VPN 网络:

  • 需要 IPsec。
  • 首选 IPsec,但允许回退到使用明文通信。

节点之间的身份验证可以基于 X.509 证书或 DNS 安全扩展(DNSSEC)。

您对 opportunistic IPsec 使用任何常规的 IKEv2 验证方法,因为这些连接是常规的 Libreswan 配置,除了由 right=%opportunisticgroup 条目定义的 opportunistic IPsec 之外。常见的身份验证方法是主机使用常用共享认证机构(CA)根据 X.509 证书进行互相验证。作为标准流程的一部分,云部署通常为云中的每个节点发布证书。

重要

不要使用 PreSharedKey (PSK)身份验证,因为一个有危险的主机会导致组 PSK secret 也有危险。

您可以使用 NULL 身份验证在节点间部署加密,而无需认证,这只防止被动攻击者。

以下流程使用 X.509 证书。您可以使用任何类型的 CA 管理系统(如 Dogtag 证书系统)生成这些证书。Dogtag 假设每个节点的证书都以 PKCS #12 格式(.p12 文件)提供,其包含私钥、节点证书和用于验证其他节点的 X.509 证书的根 CA 证书。

每个节点的配置与其 X.509 证书不同。这允许在不重新配置网络中的任何现有节点的情况下添加新节点。PKCS #12 文件需要一个"友好名称",为此,我们使用名称"节点",这样引用友好名称的配置文件对所有节点都是相同的。

先决条件

  • Libreswan 已安装 ,并在每个节点上启动了 ipsec 服务。
  • 一个新的 NSS 数据库已初始化。

    1. 如果您已经有一个旧的 NSS 数据库,请删除旧的数据库文件:

      # systemctl stop ipsec
      # rm /etc/ipsec.d/*db
      Copy to Clipboard Toggle word wrap
    2. 您可以使用以下命令初始化新数据库:

      # ipsec initnss
      Copy to Clipboard Toggle word wrap

流程

  1. 在每个节点中导入 PKCS #12 文件。此步骤需要用于生成 PKCS #12 文件的密码:

    # ipsec import nodeXXX.p12
    Copy to Clipboard Toggle word wrap
  2. IPsec 需要的(专用)、IPsec 可选的 (private-or-clear)和 No IPsec (clear)配置文件创建以下三个连接定义:

    # cat /etc/ipsec.d/mesh.conf
    conn clear
    	auto=ondemand 
    1
    
    	type=passthrough
    	authby=never
    	left=%defaultroute
    	right=%group
    
    conn private
    	auto=ondemand
    	type=transport
    	authby=rsasig
    	failureshunt=drop
    	negotiationshunt=drop
    	ikev2=insist
    	left=%defaultroute
    	leftcert=nodeXXXX
    	leftid=%fromcert 
    2
    
    	rightid=%fromcert
    	right=%opportunisticgroup
    
    conn private-or-clear
    	auto=ondemand
    	type=transport
    	authby=rsasig
    	failureshunt=passthrough
    	negotiationshunt=passthrough
    	# left
    	left=%defaultroute
    	leftcert=nodeXXXX 
    3
    
    	leftid=%fromcert
    	leftrsasigkey=%cert
    	# right
    	rightrsasigkey=%cert
    	rightid=%fromcert
    	right=%opportunisticgroup
    Copy to Clipboard Toggle word wrap
    1
    auto 变量有几个选项:

    您可以使用带有 opportunistic IPsec 的 ondemand 连接选项来启动 IPsec 连接,或者用于显式配置不需要一直激活的连接。这个选项在内核中建立一个陷阱 XFRM 策略,使 IPsec 连接在收到与该策略匹配的第一个数据包时开始。

    您可以使用以下选项有效地配置和管理 IPsec 连接,无论是使用 Opportunistic IPsec 还是明确配置的连接:

    add 选项
    加载连接配置,并为响应远程启动做好准备。但是,连接不会自动从本地端启动。您可以使用 ipsec auto --up 命令手动启动 IPsec 连接。
    start 选项
    加载连接配置,并为响应远程启动做好准备。此外,它会立即启动到远程对等点的连接。您可以将这个选项用于永久的和一直活跃的连接。
    2
    leftidrightid 变量标识 IPsec 隧道连接的右和左通道。如果您配置了证书,您可以使用这些变量来获取本地 IP 地址或本地证书的主题 DN 的值。
    3
    leftcert 变量定义您要使用的 NSS 数据库的昵称。
  3. 将网络的 IP 地址添加到对应的类中。例如,如果所有节点都位于 10.15.0.0/16 网络中,则所有节点都必须使用 IPsec 加密:

    # echo "10.15.0.0/16" >> /etc/ipsec.d/policies/private
    Copy to Clipboard Toggle word wrap
  4. 要允许某些节点(如 10.15.34.0/24 )使用或不使用 IPsec,请将这些节点添加到 private-or-clear 组中:

    # echo "10.15.34.0/24" >> /etc/ipsec.d/policies/private-or-clear
    Copy to Clipboard Toggle word wrap
  5. 要定义一个主机(如 10.15.1.2 ),其不能将 IPsec 添加到 clear 组中,请使用:

    # echo "10.15.1.2/32" >> /etc/ipsec.d/policies/clear
    Copy to Clipboard Toggle word wrap

    您可以在 /etc/ipsec.d/policies 目录中从每个新节点的模板创建文件,也可以使用 Puppet 或 Ansible 来置备它们。

    请注意,每个节点都有相同的异常列表或不同的流量预期。因此,两个节点可能无法通信,因为一个节点需要 IPsec,而另一个节点无法使用 IPsec。

  6. 重启节点将其添加到配置的网格中:

    # systemctl restart ipsec
    Copy to Clipboard Toggle word wrap
  7. 如果您在带有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能会受到重定向的影响。有关详情和缓解步骤,请参阅将 VPN 连接分配给专用路由表,以防止连接绕过隧道

验证

  1. 使用 ping 命令打开 IPsec 隧道:

    # ping <nodeYYY>
    Copy to Clipboard Toggle word wrap
  2. 显示带有导入认证的 NSS 数据库:

    # certutil -L -d sql:/etc/ipsec.d
    
    Certificate Nickname    Trust Attributes
                            SSL,S/MIME,JAR/XPI
    
    west                    u,u,u
    ca                      CT,,
    Copy to Clipboard Toggle word wrap
  3. 查看节点上哪个隧道打开了:

    # ipsec trafficstatus
    006 #2: "private#10.15.0.0/16"[1] ...<nodeYYY>, type=ESP, add_time=1691399301, inBytes=512, outBytes=512, maxBytes=2^63B, id='C=US, ST=NC, O=Example Organization, CN=east'
    Copy to Clipboard Toggle word wrap

23.3.8. 部署符合 FIPS 的 IPsec VPN

您可以使用 Libreswan 部署一个符合 FIPS 的 IPsec VPN 解决方案。为此,您可以识别哪些加密算法可用,且哪些在 FIPS 模式下对 Libreswan 禁用了。

先决条件

  • AppStream存储库已启用。

流程

  1. 安装 libreswan 软件包:

    # yum install libreswan
    Copy to Clipboard Toggle word wrap
  2. 如果您要重新安装 Libreswan,请删除其旧的 NSS 数据库:

    # systemctl stop ipsec
    # rm /etc/ipsec.d/*db
    Copy to Clipboard Toggle word wrap
  3. 启动 ipsec 服务,并启用该服务,以便其在引导时自动启动:

    # systemctl enable ipsec --now
    Copy to Clipboard Toggle word wrap
  4. 通过添加 ipsec 服务,将防火墙配置为允许 IKE、ESP 和 AH 协议的 5004500 UDP 端口:

    # firewall-cmd --add-service="ipsec"
    # firewall-cmd --runtime-to-permanent
    Copy to Clipboard Toggle word wrap
  5. 将系统切换到 FIPS 模式:

    # fips-mode-setup --enable
    Copy to Clipboard Toggle word wrap
  6. 重启您的系统以允许内核切换到 FIPS 模式:

    # reboot
    Copy to Clipboard Toggle word wrap

验证

  1. 确认 Libreswan 是否在 FIPS 模式下运行:

    # ipsec whack --fipsstatus
    000 FIPS mode enabled
    Copy to Clipboard Toggle word wrap
  2. 或者,检查 systemd 日志中的 ipsec 单元条目:

    $ journalctl -u ipsec
    ...
    Jan 22 11:26:50 localhost.localdomain pluto[3076]: FIPS Product: YES
    Jan 22 11:26:50 localhost.localdomain pluto[3076]: FIPS Kernel: YES
    Jan 22 11:26:50 localhost.localdomain pluto[3076]: FIPS Mode: YES
    Copy to Clipboard Toggle word wrap
  3. 以 FIPS 模式查看可用算法:

    # ipsec pluto --selftest 2>&1 | head -11
    FIPS Product: YES
    FIPS Kernel: YES
    FIPS Mode: YES
    NSS DB directory: sql:/etc/ipsec.d
    Initializing NSS
    Opening NSS database "sql:/etc/ipsec.d" read-only
    NSS initialized
    NSS crypto library initialized
    FIPS HMAC integrity support [enabled]
    FIPS mode enabled for pluto daemon
    NSS library is running in FIPS mode
    FIPS HMAC integrity verification self-test passed
    Copy to Clipboard Toggle word wrap
  4. 使用 FIPS 模式查询禁用的算法:

    # ipsec pluto --selftest 2>&1 | grep disabled
    Encryption algorithm CAMELLIA_CTR disabled; not FIPS compliant
    Encryption algorithm CAMELLIA_CBC disabled; not FIPS compliant
    Encryption algorithm SERPENT_CBC disabled; not FIPS compliant
    Encryption algorithm TWOFISH_CBC disabled; not FIPS compliant
    Encryption algorithm TWOFISH_SSH disabled; not FIPS compliant
    Encryption algorithm NULL disabled; not FIPS compliant
    Encryption algorithm CHACHA20_POLY1305 disabled; not FIPS compliant
    Hash algorithm MD5 disabled; not FIPS compliant
    PRF algorithm HMAC_MD5 disabled; not FIPS compliant
    PRF algorithm AES_XCBC disabled; not FIPS compliant
    Integrity algorithm HMAC_MD5_96 disabled; not FIPS compliant
    Integrity algorithm HMAC_SHA2_256_TRUNCBUG disabled; not FIPS compliant
    Integrity algorithm AES_XCBC_96 disabled; not FIPS compliant
    DH algorithm MODP1024 disabled; not FIPS compliant
    DH algorithm MODP1536 disabled; not FIPS compliant
    DH algorithm DH31 disabled; not FIPS compliant
    Copy to Clipboard Toggle word wrap
  5. 在 FIPS 模式中列出所有允许的算法和密码:

    # ipsec pluto --selftest 2>&1 | grep ESP | grep FIPS | sed "s/^.*FIPS//"
    {256,192,*128}  aes_ccm, aes_ccm_c
    {256,192,*128}  aes_ccm_b
    {256,192,*128}  aes_ccm_a
    [*192]  3des
    {256,192,*128}  aes_gcm, aes_gcm_c
    {256,192,*128}  aes_gcm_b
    {256,192,*128}  aes_gcm_a
    {256,192,*128}  aesctr
    {256,192,*128}  aes
    {256,192,*128}  aes_gmac
    sha, sha1, sha1_96, hmac_sha1
    sha512, sha2_512, sha2_512_256, hmac_sha2_512
    sha384, sha2_384, sha2_384_192, hmac_sha2_384
    sha2, sha256, sha2_256, sha2_256_128, hmac_sha2_256
    aes_cmac
    null
    null, dh0
    dh14
    dh15
    dh16
    dh17
    dh18
    ecp_256, ecp256
    ecp_384, ecp384
    ecp_521, ecp521
    Copy to Clipboard Toggle word wrap

23.3.9. 使用密码保护 IPsec NSS 数据库

默认情况下,IPsec 服务在第一次启动时使用空密码创建其网络安全服务(NSS)数据库。要提高安全性,您可以添加密码保护。

注意

在 RHEL 6.6 和之前的版本中,您必须使用一个密码来保护 IPsec NSS 数据库,以满足 FIPS 140-2 标准的要求,因为 NSS 加密库是针对 FIPS 140-2 Level 2 标准认证的。在 RHEL 8 中,NIS 将 NSS 认证为该标准级别 1,并且该状态不需要对数据库进行密码保护。

先决条件

  • /etc/ipsec.d/ 目录包含 NSS 数据库文件。

流程

  1. 为 Libreswan 的 NSS 数据库启用密码保护:

    # certutil -N -d sql:/etc/ipsec.d
    Enter Password or Pin for "NSS Certificate DB":
    Enter a password which will be used to encrypt your keys.
    The password should be at least 8 characters long,
    and should contain at least one non-alphabetic character.
    
    Enter new password:
    Copy to Clipboard Toggle word wrap
  2. 创建包含您在上一步中设置的密码的 /etc/ipsec.d/nsspassword 文件,例如:

    # cat /etc/ipsec.d/nsspassword
    NSS Certificate DB:_<password>_
    Copy to Clipboard Toggle word wrap

    nsspassword 文件使用以下语法:

    <token_1>:<password1>
    <token_2>:<password2>
    Copy to Clipboard Toggle word wrap

    默认的 NSS 软件令牌是 NSS 证书 数据库。如果您的系统以 FIPS 模式运行,则令牌的名称为 NSS FIPS 140-2 证书数据库

  3. 根据您的场景,在完成了 nsspassword 文件后,启动或重启 ipsec 服务:

    # systemctl restart ipsec
    Copy to Clipboard Toggle word wrap

验证

  1. 在其 NSS 数据库中添加非空密码后,检查 ipsec 服务是否运行:

    # systemctl status ipsec
    ● ipsec.service - Internet Key Exchange (IKE) Protocol Daemon for IPsec
       Loaded: loaded (/usr/lib/systemd/system/ipsec.service; enabled; vendor preset: disable>
       Active: active (running)...
    Copy to Clipboard Toggle word wrap
  2. 检查 Journal 日志是否包含确认成功初始化的条目:

    # journalctl -u ipsec
    ...
    pluto[6214]: Initializing NSS using read-write database "sql:/etc/ipsec.d"
    pluto[6214]: NSS Password from file "/etc/ipsec.d/nsspassword" for token "NSS Certificate DB" with length 20 passed to NSS
    pluto[6214]: NSS crypto library initialized
    ...
    Copy to Clipboard Toggle word wrap

23.3.10. 配置 IPsec VPN 以使用 TCP

Libreswan 支持 IKE 和 IPsec 数据包的 TCP 封装,如 RFC 8229 所述。有了这个功能,您可以在网络上建立 IPsec VPN,以防止通过 UDP 和封装安全负载(ESP)传输的流量。您可以将 VPN 服务器和客户端配置为使用 TCP 作为回退,或者作为主 VPN 传输协议。由于 TCP 封装的性能成本较高,因此只有在您的场景中需要永久阻止 UDP 时,才使用 TCP 作为主 VPN 协议。

先决条件

流程

  1. /etc/ipsec.conf 文件的 config setup 部分中添加以下选项:

    listen-tcp=yes
    Copy to Clipboard Toggle word wrap
  2. 要在第一次尝试 UDP 失败时使用 TCP 封装作为回退选项,请在客户端的连接定义中添加以下两个选项:

    enable-tcp=fallback
    tcp-remoteport=4500
    Copy to Clipboard Toggle word wrap

    另外,如果您知道 UDP 会被永久阻止,请在客户端的连接配置中使用以下选项:

    enable-tcp=yes
    tcp-remoteport=4500
    Copy to Clipboard Toggle word wrap

卸载硬件的封装安全负载(ESP)来加速以太网上的 IPsec 连接。默认情况下,Libreswan 会检测硬件是否支持这个功能,并因此启用 ESP 硬件卸载。如果这个功能被禁用或被明确启用,您可以切回到自动检测。

先决条件

  • 网卡支持 ESP 硬件卸载。
  • 网络驱动程序支持 ESP 硬件卸载。
  • IPsec 连接已配置且可以正常工作。

流程

  1. 编辑连接的 /etc/ipsec.d/ 目录中的 Libreswan 配置文件,该文件应使用 ESP 硬件卸载支持的自动检测。
  2. 确保连接的设置中没有设置 nic-offload 参数。
  3. 如果您删除了 nic-offload,请重启 ipsec 服务:

    # systemctl restart ipsec
    Copy to Clipboard Toggle word wrap

验证

  1. 显示 IPsec 连接使用的以太网设备的 tx_ipsecrx_ipsec 计数器:

    # ethtool -S enp1s0 | grep -E "_ipsec"
         tx_ipsec: 10
         rx_ipsec: 10
    Copy to Clipboard Toggle word wrap
  2. 通过 IPsec 隧道发送流量。例如,ping 远程 IP 地址:

    # ping -c 5 remote_ip_address
    Copy to Clipboard Toggle word wrap
  3. 再次显示以太网设备的 tx_ipsecrx_ipsec 计数器:

    # ethtool -S enp1s0 | grep -E "_ipsec"
         tx_ipsec: 15
         rx_ipsec: 15
    Copy to Clipboard Toggle word wrap

    如果计数器值增加了,ESP 硬件卸载正常工作。

将封装安全负载(ESP)卸载到硬件可加速 IPsec 连接。如果出于故障转移原因而使用网络绑定,配置 ESP 硬件卸载的要求和流程与使用常规以太网设备的要求和流程不同。例如,在这种情况下,您可以对绑定启用卸载支持,内核会将设置应用到绑定的端口。

先决条件

  • 绑定中的所有网卡都支持 ESP 硬件卸载。使用 ethtool -k <interface_name> | grep "esp-hw-offload" 命令验证每个绑定端口是否都支持此功能。
  • 绑定已配置且可以正常工作。
  • 该绑定使用 active-backup 模式。绑定驱动程序不支持此功能的任何其他模式。
  • IPsec 连接已配置且可以正常工作。

流程

  1. 对网络绑定启用 ESP 硬件卸载支持:

    # nmcli connection modify bond0 ethtool.feature-esp-hw-offload on
    Copy to Clipboard Toggle word wrap

    这个命令在对 bond0 连接启用 ESP 硬件卸载支持。

  2. 重新激活 bond0 连接:

    # nmcli connection up bond0
    Copy to Clipboard Toggle word wrap
  3. 编辑应使用 ESP 硬件卸载的连接的 /etc/ipsec.d/ 目录中的 Libreswan 配置文件,并将 nic-offload=yes 语句附加到连接条目:

    conn example
        ...
        nic-offload=yes
    Copy to Clipboard Toggle word wrap
  4. 重启 ipsec 服务:

    # systemctl restart ipsec
    Copy to Clipboard Toggle word wrap

验证

验证方法取决于各种方面,如内核版本和驱动程序。例如,某些驱动程序提供计数器,但它们的名称可能会有所不同。详情请查看您的网络驱动程序的文档。

以下验证步骤适用于 Red Hat Enterprise Linux 8 上的 ixgbe 驱动程序:

  1. 显示绑定的活动端口:

    # grep "Currently Active Slave" /proc/net/bonding/bond0
    Currently Active Slave: enp1s0
    Copy to Clipboard Toggle word wrap
  2. 显示活动端口的 tx_ipsecrx_ipsec 计数器:

    # ethtool -S enp1s0 | grep -E "_ipsec"
         tx_ipsec: 10
         rx_ipsec: 10
    Copy to Clipboard Toggle word wrap
  3. 通过 IPsec 隧道发送流量。例如,ping 远程 IP 地址:

    # ping -c 5 remote_ip_address
    Copy to Clipboard Toggle word wrap
  4. 再次显示活动端口的 tx_ipsecrx_ipsec 计数器:

    # ethtool -S enp1s0 | grep -E "_ipsec"
         tx_ipsec: 15
         rx_ipsec: 15
    Copy to Clipboard Toggle word wrap

    如果计数器值增加了,ESP 硬件卸载正常工作。

23.3.13. 使用 RHEL 系统角色配置 VPN 连接

VPN 是一个加密连接,用于通过不受信任的网络安全地传输流量。通过使用 vpn RHEL 系统角色,您可以自动化创建 VPN 配置的过程。

注意

vpn RHEL 系统角色只支持 Libreswan (它是一个 IPsec 实现,作为 VPN 提供商)。

您可以使用 IPsec ,通过 VPN 直接将主机互联。主机可以使用预共享密钥(PSK)进行相互验证。通过使用 vpn RHEL 系统角色,您可以自动化创建带有 PSK 身份验证的 IPsec 主机到主机连接的过程。

默认情况下,角色创建一个基于隧道的 VPN。

先决条件

流程

  1. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    ---
    - name: Configuring VPN
      hosts: managed-node-01.example.com, managed-node-02.example.com
      tasks:
        - name: IPsec VPN with PSK authentication
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.vpn
          vars:
            vpn_connections:
              - hosts:
                  managed-node-01.example.com:
                  managed-node-02.example.com:
                auth_method: psk
                auto: start
            vpn_manage_firewall: true
            vpn_manage_selinux: true
    Copy to Clipboard Toggle word wrap

    示例 playbook 中指定的设置包括如下:

    hosts: <list>

    定义一个 YAML 字典,其中包含您想要在它们之间配置 VPN 的主机。如果条目不是一个 Ansible 管理的节点,则您必须在 hostname 参数中指定其完全限定域名(FQDN)或 IP 地址,例如:

              ...
              - hosts:
                  ...
                  external-host.example.com:
                    hostname: 192.0.2.1
    Copy to Clipboard Toggle word wrap

    角色在每个受管节点上配置 VPN 连接。连接被命名为 <host_A>-to-<host_B>,例如 managed-node-01.example.com-to-managed-node-02.example.com。请注意,角色不能在外部(未管理的)节点上配置 Libreswan。您必须在这些主机上手动创建配置。

    auth_method: psk
    在主机之间启用 PSK 身份验证。角色在控制节点上使用 openssl 来创建 PSK。
    auto: <start-up_method>
    指定连接的启动方法。有效值是 addondemandstartignore。详情请查看安装了 Libreswan 的系统上的 ipsec.conf (5) 手册页。此变量的默认值为 null,这意味着没有自动启动操作。
    vpn_manage_firewall: true
    定义角色在受管节点上的 firewalld 服务中打开所需的端口。
    vpn_manage_selinux: true
    定义角色在 IPsec 端口上设置所需的 SELinux 端口类型。

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.vpn/README.md 文件。

  2. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    请注意,这个命令只验证语法,不能防止错误的、但有效的配置。

  3. 运行 playbook:

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

验证

  • 确认连接已成功启动,例如:

    # ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "managed-node-01.example.com-to-managed-node-02.example.com"'
    ...
    006 #3: "managed-node-01.example.com-to-managed-node-02.example.com", type=ESP, add_time=1741857153, inBytes=38622, outBytes=324626, maxBytes=2^63B, id='@managed-node-02.example.com'
    Copy to Clipboard Toggle word wrap

    请注意,只有在 VPN 连接活跃时,这个命令才会成功。如果将 playbook 中的 auto 变量设置为 start 以外的值,您可能需要首先手动激活受管节点上的连接。

您可以使用 IPsec ,通过 VPN 直接将主机互联。例如,要通过最大程度减少被截获或破坏的控制消息的风险来增强安全性,您可以为数据流量和控制流量配置单独的连接。通过使用 vpn RHEL 系统角色,您可以自动化创建带有单独的数据和控制平面及 PSK 身份验证的 IPsec 主机到主机连接的过程。

先决条件

流程

  1. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    ---
    - name: Configuring VPN
      hosts: managed-node-01.example.com, managed-node-02.example.com
      tasks:
        - name: IPsec VPN with PSK authentication
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.vpn
          vars:
            vpn_connections:
              - name: control_plane_vpn
                hosts:
                  managed-node-01.example.com:
                    hostname: 203.0.113.1  # IP address for the control plane
                  managed-node-02.example.com:
                    hostname: 198.51.100.2 # IP address for the control plane
                auth_method: psk
                auto: start
              - name: data_plane_vpn
                hosts:
                  managed-node-01.example.com:
                    hostname: 10.0.0.1   # IP address for the data plane
                  managed-node-02.example.com:
                    hostname: 172.16.0.2 # IP address for the data plane
                auth_method: psk
                auto: start
            vpn_manage_firewall: true
            vpn_manage_selinux: true
    Copy to Clipboard Toggle word wrap

    示例 playbook 中指定的设置包括如下:

    hosts: <list>

    定义一个 YAML 字典,其中包含您想要在它们之间配置 VPN 的主机。连接被命名为 <name>-<IP_address_A>-to-<IP_address_B>,例如 control_plane_vpn-203.0.113.1-to-198.51.100.2

    角色在每个受管节点上配置 VPN 连接。请注意,角色不能在外部(未管理的)节点上配置 Libreswan。您必须在这些主机上手动创建配置。

    auth_method: psk
    在主机之间启用 PSK 身份验证。角色在控制节点上使用 openssl 来创建预共享密钥。
    auto: <start-up_method>
    指定连接的启动方法。有效值是 addondemandstartignore。详情请查看安装了 Libreswan 的系统上的 ipsec.conf (5) 手册页。此变量的默认值为 null,这意味着没有自动启动操作。
    vpn_manage_firewall: true
    定义角色在受管节点上的 firewalld 服务中打开所需的端口。
    vpn_manage_selinux: true
    定义角色在 IPsec 端口上设置所需的 SELinux 端口类型。

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.vpn/README.md 文件。

  2. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    请注意,这个命令只验证语法,不能防止错误的、但有效的配置。

  3. 运行 playbook:

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

验证

  • 确认连接已成功启动,例如:

    # ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "control_plane_vpn-203.0.113.1-to-198.51.100.2"'
    ...
    006 #3: "control_plane_vpn-203.0.113.1-to-198.51.100.2", type=ESP, add_time=1741860073, inBytes=0, outBytes=0, maxBytes=2^63B, id='198.51.100.2'
    Copy to Clipboard Toggle word wrap

    请注意,只有在 VPN 连接活跃时,这个命令才会成功。如果将 playbook 中的 auto 变量设置为 start 以外的值,您可能需要首先手动激活受管节点上的连接。

Libreswan 支持创建一个机会网格,以便在每个主机上带有单个配置的大量主机之间建立 IPsec 连接。将主机添加到网格中不需要更新现有主机上的配置。为提高安全性,请在 Libreswan 中使用基于证书的身份验证。

通过使用 vpn RHEL 系统角色,您可以在受管节点之间自动化配置带有基于证书的身份验证的 VPN 网格。

先决条件

  • 您已准备好控制节点和受管节点
  • 以可在受管主机上运行 playbook 的用户登录到控制节点。
  • 您用于连接到受管节点的帐户对它们具有 sudo 权限。
  • 您可以为每个受管节点准备一个 PKCS #12 文件:

    • 每个文件包含:

      • 证书颁发机构(CA)证书
      • 节点的私钥
      • 节点的客户端证书
    • 文件被命名为 <managed_node_name_as_in_the_inventory>.p12
    • 文件存储在与 playbook 相同的目录中。

流程

  1. 编辑 ~/inventory 文件,并附加 cert_name 变量:

    managed-node-01.example.com cert_name=managed-node-01.example.com
    managed-node-02.example.com cert_name=managed-node-02.example.com
    managed-node-03.example.com cert_name=managed-node-03.example.com
    Copy to Clipboard Toggle word wrap

    cert_name 变量设置为每个主机的证书中使用的通用名称(CN)字段的值。通常,CN 字段被设置为完全限定域名(FQDN)。

  2. 将敏感变量存储在加密的文件中:

    1. 创建 vault :

      $ ansible-vault create ~/vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
      Copy to Clipboard Toggle word wrap
    2. ansible-vault create 命令打开编辑器后,以 <key>: <value> 格式输入敏感数据:

      pkcs12_pwd: <password>
      Copy to Clipboard Toggle word wrap
    3. 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
  3. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    - name: Configuring VPN
      hosts: managed-node-01.example.com, managed-node-02.example.com, managed-node-03.example.com
      vars_files:
        - ~/vault.yml
      tasks:
        - name: Install LibreSwan
          ansible.builtin.package:
            name: libreswan
            state: present
    
        - name: Identify the path to IPsec NSS database
          ansible.builtin.set_fact:
            nss_db_dir: "{{ '/etc/ipsec.d/' if
              ansible_distribution in ['CentOS', 'RedHat']
              and ansible_distribution_major_version is version('8', '=')
              else '/var/lib/ipsec/nss/' }}"
    
        - name: Locate IPsec NSS database files
          ansible.builtin.find:
            paths: "{{ nss_db_dir }}"
            patterns: "*.db"
          register: db_files
    
        - name: Remove IPsec NSS database files
          ansible.builtin.file:
            path: "{{ item.path }}"
            state: absent
          loop: "{{ db_files.files }}"
          when: db_files.matched > 0
    
        - name: Initialize IPsec NSS database
          ansible.builtin.command:
            cmd: ipsec initnss
    
        - name: Copy PKCS #12 file to the managed node
          ansible.builtin.copy:
            src: "~/{{ inventory_hostname }}.p12"
            dest: "/etc/ipsec.d/{{ inventory_hostname }}.p12"
            mode: 0600
    
        - name: Import PKCS #12 file in IPsec NSS database
          ansible.builtin.shell:
            cmd: 'pk12util -d {{ nss_db_dir }} -i /etc/ipsec.d/{{ inventory_hostname }}.p12 -W "{{ pkcs12_pwd }}"'
    
        - name: Remove PKCS #12 file
          ansible.builtin.file:
            path: "/etc/ipsec.d/{{ inventory_hostname }}.p12"
            state: absent
    
        - name: Opportunistic mesh IPsec VPN with certificate-based authentication
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.vpn
          vars:
            vpn_connections:
              - opportunistic: true
                auth_method: cert
                policies:
                  - policy: private
                    cidr: default
                  - policy: private
                    cidr: 192.0.2.0/24
                  - policy: clear
                    cidr: 192.0.2.1/32
            vpn_manage_firewall: true
            vpn_manage_selinux: true
    Copy to Clipboard Toggle word wrap

    示例 playbook 中指定的设置包括如下:

    opportunistic: true
    在多个主机之间启用机会网格。policies 变量定义哪些子网和主机流量必须或可以加密,它们中哪些应该继续使用明文连接。
    auth_method: cert
    启用基于证书的身份验证。这要求您在清单中指定每个受管节点的证书的昵称。
    policies: <list_of_policies>

    以 YAML 列表格式定义 Libreswan 策略。

    默认策略是 private-or-clear。要将它改为 private,上面的 playbook 包含默认 cidr 条目的一个相应策略。

    如果 Ansible 控制节点与受管节点在同一个 IP 子网中,要防止执行 playbook 期间丢失 SSH 连接,请为控制节点的 IP 地址添加一个 clear 策略。例如,如果应该为 192.0.2.0/24 子网配置网格,并且控制节点使用 IP 地址 192.0.2.1,则您需要一个用于192.0.2.1/32clear 策略,如 playbook 中所示。

    有关策略的详情,请查看安装了 Libreswan 的系统上的 ipsec.conf (5) 手册页。

    vpn_manage_firewall: true
    定义角色在受管节点上的 firewalld 服务中打开所需的端口。
    vpn_manage_selinux: true
    定义角色在 IPsec 端口上设置所需的 SELinux 端口类型。

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.vpn/README.md 文件。

  4. 验证 playbook 语法:

    $ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    请注意,这个命令只验证语法,不能防止错误的、但有效的配置。

  5. 运行 playbook:

    $ ansible-playbook --ask-vault-pass ~/playbook.yml
    Copy to Clipboard Toggle word wrap

验证

  1. 在网格的一个节点上,ping 另一个节点来激活连接:

    [root@managed-node-01]# ping managed-node-02.example.com
    Copy to Clipboard Toggle word wrap
  2. 确认连接是否处于活跃状态:

    [root@managed-node-01]# ipsec trafficstatus
    006 #2: "private#192.0.2.0/24"[1] ...192.0.2.2, type=ESP, add_time=1741938929, inBytes=372408, outBytes=545728, maxBytes=2^63B, id='CN=managed-node-02.example.com'
    Copy to Clipboard Toggle word wrap

为连接覆盖系统范围的加密策略

RHEL 系统范围的加密策略会创建一个名为 %default 的特殊连接。此连接包含 ikev2espike 选项的默认值。但是,您可以通过在连接配置文件中指定上述选项来覆盖默认值。

例如,以下配置允许使用带有 AES 和 SHA-1 或 SHA-2的 IKEv1 连接,以及带有 AES-GCM 或 AES-CBC 的 IPsec(ESP) 连接:

conn MyExample
  ...
  ikev2=never
  ike=aes-sha2,aes-sha1;modp2048
  esp=aes_gcm,aes-sha2,aes-sha1
  ...
Copy to Clipboard Toggle word wrap

请注意,AES-GCM 可用于 IPsec(ESP)和 IKEv2,但不适用于 IKEv1。

为所有连接禁用系统范围的加密策略

要禁用所有 IPsec 连接的系统范围的加密策略,请在 /etc/ipsec.conf 文件中注释掉以下行:

include /etc/crypto-policies/back-ends/libreswan.config
Copy to Clipboard Toggle word wrap

然后将 ikev2=never 选项添加到连接配置文件。

23.3.15. IPsec VPN 配置故障排除

与 IPsec VPN 配置相关的问题通常是由于几个主要原因造成的。如果您遇到此类问题,您可以检查问题的原因是否符合一下任何一种情况,并应用相应的解决方案。

基本连接故障排除

VPN 连接的大多数问题都发生在新部署中,管理员使用不匹配的配置选项配置了端点。此外,正常工作的配置可能会突然停止工作,通常是由于新引入的不兼容的值。这可能是管理员更改配置的结果。或者,管理员可能已安装了固件更新,或者使用某些选项的不同默认值(如加密算法)安装了软件包更新。

要确认已建立 IPsec VPN 连接:

# ipsec trafficstatus
006 #8: "vpn.example.com"[1] 192.0.2.1, type=ESP, add_time=1595296930, inBytes=5999, outBytes=3231, id='@vpn.example.com', lease=100.64.13.5/32
Copy to Clipboard Toggle word wrap

如果输出为空或者没有显示具有连接名称的条目,则隧道将断开。

检查连接中的问题:

  1. 重新载入 vpn.example.com 连接:

    # ipsec auto --add vpn.example.com
    002 added connection description "vpn.example.com"
    Copy to Clipboard Toggle word wrap
  2. 下一步,启动 VPN 连接:

    # ipsec auto --up vpn.example.com
    Copy to Clipboard Toggle word wrap

与防火墙相关的问题

最常见的问题是,其中一个 IPsec 端点或端点之间路由器上的防火墙将所有互联网密钥交换(IKE)数据包丢弃。

  • 对于 IKEv2,类似以下示例的输出说明防火墙出现问题:

    # ipsec auto --up vpn.example.com
    181 "vpn.example.com"[1] 192.0.2.2 #15: initiating IKEv2 IKE SA
    181 "vpn.example.com"[1] 192.0.2.2 #15: STATE_PARENT_I1: sent v2I1, expected v2R1
    010 "vpn.example.com"[1] 192.0.2.2 #15: STATE_PARENT_I1: retransmission; will wait 0.5 seconds for response
    010 "vpn.example.com"[1] 192.0.2.2 #15: STATE_PARENT_I1: retransmission; will wait 1 seconds for response
    010 "vpn.example.com"[1] 192.0.2.2 #15: STATE_PARENT_I1: retransmission; will wait 2 seconds for
    ...
    Copy to Clipboard Toggle word wrap
  • 对于 IKEv1,启动命令的输出如下:

    # ipsec auto --up vpn.example.com
    002 "vpn.example.com" #9: initiating Main Mode
    102 "vpn.example.com" #9: STATE_MAIN_I1: sent MI1, expecting MR1
    010 "vpn.example.com" #9: STATE_MAIN_I1: retransmission; will wait 0.5 seconds for response
    010 "vpn.example.com" #9: STATE_MAIN_I1: retransmission; will wait 1 seconds for response
    010 "vpn.example.com" #9: STATE_MAIN_I1: retransmission; will wait 2 seconds for response
    ...
    Copy to Clipboard Toggle word wrap

由于用于设置 IPsec 的 IKE 协议已经加密,因此您只能使用 tcpdump 工具排除一小部分问题。如果防火墙丢弃了 IKE 或 IPsec 数据包,您可以尝试使用 tcpdump 工具来查找原因。但是,tcpdump 无法诊断 IPsec VPN 连接的其他问题。

  • 捕获eth0 接口上的 VPN 协商以及所有加密数据:

    # tcpdump -i eth0 -n -n esp or udp port 500 or udp port 4500 or tcp port 4500
    Copy to Clipboard Toggle word wrap

不匹配的算法、协议和策略

VPN 连接要求端点具有匹配的 IKE 算法、IPsec 算法和 IP 地址范围。如果发生不匹配,连接会失败。如果您使用以下方法之一发现不匹配,请通过匹配算法、协议或策略来修复它。

  • 如果远程端点没有运行 IKE/IPsec,您可以看到一个 ICMP 数据包来指示它。例如:

    # ipsec auto --up vpn.example.com
    ...
    000 "vpn.example.com"[1] 192.0.2.2 #16: ERROR: asynchronous network error report on wlp2s0 (192.0.2.2:500), complainant 198.51.100.1: Connection refused [errno 111, origin ICMP type 3 code 3 (not authenticated)]
    ...
    Copy to Clipboard Toggle word wrap
  • 不匹配 IKE 算法示例:

    # ipsec auto --up vpn.example.com
    ...
    003 "vpn.example.com"[1] 193.110.157.148 #3: dropping unexpected IKE_SA_INIT message containing NO_PROPOSAL_CHOSEN notification; message payloads: N; missing payloads: SA,KE,Ni
    Copy to Clipboard Toggle word wrap
  • 不匹配 IPsec 算法示例:

    # ipsec auto --up vpn.example.com
    ...
    182 "vpn.example.com"[1] 193.110.157.148 #5: STATE_PARENT_I2: sent v2I2, expected v2R2 {auth=IKEv2 cipher=AES_GCM_16_256 integ=n/a prf=HMAC_SHA2_256 group=MODP2048}
    002 "vpn.example.com"[1] 193.110.157.148 #6: IKE_AUTH response contained the error notification NO_PROPOSAL_CHOSEN
    Copy to Clipboard Toggle word wrap

    不匹配的 IKE 版本还可导致远程端点在没有响应的情况下丢弃请求。这与丢弃所有 IKE 数据包的防火墙相同。

  • IKEv2 不匹配的 IP 地址范围示例(称为流量选择器 - TS):

    # ipsec auto --up vpn.example.com
    ...
    1v2 "vpn.example.com" #1: STATE_PARENT_I2: sent v2I2, expected v2R2 {auth=IKEv2 cipher=AES_GCM_16_256 integ=n/a prf=HMAC_SHA2_512 group=MODP2048}
    002 "vpn.example.com" #2: IKE_AUTH response contained the error notification TS_UNACCEPTABLE
    Copy to Clipboard Toggle word wrap
  • IKEv1 的不匹配 IP 地址范围示例:

    # ipsec auto --up vpn.example.com
    ...
    031 "vpn.example.com" #2: STATE_QUICK_I1: 60 second timeout exceeded after 0 retransmits.  No acceptable response to our first Quick Mode message: perhaps peer likes no proposal
    Copy to Clipboard Toggle word wrap
  • 当在 IKEv1 中使用预共享密钥(PSK)时,如果双方没有放入相同的 PSK ,则整个 IKE 信息将无法读取:

    # ipsec auto --up vpn.example.com
    ...
    003 "vpn.example.com" #1: received Hash Payload does not match computed value
    223 "vpn.example.com" #1: sending notification INVALID_HASH_INFORMATION to 192.0.2.23:500
    Copy to Clipboard Toggle word wrap
  • 在 IKEv2 中,不匹配-PSK 错误会导致 AUTHENTICATION_FAILED 信息:

    # ipsec auto --up vpn.example.com
    ...
    002 "vpn.example.com" #1: IKE SA authentication request rejected by peer: AUTHENTICATION_FAILED
    Copy to Clipboard Toggle word wrap

最大传输单元

除防火墙阻止 IKE 或 IPsec 数据包外,网络问题的最常见原因与加密数据包的数据包大小增加有关。网络硬件对于大于最大传输单元(MTU)的数据包进行分片处理,例如 1500 字节。通常,片会丢失,数据包无法重新组装。当使用小数据包的 ping 测试可以正常工作,但其他流量失败时,这会导致间歇性故障。在这种情况下,您可以建立一个 SSH 会话,但是一使用它,终端就会冻结,例如,在远程主机上输入 'ls -al /usr' 命令。

要临时解决这个问题,请通过将 mtu=1400 选项添加到隧道配置文件中来减小 MTU 大小。

另外,对于 TCP 连接,启用更改 MSS 值的 iptables 规则:

# iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Copy to Clipboard Toggle word wrap

如果上一命令没有解决您场景中的问题,请在 set-mss 参数中直接指定较小的数值:

# iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1380
Copy to Clipboard Toggle word wrap

网络地址转换(NAT)

当 IPsec 主机也充当 NAT 路由器时,可能会意外地重新映射数据包。以下示例配置演示了这个问题:

conn myvpn
    left=172.16.0.1
    leftsubnet=10.0.2.0/24
    right=172.16.0.2
    rightsubnet=192.168.0.0/16
…
Copy to Clipboard Toggle word wrap

地址为 172.16.0.1 的系统有一个 NAT 规则:

iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
Copy to Clipboard Toggle word wrap

如果地址为 10.0.2.33 的系统将数据包发送到 192.168.0.1,那么路由器会在应用 IPsec 加密前将源 10.0.2.33 转换为 172.16.0.1。

然后,源地址为 10.0.2.33 的数据包不再与 conn myvpn 配置匹配, IPsec 不会加密此数据包。

要解决这个问题,请在路由器上插入目标 IPsec 子网范围不包含 NAT 的规则,例如:

iptables -t nat -I POSTROUTING -s 10.0.2.0/24 -d 192.168.0.0/16 -j RETURN
Copy to Clipboard Toggle word wrap

内核 IPsec 子系统错误

例如,当 bug 导致 IKE 用户空间和 IPsec 内核不同步时,内核 IPsec 子系统可能会失败。检查此问题:

$ cat /proc/net/xfrm_stat
XfrmInError                 0
XfrmInBufferError           0
...
Copy to Clipboard Toggle word wrap

上一命令输出中的任何非零值都表示有问题。如果您遇到这个问题,请开一个新的 支持问题单,并附上上一命令的输出与对应的 IKE 日志。

libreswan 日志

默认情况下,Libreswan 使用 syslog 协议的日志。您可以使用 journalctl 命令来查找与 IPsec 有关的日志条目。因为日志中相应的条目是由 pluto IKE 守护进程发送的,因此请搜索 "pluto" 关键字,例如:

$ journalctl -b | grep pluto
Copy to Clipboard Toggle word wrap

显示 ipsec 服务的实时日志:

$ journalctl -f -u ipsec
Copy to Clipboard Toggle word wrap

如果默认日志记录级别没有显示您的配置问题,请将 plutodebug=all 选项添加到 /etc/ipsec.conf 文件的 config setup 部分来启用调试日志。

请注意,调试日志记录会生成大量的条目,journaldsyslogd 服务的速率可能会抑制 syslog 消息。要确保您有完整的日志,请将日志记录重定向到文件中。编辑 /etc/ipsec.conf,并在 config setup 部分中添加 logfile=/var/log/pluto.log

23.3.16. 使用 control-center 配置 VPN 连接

如果您使用带有图形界面的 Red Hat Enterprise Linux,您可以在 GNOME control-center 中配置 VPN 连接。

先决条件

  • 已安装 NetworkManager-libreswan-gnome 软件包。

流程

  1. Super 键,输入 Settings,然后按 Enter 键打开 control-center 应用程序。
  2. 选择左侧的 Network 条目。
  3. + 图标。
  4. 选择 VPN
  5. 选择 Identity 菜单项来查看基本配置选项:

    General

    Gateway - 远程 VPN 网关的名称或 IP 地址。

    认证

    Type

    • IKEv2(Certificate)- 客户端通过证书进行身份验证。它更安全(默认)。
    • IKEv1(XAUTH) - 客户端通过用户名和密码或预共享密钥(PSK)进行身份验证。

      以下配置设置在 高级 部分中提供:

      图 23.1. VPN 连接的高级选项

      警告

      当使用 gnome-control-center 应用程序配置基于 IPsec 的 VPN 连接时,高级 对话框会显示配置,但它不允许任何更改。因此,用户无法更改任何高级 IPsec 选项。使用 nm-connection-editornmcli 工具来配置高级属性。

      身份识别

    • - 如果需要,输入域名。

      安全性

    • Phase1 Algorithms - 对应于 ike Libreswan 参数 - 输入用来验证和设置加密频道的算法。
    • Phase2 Algorithms - 对应于 esp Libreswan 参数 - 输入用于 IPsec 协商的算法。

      选择 Disable PFS 字段来关闭 Perfect Forward Secrecy(PFS),以确保与不支持 PFS 的旧服务器兼容。

    • Phase1 Lifetime - 对应于 ikelifetime Libreswan 参数 - 用于加密流量的密钥的有效期。
    • Phase2 Lifetime - 对应于 salifetime Libreswan 参数 - 在过期前连接的特定实例应多久。

      注意:为了安全起见,加密密钥应该不时地更改。

    • Remote network - 对应于 rightsubnet Libreswan 参数 - 应该通过 VPN 访问的目标专用远程网络。

      检查 缩减 字段以启用缩小字段。请注意,它只在 IKEv2 协商中有效。

    • Enable fragmentation - 对应于 fragmentation Libreswan 参数 - 是否允许 IKE 分段。有效值为 yes (默认)或 no
    • Enable Mobike - 与 mobike Libreswan 参数对应 - 是否允许移动和多形协议(MOBIKE、RFC 455)启用连接来迁移其端点,而无需从头开始重启连接。这可用于在有线、无线或者移动数据连接之间进行切换的移动设备。值为 no (默认)或 yes
  6. 选择 IPv4 菜单条目:

    IPv4 方法

    • Automatic (DHCP) - 如果您要连接的网络使用 DHCP 服务器来分配动态 IP 地址,请选择此选项。
    • Link-Local Only - 如果您要连接的网络没有 DHCP 服务器且您不想手动分配 IP 地址,请选择这个选项。随机地址将根据 RFC 3927 分配,带有前缀 169.254/16
    • 手动 - 如果您要手动分配 IP 地址,请选择这个选项。
    • Disable - 在这个连接中禁用 IPv4

      DNS

      DNS 部分,当 AutomaticON 时,将其切换到 OFF 以输入您要用逗号分开的 DNS 服务器的 IP 地址。

      Routes

      请注意,在 Routes 部分,当 AutomaticON 时,会使用 DHCP 的路由,但您也可以添加额外的静态路由。当 OFF 时,只使用静态路由。

    • Address - 输入远程网络或主机的 IP 地址。
    • Netmask - 以上输入的 IP 地址的子网掩码或前缀长度。
    • Gateway - 上面输入的远程网络或主机的网关的 IP 地址。
    • Metric - 网络成本,赋予此路由的首选值。数值越低,优先级越高。

      仅将此连接用于其网络上的资源

      选择这个复选框以防止连接成为默认路由。选择这个选项意味着只有特别用于路由的流量才会通过连接自动获得,或者手动输入到连接上。

  7. 要在 VPN 连接中配置 IPv6 设置,请选择 IPv6 菜单条目:

    IPv6 Method

    • Automatic - 选择这个选项使用 IPv6 Stateless Address AutoConfiguration(SLAAC)根据硬件地址和路由器公告(RA)创建自动的、无状态的配置。
    • Automatic, DHCP only - 选择这个选项以不使用 RA,但从 DHCPv6 请求信息以创建有状态的配置。
    • Link-Local Only - 如果您要连接的网络没有 DHCP 服务器且您不想手动分配 IP 地址,请选择这个选项。随机地址将根据 RFC 4862 分配,前缀为 FE80::0
    • 手动 - 如果您要手动分配 IP 地址,请选择这个选项。
    • Disable - 在这个连接中禁用 IPv6

      请注意,DNS, Routes, Use this connection only for resources on its network 项是 IPv4 的常规设置。

  8. 编辑完 VPN 连接后,点添加按钮自定义配置或应用按钮为现有配置保存它。
  9. 将配置集切换到 ON 以激活 VPN 连接。
  10. 如果您在带有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能会受到重定向的影响。有关详情和缓解步骤,请参阅将 VPN 连接分配给专用路由表,以防止连接绕过隧道

23.3.17. 使用 nm-connection-editor 配置 VPN 连接

如果使用带有图形界面的 Red Hat Enterprise Linux,您可以在 nm-connection-editor 应用程序中配置 VPN 连接。

先决条件

  • 已安装 NetworkManager-libreswan-gnome 软件包。
  • 如果您配置了互联网密钥交换版本 2(IKEv2)连接:

    • 证书导入到 IPsec 网络安全服务(NSS)数据库中。
    • NSS 数据库中的证书 nickname 是已知的。

流程

  1. 打开终端窗口,输入:

    $ nm-connection-editor
    Copy to Clipboard Toggle word wrap
  2. 点击 + 按钮来添加一个新的连接。
  3. 选择 IPsec based VPN 连接类型,然后点击 Create
  4. VPN 选项卡中:

    1. Gateway 字段中输入 VPN 网关的主机名或 IP 地址,然后选择验证类型。根据验证类型,您必须输入不同的额外信息:

      • IKEv2(认证) 使用证书验证客户端,这会更安全。这个设置需要在 IPsec NSS 数据库中指定证书的 nickname
      • IKEv1(XAUTH) 使用用户名和密码(预共享密钥)验证用户身份。此设置要求您输入以下值:

        • 用户名
        • 密码
        • 组名称
        • Secret
    2. 如果远程服务器为 IKE 交换指定了本地标识符,在 Remote ID 字段中输入准确的字符串。在运行 Libreswan 的远程服务器中,这个值是在服务器的 leftid 参数中设置的。

      nm connection editor vpn tab

    3. 可选:点 Advanced 按钮配置附加设置。您可以配置以下设置:

      • 身份识别

        • - 如果需要,请输入域名。
      • 安全性

        • Phase1 Algorithms 对应于 ike Libreswan 参数。输入用来验证和设置加密频道的算法。
        • Phase2 Algorithms 对应于 esp Libreswan 参数。输入用于 IPsec 协商的算法。

          选择 Disable PFS 字段来关闭 Perfect Forward Secrecy(PFS),以确保与不支持 PFS 的旧服务器兼容。

        • Phase1 Lifetimeikelifetime Libreswan 参数对应。此参数定义用于加密流量的密钥的有效期。
        • Phase2 Lifetimesalifetime Libreswan 参数对应。这个参数定义安全关联有效期。
      • 连接性

        • 远程网络rightsubnet Libreswan 参数对应,并定义应通过 VPN 访问的目标专用远程网络。

          检查 缩减 字段以启用缩小字段。请注意,它只在 IKEv2 协商中有效。

        • Enable fragmentationsegmentation Libreswan 参数对应,并定义是否允许 IKE 分段。有效值为 yes (默认)或 no
        • Enable Mobikemobike 参数对应。参数定义是否允许 Mobility 和 Multihoming 协议(MOBIKE) (RFC 4555)来启用连接来迁移其端点,而无需从头开始重启连接。这可用于在有线、无线或者移动数据连接之间进行切换的移动设备。值为 no (默认)或 yes
  5. IPv4 Settings 选项卡中,选择 IP 分配方法,并可选择设置额外的静态地址、DNS 服务器、搜索域和路由。

    IPsec IPv4 tab

  6. 保存连接。
  7. 关闭 nm-connection-editor
  8. 如果您在带有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能会受到重定向的影响。有关详情和缓解步骤,请参阅将 VPN 连接分配给专用路由表,以防止连接绕过隧道
注意

当您点 + 按钮添加新连接时, NetworkManager 会为那个连接创建新配置文件,然后打开同一个对话框来编辑现有连接。这两个对话框之间的区别在于现有连接配置集有详情菜单条目。

DHCP 服务器和无状态地址自动配置(SLAAC)都可以将路由添加到客户端的路由表中。例如,恶意的 DHCP 服务器可以使用此功能强制带有 VPN 连接的主机通过物理接口而不是 VPN 隧道重定向流量。此漏洞也称为 TunnelVision,并参见 CVE-2024-3661 漏洞文章中所述。

要缓解此漏洞,您可以将 VPN 连接分配给专用路由表。这可防止 DHCP 配置或 SLAAC 来处理用于 VPN 隧道的网络数据包的路由决策。

如果至少有一个条件应用到您的环境,请按照以下步骤操作:

  • 至少一个网络接口使用 DHCP 或 SLAAC。
  • 您的网络不使用阻止恶意 DHCP 服务器的机制,如 DHCP 侦听。
重要

通过 VPN 路由整个流量可防止主机访问本地网络资源。

先决条件

  • 您可以使用 NetworkManager 1.40.16-18 或更高版本。

流程

  1. 决定您要使用的路由表。以下步骤使用表 75。默认情况下,RHEL 不使用表 1-254,您可以使用其中任何一个。
  2. 配置 VPN 连接配置文件,将 VPN 路由放在专用路由表中:

    # nmcli connection modify <vpn_connection_profile> ipv4.route-table 75 ipv6.route-table 75
    Copy to Clipboard Toggle word wrap
  3. 为您在上一命令中使用的表设置低优先级值:

    # nmcli connection modify <vpn_connection_profile> ipv4.routing-rules "priority 32345 from all table 75" ipv6.routing-rules "priority 32345 from all table 75"
    Copy to Clipboard Toggle word wrap

    优先级值可以是 1 到 32766 之间的任何值。值越低,优先级越高。

  4. 重新连接 VPN 连接:

    # nmcli connection down <vpn_connection_profile>
    # nmcli connection up <vpn_connection_profile>
    Copy to Clipboard Toggle word wrap

验证

  1. 在表 75 中显示 IPv4 路由:

    # ip route show table 75
    ...
    192.0.2.0/24 via 192.0.2.254 dev vpn_device proto static metric 50
    default dev vpn_device proto static scope link metric 50
    Copy to Clipboard Toggle word wrap

    输出确认到远程网络和默认网关路由到路由表 75,因此所有流量都通过隧道路由。如果您在 VPN 连接配置集中设置 ipv4.never-default true,则不会创建默认路由,因此无法在此输出中可见。

  2. 在表 75 中显示 IPv6 路由:

    # ip -6 route show table 75
    ...
    2001:db8:1::/64 dev vpn_device proto kernel metric 50 pref medium
    default dev vpn_device proto static metric 50 pref medium
    Copy to Clipboard Toggle word wrap

    输出确认到远程网络和默认网关路由到路由表 75,因此所有流量都通过隧道路由。如果您在 VPN 连接配置集中设置 ipv4.never-default true,则不会创建默认路由,因此无法在此输出中可见。

您可以使用 MACsec 来保护两个设备(点到点)之间的通信。例如,您的分支办公室通过城际以太网与中心办公室连接,您可以在连接办公室的两个主机上配置 MACsec,以提高安全性。

23.4.1. MACsec 如何提高安全性

介质访问控制安全(MACsec)是一种第 2 层协议,它保护以太网链路上的不同流量类型,包括:

  • 动态主机配置协议(DHCP)
  • 地址解析协议(ARP)
  • IPv4 和 IPv6 流量
  • 任何通过 IP 的流量,如 TCP 或 UDP

MACsec 默认使用 GCM-AES-128 算法加密并验证 LAN 中的所有流量,并使用预共享密钥在参与的主机之间建立连接。要更改预共享密钥,您必须更新所有使用 MACsec 的网络主机上的 NM 配置。

MACsec 连接使用以太网设备,如以太网网卡、VLAN 或隧道设备作为父设备。您只能在 MACsec 设备上设置 IP 配置,以便只使用加密连接与其他主机进行通信,或者在父设备上设置 IP 配置。在后者的情况下,您可以使用父设备使用未加密连接和 MACsec 设备加密连接与其他主机通信。

macsec 不需要任何特殊硬件。例如,您可以使用任何交换机,除非您只想在主机和交换机之间加密流量。在这种情况下,交换机还必须支持 MACsec。

换句话说,您可以为两种常见情况配置 MACsec:

  • host-to-host
  • host-to-switch 和 switch-to-other-hosts
重要

您只能在位于同一物理或虚拟 LAN 的主机间使用 MACsec。

使用 MACsec 安全标准保护链路层的通信,也称为 Open Systems Interconnection (OSI)模型的第 2 层,提供以下显著优点:

  • 第 2 层的加密消除了在第 7 层加密单个服务的需要。这减少了管理与每个主机上每个端点的大量证书关联的开销。
  • 直接连接的网络设备(如路由器和交换机)之间的点对点安全性。
  • 不需要对应用程序和高层协议进行更改。

23.4.2. 使用 nmcli 配置 MACsec 连接

您可以使用 nmcli 工具将以太网接口配置为使用 MACsec。例如,您可以在通过以太网连接的两个主机之间创建一个 MACsec 连接。

流程

  1. 在配置 MACsec 的第一个主机上:

    • 为预共享密钥创建连接关联密钥(CAK)和连接关联密钥名称(CKN):

      1. 创建一个 16 字节的十六进制 CAK:

        # dd if=/dev/urandom count=16 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"'
        50b71a8ef0bd5751ea76de6d6c98c03a
        Copy to Clipboard Toggle word wrap
      2. 创建一个 32 字节的十六进制 CKN:

        # dd if=/dev/urandom count=32 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"'
        f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e1898fcf1c4550
        Copy to Clipboard Toggle word wrap
  2. 在您要通过 MACsec 连接连接的两个主机上:
  3. 创建 MACsec 连接:

    # nmcli connection add type macsec con-name macsec0 ifname macsec0 connection.autoconnect yes macsec.parent enp1s0 macsec.mode psk macsec.mka-cak 50b71a8ef0bd5751ea76de6d6c98c03a macsec.mka-ckn f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e1898fcf1c4550
    Copy to Clipboard Toggle word wrap

    macsec.mka-cakmacsec.mka-ckn 参数中使用上一步生成的 CAK 和 CKN。在 MACsec-protected 网络的每个主机上,这些值必须相同。

  4. 配置 MACsec 连接中的 IP 设置。

    1. 配置 IPv4 设置。例如,要为 macsec0 连接设置静态 IPv4 地址、网络掩码、默认网关和 DNS 服务器,请输入:

      # nmcli connection modify macsec0 ipv4.method manual ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253'
      Copy to Clipboard Toggle word wrap
    2. 配置 IPv6 设置。例如,要为 macsec0 连接设置静态 IPv6 地址、网络掩码、默认网关和 DNS 服务器,请输入:

      # nmcli connection modify macsec0 ipv6.method manual ipv6.addresses '2001:db8:1::1/32' ipv6.gateway '2001:db8:1::fffe' ipv6.dns '2001:db8:1::fffd'
      Copy to Clipboard Toggle word wrap
  5. 激活连接:

    # nmcli connection up macsec0
    Copy to Clipboard Toggle word wrap

验证

  1. 验证流量是否加密:

    # tcpdump -nn -i enp1s0
    Copy to Clipboard Toggle word wrap
  2. 可选:显示未加密的流量:

    # tcpdump -nn -i macsec0
    Copy to Clipboard Toggle word wrap
  3. 显示 MACsec 统计信息:

    # ip macsec show
    Copy to Clipboard Toggle word wrap
  4. 显示每种保护类型的单独的计数器:仅完整性(关闭加密)和加密(打开加密)

    # ip -s macsec show
    Copy to Clipboard Toggle word wrap

23.5. 使用和配置 firewalld

防火墙是保护机器不受来自外部的、不需要的网络数据的一种方式。它允许用户通过定义一组防火墙规则 来控制主机上的入站网络流量。这些规则用于对进入的流量进行排序,并可以阻断或允许流量。

firewalld 是一个防火墙服务守护进程,其提供一个带有 D-Bus 接口的、动态可定制的、基于主机的防火墙。如果是动态的,它可在每次修改规则时启用、修改和删除规则,而不需要在每次修改规则时重启防火墙守护进程。

firewalld 使用区和服务的概念来简化流量管理。zones 是预定义的规则集。网络接口和源可以分配给区。允许的流量取决于您计算机连接到的网络,并分配了这个网络的安全级别。防火墙服务是预定义的规则,覆盖了允许特定服务进入流量的所有必要设置,并在区中应用。

服务使用一个或多个端口或地址进行网络通信。防火墙会根据端口过滤通讯。要允许服务的网络流量,必须打开其端口。firewall d 阻止未明确设置为打开的端口上的所有流量。一些区(如可信区)默认允许所有流量。

请注意,带有 nftables 后端的 firewalld 不支持使用 --direct 选项将自定义的 nftables 规则传递到 firewalld

23.5.1. 使用 firewalld、nftables 或者 iptables 时

以下是您应该使用以下工具之一的概述:

  • firewalld:使用 firewalld 实用程序进行简单防火墙用例。此工具易于使用,并涵盖了这些场景的典型用例。
  • nftables:使用 nftables 实用程序设置复杂和高性能的防火墙,如为整个网络设置。
  • iptables:Red Hat Enterprise Linux 上的 iptables 工具使用 nf_tables 内核 API 而不是 传统的 后端。The nf_tables API 提供向后兼容性,因此使用 iptables 命令的脚本仍可在 Red Hat Enterprise Linux 上工作。对于新的防火墙脚本,红帽建议使用 nftables
重要

要防止不同的与防火墙相关的服务(firewalldnftablesiptables)相互影响,请在 RHEL 主机上仅运行其中一个服务,并禁用其他服务。

23.5.2. 防火墙区域

您可以使用 ⁠firewalld 工具,根据您与网络中接口和流量的信任级别,将网络划分为不同的区域。连接只能是一个区域的一部分,但您可以对许多网络连接使用这个区域。

firewalld 遵循严格的与区域相关的原则:

  1. 流量只进入一个区域。
  2. 流量只流出一个区域。
  3. 一个区域定义了一个信任级别。
  4. 默认情况下,允许区域内流量(在同一区域中)。
  5. 默认情况下,拒绝区域间流量(从区域到区域)。

原则 4 和 5 是原则 3 的结果。

原则 4 可以通过区选项 --remove-forward 进行配置。原则 5 可以通过添加新策略来进行配置。

NetworkManager 通知接口区的 firewalld。您可以使用以下工具将区域分配给接口:

  • NetworkManager
  • firewall-config 工具
  • firewall-cmd 工具
  • RHEL web 控制台

RHEL web 控制台、firewall-configfirewall-cmd 只能编辑合适的 NetworkManager 配置文件。如果您使用 web 控制台、firewall-cmdfirewall-config 更改接口的区域,请求被转发到 NetworkManager,且不会被 firewalld 处理。

/usr/lib/firewalld/zones/ 目录存储预定义的区域,您可以立即将它们应用到任何可用的网络接口。只有在修改后,这些文件才会被拷贝到 /etc/firewalld/zones/ 目录中。预定义区的默认设置如下:

block
  • 适用于:任何传入的网络连接都会被拒绝,并报 IPv4 的 icmp-host-prohibited 消息和 IPv6 的 icmp6-adm-prohibited 消息 。
  • 接受:只从系统内启动的网络连接。
dmz
  • 适用于:DMZ 中的计算机可以公开访问,但对您的内部网络有有限的访问权限。
  • 接受:仅所选的传入连接。
drop

适用于:所有传入的网络数据包都会丢失,没有任何通知。

  • 接受:仅传出的网络连接。
external
  • 适用于:启用了伪装的外部网络,特别是路由器。不信任网络上其他计算机的情况。
  • 接受:仅所选的传入连接。
home
  • 适用于:您主要信任网络上其他计算机的家庭环境。
  • 接受:仅所选的传入连接。
internal
  • 适用于:您主要信任网络上其他计算机的内部网络。
  • 接受:仅所选的传入连接。
public
  • 适用于:您不信任网络上其他计算机的公共区域。
  • 接受:仅所选的传入连接。
trusted
  • 接受:所有网络连接。
work

适用于:您主要信任网络上其他计算机的工作环境。

  • 接受:仅所选的传入连接。

这些区中的一个被设置为 default 区。当接口连接被添加到 NetworkManager 中时,它们会被分配到默认区。安装时,firewalld 中的默认区域是 public 区域。您可以更改默认区域。

注意

使网络区域名称自我解释,以帮助用户快速理解它们。

要避免安全问题,请查看默认区配置并根据您的需要和风险禁用任何不必要的服务。

23.5.3. 防火墙策略

防火墙策略指定网络所需的安全状态。它们概述了对不同类型的流量所采取的规则和操作。通常,策略包含用于以下类型流量的规则:

  • 传入流量
  • 传出流量
  • 转发流量
  • 特定服务和应用程序
  • 网络地址转换(NAT)

防火墙策略使用防火墙区域的概念。每个区域都与一组决定允许的流量的特定的防火墙规则关联。策略以有状态、单向的方式应用防火墙规则。这意味着您只考虑流量的一个方向。由于 firewalld 的有状态过滤,流量返回路径被隐式允许。

策略与一个入口区域和一个出口区域关联。入口区域是流量起源的地方(接收)。出口区域是流量离开的地方(发送)。

策略中定义的防火墙规则可以引用防火墙区,以便在多个网络接口之间应用一致的配置。

23.5.4. 防火墙规则

您可以使用防火墙规则实现特定的配置,以允许或阻止网络流量。因此,您可以控制网络流量的流,以防止系统受到安全威胁。

防火墙规则通常根据各种属性定义某些条件。属性可以是如下:

  • 源 IP 地址
  • 目标 IP 地址
  • 传输协议(TCP、UDP、…​)
  • 端口
  • 网络接口

firewalld 工具将防火墙规则组织到区域(如publicinternal 等)和策略中。每个区域都有自己的一组规则,其决定与特定区域关联的网络接口的流量自由度的级别。

23.5.5. 防火墙直接规则

firewalld 服务提供多种配置规则的方法,包括:

  • 常规规则
  • 直接规则

这两者的一个区别在于,每个方法与底层后端(iptablesnftables)交互的方式。

直接规则是高级低级别规则,允许直接与 iptables 交互。它们绕过 firewalld 的结构化管理,为您提供更多控制。您可以使用原始 iptables 语法使用 firewall-cmd 命令手动定义直接规则。例如,firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 198.51.100.1 -j DROP。此命令添加了一个 iptables 规则来丢弃来自 198.51.100.1 源 IP 地址的流量。

但是,使用直接规则也具有其缺点。特别是当 nftables 是您的主要防火墙后端时。例如:

  • 直接规则很难维护,并可能会与基于 nftablesfirewalld 配置冲突。
  • 直接规则不支持您可以在 nftables 中找到的高级功能,如原始表达式和有状态对象。
  • 直接规则不永不。iptables 组件已弃用,最终将从 RHEL 中删除。

因此,您可以考虑使用 nftables 替换 firewalld 直接规则。查看知识库解决方案 如何将 firewalld 直接规则替换为 nftables? 以查看更多详情。

23.5.6. 预定义的 firewalld 服务

预定义的 firewalld 服务在低级防火墙规则中提供内置抽象层。它通过将常用的网络服务(如 SSH 或 HTTP)映射到其相应的端口和协议来实现。您可以引用指定预定义服务,而不是每次手动指定它们。这使得防火墙管理变得更加简单、更易出错且更直观。

  • 查看可用的预定义服务:

    # firewall-cmd --get-services
    RH-Satellite-6 RH-Satellite-6-capsule afp amanda-client amanda-k5-client amqp amqps apcupsd audit ausweisapp2 bacula bacula-client bareos-director bareos-filedaemon bareos-storage bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-exporter ceph-mon cfengine checkmk-agent cockpit collectd condor-collector cratedb ctdb dds...
    Copy to Clipboard Toggle word wrap
  • 要进一步检查特定的预定义服务:

    # sudo firewall-cmd --info-service=RH-Satellite-6
    RH-Satellite-6
      ports: 5000/tcp 5646-5647/tcp 5671/tcp 8000/tcp 8080/tcp 9090/tcp
      protocols:
      source-ports:
      modules:
      destination:
      includes: foreman
      helpers:
    Copy to Clipboard Toggle word wrap

    示例输出显示 RH-Satellite-6 预定义服务侦听端口 5000/tcp 5646-5647/tcp 5671/tcp 8000/tcp 8080/tcp 9090/tcp 9090/tcp 9090。另外,RH-Satellite-6 继承了其他预定义服务中的规则。本例中为 foreman。

每个预定义的服务都作为 XML 文件存储在 /usr/lib/firewalld/services/ 目录中。

23.5.7. 使用 firewalld 区

zones 代表一种更透明管理传入流量的概念。这些区域连接到联网接口或者分配一系列源地址。您可以独立为每个区管理防火墙规则,这样就可以定义复杂的防火墙设置并将其应用到流量。

您可以通过修改防火墙设置并将特定的网络接口或连接与特定的防火墙区域关联,来增强网络安全性。通过为区域定义细粒度规则和限制,您可以根据想要的安全级别控制入站和出站流量。

例如,您可以获得以下好处:

  • 保护敏感数据
  • 防止未授权访问
  • 缓解潜在的网络威胁

先决条件

  • firewalld 服务在运行。

流程

  1. 列出可用的防火墙区域:

    # firewall-cmd --get-zones
    Copy to Clipboard Toggle word wrap

    firewall-cmd --get-zones 命令显示系统上所有可用的区,但不显示特定区的详情。要查看所有区域的详情,请使用 firewall-cmd --list-all-zones 命令。

  2. 选择您要用于此配置的区域。
  3. 修改所选区域的防火墙设置。例如,要允许 SSH 服务,并删除 ftp 服务:

    # firewall-cmd --add-service=ssh --zone=<your_chosen_zone>
    # firewall-cmd --remove-service=ftp --zone=<same_chosen_zone>
    Copy to Clipboard Toggle word wrap
  4. 将一个网络接口分配给防火墙区域:

    1. 列出可用的网络接口:

      # firewall-cmd --get-active-zones
      Copy to Clipboard Toggle word wrap

      区域的活动是由存在的网络接口或与其配置匹配的源地址范围确定的。默认区域对于未分类的流量处于活跃状态,但如果没有流量匹配其规则,则始终处于活跃状态。

    2. 将一个网络接口分配给所选区域:

      # firewall-cmd --zone=<your_chosen_zone> --change-interface=<interface_name> --permanent
      Copy to Clipboard Toggle word wrap

      将一个网络接口分配给一个区域更适合将一致的防火墙设置应用到特定接口(物理或虚拟)上的所有流量。

      firewall-cmd 命令与 --permanent 选项一起使用时,通常涉及更新 NetworkManager 连接配置文件,以永久更改防火墙配置。firewalld 和 NetworkManager 之间的这种集成确保一致的网络和防火墙设置。

验证

  1. 显示选择区域的更新设置:

    # firewall-cmd --zone=<your_chosen_zone> --list-all
    Copy to Clipboard Toggle word wrap

    命令输出显示所有区域设置,包括分配的服务、网络接口和网络连接(源)。

23.5.7.2. 更改默认区

系统管理员在其配置文件中为网络接口分配区域。如果接口没有被分配给指定区,它将被分配给默认区。每次重启 firewalld 服务后,firewalld 会加载默认区的设置,并使其处于活动状态。请注意,所有其他区域的设置都被保留,并随时可以使用。

通常,NetworkManager 根据 NetworkManager 连接配置文件中的 connection.zone 设置将区域分配给接口。另外,重启后, NetworkManager 管理“激活”这些区域的分配。

先决条件

  • firewalld 服务在运行。

流程

设置默认区:

  1. 显示当前的默认区:

    # firewall-cmd --get-default-zone
    Copy to Clipboard Toggle word wrap
  2. 设置新的默认区:

    # firewall-cmd --set-default-zone <zone_name>
    Copy to Clipboard Toggle word wrap
    注意

    按照此流程,设置是一个永久设置,即使没有 --permanent 选项。

23.5.7.3. 将网络接口分配给区

可以为不同区定义不同的规则集,然后通过更改所使用的接口的区来快速改变设置。使用多个接口,可以为每个具体区设置一个区来区分通过它们的网络流量。

流程

要将区分配给特定的接口:

  1. 列出活跃区以及分配给它们的接口:

    # firewall-cmd --get-active-zones
    Copy to Clipboard Toggle word wrap
  2. 为不同的区分配接口:

    # firewall-cmd --zone=zone_name --change-interface=interface_name --permanent
    Copy to Clipboard Toggle word wrap
23.5.7.4. 添加源

要将传入的流量路由到特定区,请将源添加到那个区。源可以是一个使用 CIDR 格式的 IP 地址或 IP 掩码。

注意

如果您添加多个带有重叠网络范围的区域,则根据区名称排序,且只考虑第一个区。

  • 在当前区中设置源:

    # firewall-cmd --add-source=<source>
    Copy to Clipboard Toggle word wrap
  • 要为特定区设置源 IP 地址:

    # firewall-cmd --zone=zone-name --add-source=<source>
    Copy to Clipboard Toggle word wrap

以下流程允许来自 受信任 区中 192.168.2.15 的所有传入的流量:

流程

  1. 列出所有可用区:

    # firewall-cmd --get-zones
    Copy to Clipboard Toggle word wrap
  2. 将源 IP 添加到持久性模式的信任区中:

    # firewall-cmd --zone=trusted --add-source=192.168.2.15
    Copy to Clipboard Toggle word wrap
  3. 使新设置具有持久性:

    # firewall-cmd --runtime-to-permanent
    Copy to Clipboard Toggle word wrap
23.5.7.5. 删除源

当您从区域删除源时,源自源的流量不再被通过该源指定的规则定向。相反,流量会返回到与它源自的接口关联的区域的规则和设置,或进到默认区域。

流程

  1. 列出所需区的允许源:

    # firewall-cmd --zone=zone-name --list-sources
    Copy to Clipboard Toggle word wrap
  2. 从区永久删除源:

    # firewall-cmd --zone=zone-name --remove-source=<source>
    Copy to Clipboard Toggle word wrap
  3. 使新设置具有持久性:

    # firewall-cmd --runtime-to-permanent
    Copy to Clipboard Toggle word wrap
23.5.7.6. 使用 nmcli 为连接分配区域

您可以使用 nmcli 工具将 firewalld 区域添加到 NetworkManager 连接。

流程

  1. 将区分配给 NetworkManager 连接配置文件:

    # nmcli connection modify profile connection.zone zone_name
    Copy to Clipboard Toggle word wrap
  2. 激活连接:

    # nmcli connection up profile
    Copy to Clipboard Toggle word wrap

当连接由 NetworkManager 管理时,必须了解它使用的区。对于每个网络连接配置文件,可以指定一个区域,其根据带有可移植设备的计算机的位置提供各种防火墙设置的灵活性。因此,可以为不同的位置(如公司或家)指定区域和设置。

流程

  • 要为连接设置一个区,请编辑 /etc/sysconfig/network-scripts/ifcfg-connection_name 文件,并添加将区分配给这个连接的行:

    ZONE=zone_name
    Copy to Clipboard Toggle word wrap
23.5.7.8. 创建一个新区

要使用自定义区,创建一个新的区并使用它像预定义区一样。新区需要 --permanent 选项,否则命令无法工作。

先决条件

  • firewalld 服务在运行。

流程

  1. 创建一个新区:

    # firewall-cmd --permanent --new-zone=zone-name
    Copy to Clipboard Toggle word wrap
  2. 使新区域可用:

    # firewall-cmd --reload
    Copy to Clipboard Toggle word wrap

    命令将最新的更改应用到防火墙配置,而不中断已在运行的网络服务。

验证

  • 检查是否在您的永久设置中添加了新的区:

    # firewall-cmd --get-zones --permanent
    Copy to Clipboard Toggle word wrap
23.5.7.9. 使用 Web 控制台启用区域

您可以通过 RHEL web 控制台对特定接口或 IP 地址范围应用预定义和现有的防火墙区域。

先决条件

  • 已安装 RHEL 8 web 控制台。
  • 您已启用了 cockpit 服务。
  • 您的用户帐户被允许登录到 web 控制台。

    具体步骤请参阅安装并启用 Web 控制台

流程

  1. 登录到 RHEL 8 web 控制台。

    详情请参阅 登录到 web 控制台

  2. Networking
  3. 编辑规则和区域按钮。

    Edit firewall rules and zones in the web console

    如果没有看到 Edit rules and zones 按钮,使用管理员权限登录到 web 控制台。

  4. Firewall 部分,点 Add new zone
  5. Add zone 对话框中,从信任级别选项选择一个区。

    Web 控制台显示 firewalld 服务中预定义的所有区域。

  6. 接口部分,选择一个应用所选区的接口或接口。
  7. Allowed Addresses 部分中,您可以选择是否应用该区:

    • 整个子网
    • 或者以以下格式表示的 IP 地址范围:

      • 192.168.1.0
      • 192.168.1.0/24
      • 192.168.1.0/24, 192.168.1.0
  8. Add zone 按钮。

    Add a firewall zone

验证

  • 检查 Firewall 部分中的配置:

    Active zones

23.5.7.10. 使用 Web 控制台禁用区域

您可以使用 Web 控制台在防火墙配置中禁用防火墙区域。

先决条件

  • 已安装 RHEL 8 web 控制台。
  • 您已启用了 cockpit 服务。
  • 您的用户帐户被允许登录到 web 控制台。

    具体步骤请参阅安装并启用 Web 控制台

流程

  1. 登录到 RHEL 8 web 控制台。

    详情请参阅 登录到 web 控制台

  2. Networking
  3. 编辑规则和区域按钮。

    cockpit edit rules and zones

    如果没有看到 Edit rules and zones 按钮,使用管理员权限登录到 web 控制台。

  4. 点您要删除的区的 Options 图标。

    cockpit delete zone

  5. 单击 Delete

区域现在被禁用,接口不包括在区域中配置的打开的服务和端口。

23.5.7.11. 使用区目标设定传入流量的默认行为

对于每个区,您可以设置一种处理尚未进一步指定的传入流量的默认行为。此行为是通过设置区的目标来定义的。有四个选项:

  • ACCEPT:接受除特定规则不允许的所有传入的数据包。
  • REJECT:拒绝所有传入的数据包,但特定规则允许的数据包除外。当 firewalld 拒绝数据包时,源机器会发出有关拒绝的信息。
  • DROP:除非由特定规则允许,丢弃所有传入数据包。当 firewalld 丢弃数据包时,源机器不知道数据包丢弃的信息。
  • default:与 REJECT 的行为类似,但在某些情况下有特殊含义。

先决条件

  • firewalld 服务在运行。

流程

为区设置目标:

  1. 列出特定区的信息以查看默认目标:

    # firewall-cmd --zone=zone-name --list-all
    Copy to Clipboard Toggle word wrap
  2. 在区中设置一个新目标:

    # firewall-cmd --permanent --zone=zone-name --set-target=<default|ACCEPT|REJECT|DROP>
    Copy to Clipboard Toggle word wrap
23.5.7.12. 使用 IP 集为允许列表配置动态更新

您可以进行接近实时的更新,来灵活地允许 IP 集中特定的 IP 地址或范围,即使在无法预计的情况下也是如此。这些更新可以被各种事件触发,如检测安全威胁或更改网络行为。通常,此类解决方案利用自动化来减少手工工作,并通过快速响应情况来提高安全性。

先决条件

  • firewalld 服务在运行。

流程

  1. 创建一个有有意义名称的 IP 集:

    # firewall-cmd --permanent --new-ipset=allowlist --type=hash:ip
    Copy to Clipboard Toggle word wrap

    名为 allowlist 的新 IP 集包含您希望防火墙允许的 IP 地址。

  2. 向 IP 集添加动态更新:

    # firewall-cmd --permanent --ipset=allowlist --add-entry=198.51.100.10
    Copy to Clipboard Toggle word wrap

    此配置使用新添加的 IP 地址更新防火墙允许传输网络流量的allowlist IP 集。

  3. 创建一个引用之前创建的 IP 集的防火墙规则:

    # firewall-cmd --permanent --zone=public --add-source=ipset:allowlist
    Copy to Clipboard Toggle word wrap

    没有此规则,IP 集不会对网络流量有任何影响。默认防火墙策略将占先。

  4. 重新载入防火墙配置以应用更改:

    # firewall-cmd --reload
    Copy to Clipboard Toggle word wrap

验证

  1. 列出所有 IP 集:

    # firewall-cmd --get-ipsets
    allowlist
    Copy to Clipboard Toggle word wrap
  2. 列出活跃的规则:

    # firewall-cmd --list-all
    public (active)
      target: default
      icmp-block-inversion: no
      interfaces: enp0s1
      sources: ipset:allowlist
      services: cockpit dhcpv6-client ssh
      ports:
      protocols:
      ...
    Copy to Clipboard Toggle word wrap

    命令行输出的 sources 部分提供了对哪些流量源(主机名、接口、IP 集、子网等)被允许或拒绝访问特定防火墙区域的见解。在这种情况下,包含在 allowlist IP 集中的 IP 地址被允许通过防火墙,为 public 区域传输流量。

  3. 探索 IP 集的内容:

    # cat /etc/firewalld/ipsets/allowlist.xml
    <?xml version="1.0" encoding="utf-8"?>
    <ipset type="hash:ip">
      <entry>198.51.100.10</entry>
    </ipset>
    Copy to Clipboard Toggle word wrap

后续步骤

  • 使用脚本或安全工具获取您的威胁情报源,并以一种自动化的方式更新 allowlist

23.5.8. 使用 firewalld 控制网络流量

firewalld 软件包安装了大量预定义的服务文件,您可以添加更多或自定义它们。然后,您可以使用这些服务定义为服务打开或关闭端口,而无需了解协议及它们使用的端口号。

23.5.8.1. 使用 CLI 控制预定义服务的流量

控制流量的最简单的方法是在 firewalld 中添加预定义的服务。这会打开所有必需的端口并根据 服务定义文件 修改其他设置。

先决条件

  • firewalld 服务在运行。

流程

  1. 检查 firewalld 中的服务是否没有被允许:

    # firewall-cmd --list-services
    ssh dhcpv6-client
    Copy to Clipboard Toggle word wrap

    命令列出默认区域中启用的服务。

  2. 列出 firewalld 中所有预定义的服务:

    # firewall-cmd --get-services
    RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry ...
    Copy to Clipboard Toggle word wrap

    命令显示默认区域的可用服务的列表。

  3. 将服务添加到 firewalld 允许的服务的列表中:

    # firewall-cmd --add-service=<service_name>
    Copy to Clipboard Toggle word wrap

    命令将指定的服务添加到默认区域中。

  4. 使新设置具有持久性:

    # firewall-cmd --runtime-to-permanent
    Copy to Clipboard Toggle word wrap

    命令将这些运行时更改应用到防火墙的永久配置中。默认情况下,它将这些更改应用到默认区域的配置中。

验证

  1. 列出所有永久防火墙规则:

    # firewall-cmd --list-all --permanent
    public
      target: default
      icmp-block-inversion: no
      interfaces:
      sources:
      services: cockpit dhcpv6-client ssh
      ports:
      protocols:
      forward: no
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:
    Copy to Clipboard Toggle word wrap

    命令显示带有默认防火墙区域(public)的永久防火墙规则的完整配置。

  2. 检查 firewalld 服务的永久配置的有效性。

    # firewall-cmd --check-config
    success
    Copy to Clipboard Toggle word wrap

    如果永久配置无效,命令返回一个带有更多详情的错误:

    # firewall-cmd --check-config
    Error: INVALID_PROTOCOL: 'public.xml': 'tcpx' not from {'tcp'|'udp'|'sctp'|'dccp'}
    Copy to Clipboard Toggle word wrap

    您还可以手动检查永久配置文件,以验证设置。主配置文件为 /etc/firewalld/firewalld.conf。特定于区域的配置文件位于 /etc/firewalld/zones/ 目录中,策略位于 /etc/firewalld/policies/ 目录中。

23.5.8.2. 使用 Web 控制台在防火墙上启用服务

默认情况下,服务添加到默认防火墙区。如果在更多网络接口中使用更多防火墙区,您必须首先选择一个区域,然后添加带有端口的服务。

RHEL 8 web 控制台显示预定义的 firewalld 服务,您可以将其添加到活跃的防火墙区。

重要

RHEL 8 web 控制台配置 firewalld 服务。

Web 控制台不允许没有在 web 控制台中列出的通用 firewalld 规则。

先决条件

  • 已安装 RHEL 8 web 控制台。
  • 您已启用了 cockpit 服务。
  • 您的用户帐户被允许登录到 web 控制台。

    具体步骤请参阅安装并启用 Web 控制台

流程

  1. 登录到 RHEL 8 web 控制台。

    详情请参阅 登录到 web 控制台

  2. Networking
  3. 编辑规则和区域按钮。

    cockpit edit rules and zones

    如果没有看到 Edit rules and zones 按钮,使用管理员权限登录到 web 控制台。

  4. Firewall 部分,选择要添加该服务的区,然后点击 Add Services

    cockpit add services

  5. Add Services 对话框中,找到您要在防火墙中启用的服务。
  6. 根据您的场景启用服务:

    cockpit add service

  7. Add Services

此时,RHEL 8 web 控制台在区域的服务列表中显示该服务。

23.5.8.3. 使用 Web 控制台配置自定义端口

您可以通过 RHEL web 控制台为服务配置自定义端口。

先决条件

  • 您已安装了 RHEL 8 web 控制台。
  • 您已启用了 cockpit 服务。
  • 您的用户帐户被允许登录到 web 控制台。

    具体步骤请参阅安装并启用 Web 控制台

  • firewalld 服务在运行。

流程

  1. 登录到 RHEL 8 web 控制台。

    详情请参阅 登录到 web 控制台

  2. Networking
  3. 编辑规则和区域按钮。

    cockpit edit rules and zones

    如果没有看到 Edit rules and zones 按钮,使用管理员权限登录到 web 控制台。

  4. Firewall 部分,选择要配置自定义端口的区域,并点 Add Services

    RHEL web console: Add services

  5. Add services 对话框中,点 Custom Ports 单选按钮。
  6. 在 TCP 和 UDP 字段中,根据示例添加端口。您可以使用以下格式添加端口:

    • 端口号,如 22
    • 端口号范围,如 5900-5910
    • 别名,比如 nfs, rsync
    注意

    您可以在每个字段中添加多个值。值必须用逗号分开,且没有空格,例如:8080,8081,http

  7. TCP 文件、UDP 文件或两者中添加端口号后,在 Name 字段中验证服务名称。

    Name 字段显示保留此端口的服务名称。如果您确定这个端口可用,且不需要在该端口上通信,则可以重写名称。

  8. Name 字段中,为服务添加一个名称,包括定义的端口。
  9. 添加端口 按钮。

    RHEL web console: Add ports

要验证设置,请进入防火墙页面,并在区域的服务列表中找到该服务。

RHEL web console: Active zones

23.5.9. 在区域间过滤转发的流量

firewalld 可让您控制不同 firewalld 区域之间的网络数据流。通过定义规则和策略,您可以管理流量在这些区域之间移动时是如何被允许或被拒绝的。

策略对象功能在 firewalld 中提供转发和输出过滤。您可以使用 firewalld 过滤不同区域之间的流量,以允许访问本地托管的虚拟机来连接主机。

23.5.9.1. 策略对象和区域之间的关系

策略对象允许用户将 firewalld 的原语(如服务、端口和富规则)附加到策略。您可以将策略对象应用到以有状态和单向的方式在区域间传输的流量上。

# firewall-cmd --permanent --new-policy myOutputPolicy

# firewall-cmd --permanent --policy myOutputPolicy --add-ingress-zone HOST

# firewall-cmd --permanent --policy myOutputPolicy --add-egress-zone ANY
Copy to Clipboard Toggle word wrap

HOSTANY 是 ingress 和 egress 区域列表中使用的符号区域。

  • HOST 符号区域对于来自运行 firewalld 的主机的流量,或具有到运行 firewalld 的主机的流量允许策略。
  • ANY 符号区对所有当前和将来的区域应用策略。ANY 符号区域充当所有区域的通配符。
23.5.9.2. 使用优先级对策略进行排序

多个策略可以应用到同一组流量,因此应使用优先级为可能应用的策略创建优先级顺序。

要设置优先级来对策略进行排序:

# firewall-cmd --permanent --policy mypolicy --set-priority -500
Copy to Clipboard Toggle word wrap

在上例中,-500 是较低的优先级值,但具有较高的优先级。因此,-500 将在 -100 之前执行。

较低数字的优先级值具有较高的优先级,被首先应用。

策略对象功能允许用户过滤 Podman 和 firewalld 区域之间的流量。

注意

红帽建议默认阻止所有流量,并打开 Podman 工具所需的可选择的服务。

流程

  1. 创建一个新的防火墙策略:

    # firewall-cmd --permanent --new-policy podmanToAny
    Copy to Clipboard Toggle word wrap
  2. 阻止从 Podman 到其它区域的所有流量,并只允许 Podman 上必要的服务:

    # firewall-cmd --permanent --policy podmanToAny --set-target REJECT
    # firewall-cmd --permanent --policy podmanToAny --add-service dhcp
    # firewall-cmd --permanent --policy podmanToAny --add-service dns
    # firewall-cmd --permanent --policy podmanToAny --add-service https
    Copy to Clipboard Toggle word wrap
  3. 创建一个新的 Podman 区域:

    # firewall-cmd --permanent --new-zone=podman
    Copy to Clipboard Toggle word wrap
  4. 为策略定义 ingress 区域:

    # firewall-cmd --permanent --policy podmanToHost --add-ingress-zone podman
    Copy to Clipboard Toggle word wrap
  5. 为所有其他区域定义 egress 区域:

    # firewall-cmd --permanent --policy podmanToHost --add-egress-zone ANY
    Copy to Clipboard Toggle word wrap

    将 egress 区域设置为 ANY 意味着您可以从 Podman 过滤到其他区域。如果要过滤到主机,请将 egress 区域设置为 HOST。

  6. 重启 firewalld 服务:

    # systemctl restart firewalld
    Copy to Clipboard Toggle word wrap

验证

  • 验证到其他区域的 Podman 防火墙策略:

    # firewall-cmd --info-policy podmanToAny
    podmanToAny (active)
      ...
      target: REJECT
      ingress-zones: podman
      egress-zones: ANY
      services: dhcp dns https
      ...
    Copy to Clipboard Toggle word wrap
23.5.9.4. 设置策略对象的默认目标

您可以为策略指定 --set-target 选项。可用的目标如下:

  • ACCEPT - 接受数据包
  • DROP - 丢弃不需要的数据包
  • REJECT - 拒绝不需要的数据包,并带有 ICMP 回复
  • CONTINUE(默认)- 数据包将遵循以下策略和区域中的规则。

    # firewall-cmd --permanent --policy mypolicy --set-target CONTINUE
    Copy to Clipboard Toggle word wrap

验证

  • 验证有关策略的信息

    # firewall-cmd --info-policy mypolicy
    Copy to Clipboard Toggle word wrap

23.5.10. 使用 firewalld 配置 NAT

使用 firewalld,您可以配置以下网络地址转换(NAT)类型:

  • 伪装
  • 目标 NAT(DNAT)
  • 重定向
23.5.10.1. 网络地址转换类型

这些是不同的网络地址转换(NAT)类型:

伪装

使用以上 NAT 类型之一更改数据包的源 IP 地址。例如,互联网服务提供商(ISP)不会路由私有 IP 范围,如 10.0.0.0/8。如果您在网络中使用私有 IP 范围,用户应该能够访问互联网上的服务器,请将来自这些范围的数据包的源 IP 地址映射为公共 IP 地址。

伪装自动使用传出接口的 IP 地址。因此,如果传出接口使用了动态 IP 地址,则使用伪装。

目标 NAT(DNAT)
使用此 NAT 类型重写传入数据包的目标地址和端口。例如,如果您的 Web 服务器使用来自私有 IP 范围的 IP 地址,因此无法直接从互联网访问,您可以在路由器上设置 DNAT 规则,来将传入的流量重定向到此服务器。
重定向
这个类型是 DNAT 的一种特殊情况,其将数据包重定向到本地计算机上的不同端口。例如,如果服务运行在与其标准端口不同的端口上,您可以将传入的流量从标准端口重定向到此特定端口。
23.5.10.2. 配置 IP 地址伪装

您可以在系统上启用 IP 伪装。在访问互联网时,IP 伪装会隐藏网关后面的单个机器。

流程

  1. 要检查是否启用了 IP 伪装(例如,对于 external 区),以 root 用户身份输入以下命令:

    # firewall-cmd --zone=external --query-masquerade
    Copy to Clipboard Toggle word wrap

    如果已启用,命令将会打印 yes,且退出状态为 0。否则,将打印 no ,且退出状态为 1。如果省略了 zone,则将使用默认区。

  2. 要启用 IP 伪装,请以 root 用户身份输入以下命令:

    # firewall-cmd --zone=external --add-masquerade
    Copy to Clipboard Toggle word wrap
  3. 要使此设置持久,请将 --permanent 选项传给命令。
  4. 要禁用 IP 伪装,请以 root 身份输入以下命令:

    # firewall-cmd --zone=external --remove-masquerade
    Copy to Clipboard Toggle word wrap

    要使此设置永久生效,请将 --permanent 选项传给命令。

23.5.10.3. 使用 DNAT 转发传入的 HTTP 流量

您可以使用目标网络地址转换(DNAT)将传入的流量从一个目标地址和端口定向到另一个目标地址和端口。通常,这对于将来自外部网络接口的传入请求重定向到特定的内部服务器或服务非常有用。

先决条件

  • firewalld 服务在运行。

流程

  1. 转发传入的 HTTP 流量:

    # firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toaddr=198.51.100.10:toport=8080 --permanent
    Copy to Clipboard Toggle word wrap

    之前的命令使用以下设置定义 DNAT 规则:

    • --zone=public - 您为其配置 DNAT 规则的防火墙区域。您可以将其调整到您需要的任何区域。
    • --add-forward-port - 指示您正在添加端口转发规则的选项。
    • port=80 - 外部目标端口。
    • proto=tcp - 表示您转发 TCP 流量的协议。
    • toaddr=198.51.100.10 - 目标 IP 地址。
    • toport=8080 - 内部服务器的目标端口。
    • --permanent - 使 DNAT 规则在重启后保持不变的选项。
  2. 重新载入防火墙配置以应用更改:

    # firewall-cmd --reload
    Copy to Clipboard Toggle word wrap

验证

  • 验证您使用的用于防火墙区域的 DNAT 规则:

    # firewall-cmd --list-forward-ports --zone=public
    port=80:proto=tcp:toport=8080:toaddr=198.51.100.10
    Copy to Clipboard Toggle word wrap

    或者,查看相应的 XML 配置文件:

    # cat /etc/firewalld/zones/public.xml
    <?xml version="1.0" encoding="utf-8"?>
    <zone>
      <short>Public</short>
      <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
      <service name="ssh"/>
      <service name="dhcpv6-client"/>
      <service name="cockpit"/>
      <forward-port port="80" protocol="tcp" to-port="8080" to-addr="198.51.100.10"/>
      <forward/>
    </zone>
    Copy to Clipboard Toggle word wrap

您可以使用重定向机制使在非标准端口上内部运行的 Web 服务可访问,而无需用户在 URL 中指定端口。因此,URL 更简单,并提供更好的浏览体验,而非标准端口仍在内部或用于特定的要求。

先决条件

  • firewalld 服务在运行。

流程

  1. 创建 NAT 重定向规则:

    # firewall-cmd --zone=public --add-forward-port=port=<standard_port>:proto=tcp:toport=<non_standard_port> --permanent
    Copy to Clipboard Toggle word wrap

    之前的命令使用以下设置定义 NAT 重定向规则:

    • --zone=public - 您为其配置规则的防火墙区域。您可以将其调整到您需要的任何区域。
    • --add-forward-port=port=<non_standard_port> - 指示您正在使用最初接收传入流量的源端口添加端口转发(重定向)规则。
    • proto=tcp - 表示您重定向 TCP 流量的协议。
    • toport=<standard_port> - 目标端口,在源端口上收到传入流量后,应将其重定向到的端口。
    • --permanent - 使规则在重启后保持不变的选项。
  2. 重新载入防火墙配置以应用更改:

    # firewall-cmd --reload
    Copy to Clipboard Toggle word wrap

验证

  • 验证您使用的防火墙区域的重定向规则:

    # firewall-cmd --list-forward-ports
    port=8080:proto=tcp:toport=80:toaddr=
    Copy to Clipboard Toggle word wrap

    或者,查看相应的 XML 配置文件:

    # cat /etc/firewalld/zones/public.xml
    <?xml version="1.0" encoding="utf-8"?>
    <zone>
      <short>Public</short>
      <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
      <service name="ssh"/>
      <service name="dhcpv6-client"/>
      <service name="cockpit"/>
      <forward-port port="8080" protocol="tcp" to-port="80"/>
      <forward/>
    </zone>
    Copy to Clipboard Toggle word wrap

23.5.11. 丰富规则的优先级

富规则提供了一种更高级且更灵活的方法来定义防火墙规则。富规则特别有用,其中服务、端口等服务不足以表达复杂的防火墙规则。

富规则背后的概念:

粒度和灵活性
您可以根据更为具体的标准为网络流量定义详细条件。
规则结构

富规则由家族(IPv4 或 IPv6)组成,后跟条件和操作。

rule family="ipv4|ipv6" [conditions] [actions]
Copy to Clipboard Toggle word wrap
conditions
它们允许富规则仅在符合特定条件时才适用。
操作
您可以定义与条件匹配的网络流量发生的情况。
组合多个条件
您可以创建更为具体的和复杂的过滤。
分层控制和可重复利用
您可以将丰富的规则与其他防火墙机制(如区域或服务)相结合。

默认情况下,富规则是根据其规则操作进行组织的。例如,deny 规则优先于 allow 规则。富规则中的 priority 参数可让管理员对富规则及其执行顺序进行精细的控制。在使用 priority 参数时,规则首先按其优先级值以升序排序。当更多的规则有同样的 优先级 时,其顺序是由规则行动决定的,如果行动也相同,则顺序可以是未定义。

您可以在富规则中将 priority 参数设置为 -3276832767 之间的任意数,较低的数值具有较高的优先级。

firewalld 服务根据优先级值将规则组织到不同的链中:

  • 优先级低于 0:规则被重定向到带有 _pre 后缀的链中。
  • 优先级高于 0:规则被重定向到带有 _post 后缀的链中。
  • 优先级等于 0:根据操作,规则会被重定向到带有 _log_deny_allow 操作的链中。

在这些子链中,firewalld 根据其优先级值对规则进行排序。

23.5.11.2. 设置丰富的规则的优先级

以下是如何创建一条富规则的示例,该规则使用 priority 参数来记录其他规则不允许或拒绝的所有流量。您可以使用此规则标记意非预期的流量。

流程

  • 添加一个带有非常低优先级的丰富规则来记录未由其他规则匹配的所有流量:

    # firewall-cmd --add-rich-rule='rule priority=32767 log prefix="UNEXPECTED: " limit value="5/m"'
    Copy to Clipboard Toggle word wrap

    这个命令还将日志条目数量限制为每分钟 5 条。

验证

  • 显示命令在上一步中创建的 nftables 规则:

    # nft list chain inet firewalld filter_IN_public_post
    table inet firewalld {
      chain filter_IN_public_post {
        log prefix "UNEXPECTED: " limit rate 5/minute
      }
    }
    Copy to Clipboard Toggle word wrap

区内转发是 firewalld 的一种功能,它允许 firewalld 区域内接口或源之间的流量转发。

启用区域内转发后,单个 firewalld 区域中的流量可以从一个接口或源流到另一个接口或源。区指定接口和源的信任级别。如果信任级别相同,流量会保持在同一区域内。

注意

firewalld 的默认区域中启用区域内转发仅适用于添加到当前默认区域的接口和源。

firewalld 使用不同的区域管理传入和传出流量。每个区域都有自己的一组规则和行为。例如,trusted 区域默认允许所有转发的流量。

其他区域可以有不同的默认行为。在标准区域中,当区域的目标被设置为 default 时,转发的流量通常默认被丢弃。

要控制流量如何在区域内的不同接口或源之间转发,请确保您理解并相应地配置了区域的目标。

您可以使用区内转发来在同一 firewalld 区内的接口和源之间转发流量。此功能带来以下好处:

  • 有线设备和无线设备间的无缝连接(您可以在连接到 enp1s0 的以太网网络和连接到 wlp0s20 的 Wi-Fi 网络之间转发流量)
  • 支持灵活的工作环境
  • 可被网络中的多个设备或用户访问和使用的共享资源(如打印机、数据库、网络连接的存储等)
  • 高效的内部网络(如顺畅通信、减少的延迟、资源可访问性等)

您可以为单个 firewalld 区域启用此功能。

流程

  1. 在内核中启用数据包转发:

    # echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf
    # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
    Copy to Clipboard Toggle word wrap
  2. 确保您要在其间启用区域内转发的接口只分配到 internal 区域:

    # firewall-cmd --get-active-zones
    Copy to Clipboard Toggle word wrap
  3. 如果接口当前被分配给了不是 internal 的区,请重新分配它:

    # firewall-cmd --zone=internal --change-interface=interface_name --permanent
    Copy to Clipboard Toggle word wrap
  4. enp1s0wlp0s20 接口添加到 internal 区:

    # firewall-cmd --zone=internal --add-interface=enp1s0 --add-interface=wlp0s20
    Copy to Clipboard Toggle word wrap
  5. 启用区域内部转发:

    # firewall-cmd --zone=internal --add-forward
    Copy to Clipboard Toggle word wrap

验证

以下验证要求 nmap-ncat 软件包已安装在两个主机上。

  1. 登录到与您启用了区域转发的主机的 enp1s0 接口位于同一网络的主机。
  2. 使用 ncat 启动 echo 服务来测试连接:

    # ncat -e /usr/bin/cat -l 12345
    Copy to Clipboard Toggle word wrap
  3. 登录到与 wlp0s20 接口在同一网络的主机。
  4. 连接到在与 enp1s0 在同一网络的主机上运行的 echo 服务器:

    # ncat <other_host> 12345
    Copy to Clipboard Toggle word wrap
  5. 输入一些内容并按 Enter。验证文本是否被发送回来。

23.5.13. 使用 RHEL 系统角色配置 firewalld

RHEL 系统角色是 Ansible 自动化工具的一组内容。此内容与 Ansible 自动化工具一起提供一个一致的配置接口,来一次远程管理多个系统。

rhel-system-roles 软件包包含 rhel-system-roles.firewall RHEL 系统角色。此角色是为了自动配置 firewalld 服务而引入的。

使用 firewall RHEL 系统角色,您可以配置许多不同的 firewalld 参数,例如:

  • 区域
  • 应允许数据包的服务
  • 授予、拒绝或丢弃访问端口的流量
  • 区域的端口或端口范围的转发

随着时间的推移,对防火墙配置的更新可能会积累到一定程度,从而导致意外的安全风险。使用 firewall RHEL 系统角色,您可以以一种自动的方式将 firewalld 设置重置为其默认状态。这样,您可以有效地删除任何无意的或不安全的防火墙规则,并简化其管理。

先决条件

步骤

  1. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    ---
    - name: Reset firewalld example
      hosts: managed-node-01.example.com
      tasks:
        - name: Reset firewalld
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.firewall
          vars:
            firewall:
              - previous: replaced
    Copy to Clipboard Toggle word wrap

    示例 playbook 中指定的设置包括以下内容:

    previous: replaced

    删除所有现有的用户定义的设置,并将 firewalld 设置重置为默认值。如果将 previous:replaced 参数与其他设置相结合,则 firewall 角色会在应用新设置前删除所有现有设置。

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.firewall/README.md 文件。

  2. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    请注意,这个命令只验证语法,不会防止错误但有效的配置。

  3. 运行 playbook:

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

验证

  • 在控制节点上运行这个命令,来远程检查受管节点上的所有防火墙配置是否已被重置为其默认值:

    # ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-all-zones'
    Copy to Clipboard Toggle word wrap

您可以使用 firewall RHEL 系统角色进行远程配置,将传入流量从一个本地端口转发到不同的本地端口。

例如,如果您有一个环境,其中同一机器上有多个服务共存且需要同样的默认端口,则可能会出现端口冲突。这些冲突可能会破坏服务并导致停机。使用 firewall RHEL 系统角色,您可以有效地将流量转发到替代端口,以确保您的服务可以同时运行,而无需修改其配置。

先决条件

步骤

  1. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    ---
    - name: Configure firewalld
      hosts: managed-node-01.example.com
      tasks:
        - name: Forward incoming traffic on port 8080 to 443
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.firewall
          vars:
            firewall:
              - forward_port: 8080/tcp;443;
                state: enabled
                runtime: true
                permanent: true
    Copy to Clipboard Toggle word wrap

    示例 playbook 中指定的设置包括以下内容:

    forward_port :8080/tcp;443
    使用 TCP 协议到达本地端口 8080 的流量被转发到端口 443。
    runtime: true

    启用运行时配置中的更改。默认值被设置为 true

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.firewall/README.md 文件。

  2. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    请注意,这个命令只验证语法,不会防止错误但有效的配置。

  3. 运行 playbook:

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

验证

  • 在控制节点上,运行以下命令远程检查受管节点上的转发端口:

    # ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-forward-ports'
    managed-node-01.example.com | CHANGED | rc=0 >>
    port=8080:proto=tcp:toport=443:toaddr=
    Copy to Clipboard Toggle word wrap

作为系统管理员,您可以使用 firewall RHEL 系统角色在 enp1s0 接口上配置 dmz 区域,以允许到区域的 HTTPS 流量。这样,您可以让外部用户访问您的 web 服务器。

先决条件

步骤

  1. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    ---
    - name: Configure firewalld
      hosts: managed-node-01.example.com
      tasks:
        - name: Creating a DMZ with access to HTTPS port and masquerading for hosts in DMZ
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.firewall
          vars:
            firewall:
              - zone: dmz
                interface: enp1s0
                service: https
                state: enabled
                runtime: true
                permanent: true
    Copy to Clipboard Toggle word wrap

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.firewall/README.md 文件。

  2. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    请注意,这个命令只验证语法,不会防止错误但有效的配置。

  3. 运行 playbook:

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

验证

  • 在控制节点上,运行以下命令远程检查受管节点上 dmz 区域的信息:

    # ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --zone=dmz --list-all'
    managed-node-01.example.com | CHANGED | rc=0 >>
    dmz (active)
      target: default
      icmp-block-inversion: no
      interfaces: enp1s0
      sources:
      services: https ssh
      ports:
      protocols:
      forward: no
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
    Copy to Clipboard Toggle word wrap

23.6. nftables 入门

nftables 框架对数据包进行分类,它是 iptablesip6tablesarptablesebtablesipset 实用程序的后续者。与之前的数据包过滤工具相比,它在方便、特性和性能方面提供了大量改进,最重要的是:

  • 内置查找表而不是线性处理
  • IPv4IPv6 协议的单一框架
  • 规则会以一个整体被应用,而不是分为抓取、更新和存储完整的规则集的步骤
  • 支持在规则集(nftrace)和监控追踪事件(nft)中调试和追踪
  • 更加一致和压缩的语法,没有特定协议的扩展
  • 用于第三方应用程序的 Netlink API

nftables 框架使用表来存储链。链包含执行动作的独立规则。nft 工具替换了之前数据包过滤框架中的所有工具。您可以使用 libnftnl 库通过 libmnl 库来处理 nftables Netlink API 的低级别交互。

要显示规则集变化的影响,请使用 nft list ruleset 命令。由于这些工具向 nftables 规则集添加表、链、规则、集合和其他对象,请注意 nftables 规则集的操作(如 nft flush ruleset 命令)可能会影响使用 iptables 命令安装的规则集。

23.6.1. 创建和管理 nftables 表、链和规则

您可以显示 nftables 规则集并管理它们。

23.6.1.1. nftables 表的基础知识

nftables 中的表是一个包含链、规则、集合和其他对象集合的名字空间。

每个表都必须分配一个地址系列。地址系列定义此表处理的数据包类型。在创建表时,您可以设置以下地址系列之一:

  • ip:仅匹配 IPv4 数据包。如果没有指定地址系列,这是默认设置。
  • ip6 :仅匹配 IPv6 数据包.
  • inet:匹配 IPv4 和 IPv6 数据包。
  • arp:匹配 IPv4 地址解析协议(ARP)数据包。
  • bridge:匹配通过网桥设备的数据包。
  • netdev:匹配来自 ingress 的数据包。

如果要添加表,所使用的格式取决于您的防火墙脚本:

  • 在原生语法的脚本中,使用:

    table <table_address_family> <table_name> {
    }
    Copy to Clipboard Toggle word wrap
  • 在 shell 脚本中,使用:

    nft add table <table_address_family> <table_name>
    Copy to Clipboard Toggle word wrap
23.6.1.2. nftables 链的基础知识

表由链组成,链又是规则的容器。存在以下两种规则类型:

  • 基本链 :您可以使用基本链作为来自网络堆栈的数据包的入口点。
  • 常规链 :您可以将常规链用作 jump 目标来更好地组织规则。

如果要向表中添加基本链,所使用的格式取决于您的防火墙脚本:

  • 在原生语法的脚本中,使用:

    table <table_address_family> <table_name> {
      chain <chain_name> {
        type <type> hook <hook> priority <priority>
        policy <policy> ;
      }
    }
    Copy to Clipboard Toggle word wrap
  • 在 shell 脚本中,使用:

    nft add chain <table_address_family> <table_name> <chain_name> { type <type> hook <hook> priority <priority> \; policy <policy> \; }
    Copy to Clipboard Toggle word wrap

    为了避免 shell 将分号解释为命令的结尾,请将 \ 转义字符放在分号前面。

这两个示例都创建 基本链。要创建 常规链,请不要在大括号中设置任何参数。

链类型

以下是链类型以及您可以使用的地址系列和钩子的概述:

Expand
类型地址系列钩子描述

filter

all

all

标准链类型

nat

ip,ip6,inet

preroutinginputoutputpostrouting

这个类型的链根据连接跟踪条目执行原生地址转换。只有第一个数据包会遍历此链类型。

route

ip,ip6

output

如果 IP 头的相关部分已更改,则接受的遍历此链类型的数据包会导致新的路由查找。

链优先级

priority 参数指定数据包遍历具有相同 hook 值的链的顺序。您可以将此参数设为整数值,或使用标准优先级名称。

以下列表是标准优先级名称及其数字值的一个概述,以及您可以使用它们的哪个地址系列和钩子:

Expand
文本值数字值地址系列钩子

raw

-300

ip,ip6,inet

all

mangle

-150

ip,ip6,inet

all

dstnat

-100

ip,ip6,inet

prerouting

-300

bridge

prerouting

filter

0

ip,ip6,inet,arp,netdev

all

-200

bridge

all

安全

50

ip,ip6,inet

all

srcnat

100

ip,ip6,inet

postrouting

300

bridge

postrouting

out

100

bridge

output

链策略

链策略定义 nftables 是否应该接受或丢弃数据包(如果此链中的规则没有指定任何操作)。您可以在链中设置以下策略之一:

  • accept (默认)
  • drop
23.6.1.3. nftables 规则的基础知识

规则定义要在传递包含此规则的链的数据包上执行操作。如果规则还包含匹配的表达式,nftables 仅在所有之前的表达式都应用时才执行操作。

如果要在链中添加规则,要使用的格式取决于您的防火墙脚本:

  • 在原生语法的脚本中,使用:

    table <table_address_family> <table_name> {
      chain <chain_name> {
        type <type> hook <hook> priority <priority> ; policy <policy> ;
          <rule>
      }
    }
    Copy to Clipboard Toggle word wrap
  • 在 shell 脚本中,使用:

    nft add rule <table_address_family> <table_name> <chain_name> <rule>
    Copy to Clipboard Toggle word wrap

    此 shell 命令在链末尾附加新规则。如果要在链开始时添加规则,请使用 nft insert 命令而不是 nft add

23.6.1.4. 使用 nft 命令管理表、链和规则

要在命令行或 shell 脚本中管理 nftables 防火墙,请使用 nft 工具。

重要

此流程中的命令不代表典型的工作流,且不会被优化。此流程演示了如何使用 nft 命令管理表、链和规则。

流程

  1. 使用 inet 地址系列创建一个名为 nftables_svc 的表,以便表可以处理 IPv4 和 IPv6 数据包:

    # nft add table inet nftables_svc
    Copy to Clipboard Toggle word wrap
  2. 将名为 INPUT 的基本链(用于处理传入的网络流量)添加到 inet nftables_svc 表中:

    # nft add chain inet nftables_svc INPUT { type filter hook input priority filter \; policy accept \; }
    Copy to Clipboard Toggle word wrap

    为了避免 shell 将分号解释为命令的结尾,请使用 \ 字符转义分号。

  3. INPUT 链中添加规则。例如,允许端口 22 和 443 上的传入 TCP 流量,以及作为 INPUT 链的最后一个规则,拒绝其他带有互联网控制消息协议(ICMP)端口无法访问的消息的流量:

    # nft add rule inet nftables_svc INPUT tcp dport 22 accept
    # nft add rule inet nftables_svc INPUT tcp dport 443 accept
    # nft add rule inet nftables_svc INPUT reject with icmpx type port-unreachable
    Copy to Clipboard Toggle word wrap

    如果您输入 nft add rule 命令,nft 会将规则按与运行命令相同的顺序添加规则。

  4. 显示包括句柄的当前规则集:

    # nft -a list table inet nftables_svc
    table inet nftables_svc { # handle 13
      chain INPUT { # handle 1
        type filter hook input priority filter; policy accept;
        tcp dport 22 accept # handle 2
        tcp dport 443 accept # handle 3
        reject # handle 4
      }
    }
    Copy to Clipboard Toggle word wrap
  5. 在带有句柄 3 的现有规则前面插入规则。例如,要插入一个允许端口 636 上 TCP 流量的规则,请输入:

    # nft insert rule inet nftables_svc INPUT position 3 tcp dport 636 accept
    Copy to Clipboard Toggle word wrap
  6. 使用句柄 3 在现有规则后面附加规则。例如,要插入一个允许端口 80 上 TCP 流量的规则,请输入:

    # nft add rule inet nftables_svc INPUT position 3 tcp dport 80 accept
    Copy to Clipboard Toggle word wrap
  7. 再次使用 handle 显示规则集。验证后续添加的规则是否已添加到指定位置:

    # nft -a list table inet nftables_svc
    table inet nftables_svc { # handle 13
      chain INPUT { # handle 1
        type filter hook input priority filter; policy accept;
        tcp dport 22 accept # handle 2
        tcp dport 636 accept # handle 5
        tcp dport 443 accept # handle 3
        tcp dport 80 accept # handle 6
        reject # handle 4
      }
    }
    Copy to Clipboard Toggle word wrap
  8. 删除带有句柄 6 的规则:

    # nft delete rule inet nftables_svc INPUT handle 6
    Copy to Clipboard Toggle word wrap

    要删除规则,您必须指定句柄。

  9. 显示规则集,并验证删除的规则不再存在:

    # nft -a list table inet nftables_svc
    table inet nftables_svc { # handle 13
      chain INPUT { # handle 1
        type filter hook input priority filter; policy accept;
        tcp dport 22 accept # handle 2
        tcp dport 636 accept # handle 5
        tcp dport 443 accept # handle 3
        reject # handle 4
      }
    }
    Copy to Clipboard Toggle word wrap
  10. INPUT 链中删除所有剩余的规则:

    # nft flush chain inet nftables_svc INPUT
    Copy to Clipboard Toggle word wrap
  11. 显示规则集,并验证 INPUT 链是否为空:

    # nft list table inet nftables_svc
    table inet nftables_svc {
      chain INPUT {
        type filter hook input priority filter; policy accept
      }
    }
    Copy to Clipboard Toggle word wrap
  12. 删除 INPUT 链:

    # nft delete chain inet nftables_svc INPUT
    Copy to Clipboard Toggle word wrap

    您还可以使用此命令删除仍然包含规则的链。

  13. 显示规则集,并验证 INPUT 链已被删除:

    # nft list table inet nftables_svc
    table inet nftables_svc {
    }
    Copy to Clipboard Toggle word wrap
  14. 删除 nftables_svc 表:

    # nft delete table inet nftables_svc
    Copy to Clipboard Toggle word wrap

    您还可以使用此命令删除仍然包含链的表。

    注意

    要删除整个规则集,请使用 nft flush ruleset 命令,而不是手动删除独立命令中的所有规则、链和表。

23.6.2. 从 iptables 迁移到 nftables

如果您的防火墙配置仍然使用 iptables 规则,则您可以将 iptables 规则迁移到 nftables

23.6.2.1. 使用 firewalld、nftables 或者 iptables 时

以下是您应该使用以下工具之一的概述:

  • firewalld:使用 firewalld 实用程序进行简单防火墙用例。此工具易于使用,并涵盖了这些场景的典型用例。
  • nftables:使用 nftables 实用程序设置复杂和高性能的防火墙,如为整个网络设置。
  • iptables:Red Hat Enterprise Linux 上的 iptables 工具使用 nf_tables 内核 API 而不是 传统的 后端。The nf_tables API 提供向后兼容性,因此使用 iptables 命令的脚本仍可在 Red Hat Enterprise Linux 上工作。对于新的防火墙脚本,红帽建议使用 nftables
重要

要防止不同的与防火墙相关的服务(firewalldnftablesiptables)相互影响,请在 RHEL 主机上仅运行其中一个服务,并禁用其他服务。

23.6.2.2. nftables 框架中的概念

iptables 框架相比,nftables 提供了更加现代化、高效且更灵活的替代选择。与 iptables 相比,有几个提供高级功能和改进的概念和功能。这些增强功能简化了规则管理,并改进性能,使 nftables 成为复杂和高性能网络环境的现代替代方案。

nftables 框架包含以下组件:

表和命名空间
nftables 中,表代表组织单元或命名空间,它们将相关的防火墙链、集合、流tables 和其他对象分组在一起。在 nftables 中,表提供了一种更灵活的方法来结构防火墙规则和相关组件。在 iptables 中,表更严格地定义在特定目的。
表系列
nftables 中的每个表都与特定系列关联(ipip6inetarpbridgenetdev)。此关联决定了表可以处理哪些数据包。例如,