19.7. 在 IBM Z 中设置 IBM Secure Execution


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

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

您可以通过启用 IBM Secure Execution,将 IBM Z 主机上的现有虚拟机转换为安全虚拟机。

重要

对于保护生产环境,请参阅 IBM 文档中的使用安全执行完全保护工作负载,这解释了如何进一步保护您的工作负载。

先决条件

  • 系统硬件是以下之一:

    • 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

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

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

  • 主机上必须安装 genprotimg 软件包。

    # dnf install genprotimg
  • 如果要直接从主机修改虚拟机镜像,guestfs -tools 软件包安装在主机上。

    # dnf install guestfs-tools
  • 您已获取并验证了 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> 行下。例如:

    [...]
        </memballoon>
      </devices>
      <launchSecurity type="s390-pv"/>
    </domain>
  5. 如果配置的 <devices> 部分包含了一个 virtio-rng 设备 (<rng model="virtio">),请删除 <rng> </rng> 块的所有行。
  6. 可选:如果您要保护的虚拟机使用 32 GiB 或更多 RAM ,请将 <async-teardown enabled='yes'/> 行添加到其 XML 配置中的 <features></features> 部分中。

    这提高了重启或停止此类安全执行客户机的性能。

执行以下部分中的步骤。您可以登录到客户机,并为安全执行手动配置客户机镜像,或使用脚本和 guestfs-tools 直接从主机配置客户机镜像。

为安全执行手动配置虚拟机

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

  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
    rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap
  4. 将 options 行的内容和 swiotlb=262144 添加到创建的参数文件中。

    # echo "root=/dev/mapper/rhel-root rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap swiotlb=262144" > ~/secure-parameters
  5. 生成一个新的 IBM Secure Execution 镜像。

    例如,以下命令会根据 /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 镜像和内核参数文件未受保护,如果未删除它们,则启用了安全执行的虚拟机仍然容易受到黑客攻击或敏感数据挖掘的攻击。

直接从主机为安全执行配置虚拟机

您可以使用 guestfs-tools 修改现有镜像,而无需手动引导它。但是,仅在测试和开发环境中使用以下示例。有关保护生产环境,请参阅 IBM 文档中有关使用安全执行完全保护工作负载的内容

在主机 上执行以下步骤。

  1. 创建一个包含主机密钥文档的脚本,并将现有虚拟机配置为使用安全执行。例如:

    #!/usr/bin/bash
    
    echo "$(cat /proc/cmdline) swiotlb=262144" > parmfile
    
    cat > ./HKD.crt << EOF
    -----BEGIN CERTIFICATE-----
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    1234569901234569901234569901234569901234569901234569901234569900
    xLPRGYwhmXzKDg==
    -----END CERTIFICATE-----
    EOF
    
    version=$(uname -r)
    
    kernel=/boot/vmlinuz-$version
    initrd=/boot/initramfs-$version.img
    
    genprotimg -k ./HKD.crt -p ./parmfile -i $kernel -r $initrd -o /boot/secure-linux --no-verify
    
    cat >> /etc/zipl.conf<< EOF
    
    [secure]
    target=/boot
    image=/boot/secure-linux
    EOF
    
    zipl -V
    
    shutdown -h now
  2. 确保虚拟机已关闭。
  3. 使用 guestfs-tools 将脚本添加到现有 VM 镜像中,并将其标记为 在第一次引导时运行

    # virt-customize -a <vm_image_path> --selinux-relabel --firstboot <script_path>
  4. 使用添加的脚本从镜像引导虚拟机。

    该脚本在第一次引导时运行,然后再次关闭虚拟机。因此,虚拟机现在被配置为在具有对应主机密钥的主机上使用安全执行运行。

验证

  • 在主机上,使用 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>
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.