Red Hat Training

A Red Hat training course is available for RHEL 8

15.7. 在 IBM Z 上设置 IBM Secure Execution

当使用 IBM Z 硬件来运行 RHEL 8 主机时,您可以通过为虚拟机配置 IBM 安全执行来提高虚拟机(VM)的安全性。

IBM Secure Execution(也称 Protected Virtualization)可防止主机系统访问虚拟机的状态和内存内容。因此,即使主机被攻击,也无法用作攻击客户端操作系统的向量。另外,安全执行也可以用来防止不可信主机从虚拟机获取敏感信息。

以下流程描述了如何将 IBM Z 主机上的现有虚拟机转换为安全虚拟机。

先决条件

  • 系统硬件是以下之一:

    • IBM z15 或更高版本
    • IBM LinuxONE III 或更高版本
  • 为您的系统启用安全执行功能。要验证,请使用:

    # grep facilities /proc/cpuinfo | grep 158

    如果这个命令显示任何输出,代表您的 CPU 与安全执行兼容。

  • 内核包含对安全执行的支持。要确认,请使用:

    # ls /sys/firmware | grep uv

    如果命令生成任何输出,那么内核支持安全执行。

  • 主机 CPU 型号包含 解包 功能。要确认,请使用:

    # virsh domcapabilities | grep unpack
    <feature policy='require' name='unpack'/>

    如果命令生成上述输出,则您的 CPU 主机型号与安全执行兼容。

  • 虚拟机的 CPU 模式设置为 host-model。若要对此进行确认,请使用以下命令,并将 vm-name 替换为您的虚拟机的名称:

    # virsh dumpxml vm-name | grep "<cpu mode='host-model'/>"

    如果命令生成任何输出,则虚拟机的 CPU 模式设置正确。

  • 您已获取并验证了 IBM Z 主机密钥文档。有关此操作的说明,请参阅 IBM 文档中的 验证主机密钥文档

流程

在主机上 执行以下步骤:

  1. prot_virt=1 内核参数添加到主机的 引导配置 中。

    # grubby --update-kernel=ALL --args="prot_virt=1"
  2. 更新引导菜单:

    # zipl

  3. 使用 virsh edit 修改您要保护的虚拟机的 XML 配置。
  4. <launchSecurity type="s390-pv"/> 添加到 </ devices&gt; 行下的。例如:

    [...]
        </memballoon>
      </devices>
      <launchSecurity type="s390-pv"/>
    </domain>
  5. 如果配置的 <devices > 部分包含 virtio-rng device (<rng model="virtio">),请删除 < rng> </rng> 块的所有行。

在您要保护的虚拟机的 客户机操作系统中 执行以下步骤。

  1. 创建一个参数文件。例如:

    # touch ~/secure-parameters
  2. /boot/loader/entries 目录中,识别最新版本的引导加载程序条目:

    # ls /boot/loader/entries -l
    [...]
    -rw-r--r--. 1 root root  281 Oct  9 15:51 3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf
  3. 检索引导装载程序条目的内核选项行:

    # cat /boot/loader/entries/3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf | grep options
    options root=/dev/mapper/rhel-root
    crashkernel=auto
    rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap
  4. 将 options 行的内容和 swiotlb=262144 添加到创建的参数文件中。

    # echo "root=/dev/mapper/rhel-root crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap swiotlb=262144" > ~/secure-parameters
  5. 生成一个 IBM 安全执行镜像。

    例如,以下命令会根据 /boot/vmlinuz-4.18.0-240.el8.s390x 映像,使用 secure-parameters 文件创建 /boot/secure-image 安全镜像、/boot/initramfs-4.18.0-240.el8.s390x.img 初始 RAM 磁盘文件和 HKD-8651-000201C048.crt 主机密钥文档。

    # genprotimg -i /boot/vmlinuz-4.18.0-240.el8.s390x -r /boot/initramfs-4.18.0-240.el8.s390x.img -p ~/secure-parameters -k HKD-8651-00020089A8.crt -o /boot/secure-image

    通过使用 genprotimg 实用程序创建安全镜像,其中包含内核参数、初始 RAM 磁盘和引导镜像。

  6. 更新虚拟机的引导菜单,以从安全镜像引导。此外,删除以 initrdoptions 开头的行,因为不需要它们。

    例如,在 RHEL 8.3 虚拟机中,可以在 /boot/loader/entries/ 目录中编辑引导菜单:

    # cat /boot/loader/entries/3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf
    title Red Hat Enterprise Linux 8.3
    version 4.18.0-240.el8.s390x
    linux /boot/secure-image
    [...]
  7. 创建可引导磁盘镜像:

    # zipl -V
  8. 安全地删除原始的未保护的文件。例如:

    # shred /boot/vmlinuz-4.18.0-240.el8.s390x
    # shred /boot/initramfs-4.18.0-240.el8.s390x.img
    # shred secure-parameters

    原始引导镜像、初始 RAM 镜像和内核参数文件未受保护,如果未删除它们,则启用了安全执行的虚拟机仍然容易受到黑客攻击或敏感数据挖掘的攻击。

验证

  • 在主机上,使用 virsh dumpxml 工具确认受保护虚拟机的 XML 配置。配置必须包含 < launchSecurity type="s390-pv"/> 元素,且没有 <rng model="virtio"> 行。

    # virsh dumpxml vm-name
    [...]
      <cpu mode='host-model'/>
      <devices>
        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2' cache='none' io='native'>
          <source file='/var/lib/libvirt/images/secure-guest.qcow2'/>
          <target dev='vda' bus='virtio'/>
        </disk>
        <interface type='network'>
          <source network='default'/>
          <model type='virtio'/>
        </interface>
        <console type='pty'/>
        <memballoon model='none'/>
      </devices>
      <launchSecurity type="s390-pv"/>
    </domain>