19.7. 在 IBM Z 中设置 IBM Secure Execution
当使用 IBM Z 硬件运行 RHEL 9 主机时,您可以通过为虚拟机配置 IBM Secure Execution 来提高虚拟机(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 模式。
主机上必须安装 genprotimg 软件包。
# dnf install genprotimg
- 您已获取并验证了 IBM Z 主机密钥文档。有关此操作的说明,请参阅 IBM 文档中的 验证主机密钥文档。
流程
在主机上 执行以下步骤:
将
prot_virt=1
内核参数添加到主机的引导配置中。# grubby --update-kernel=ALL --args="prot_virt=1"
更新引导菜单:
# zipl
-
使用
virsh edit
修改您要保护的虚拟机的 XML 配置。 将
<launchSecurity type="s390-pv"/>
添加到</devices>
行下。例如:[...] </memballoon> </devices> <launchSecurity type="s390-pv"/> </domain>
-
如果配置的
<devices>
部分包含了一个virtio-rng
设备 (<rng model="virtio">
),请删除<rng> </rng>
块的所有行。 可选:如果您要保护的虚拟机使用 32 GiB 或更多 RAM ,请将
<async-teardown enabled='yes'/>
行添加到其 XML 配置中的<features></features>
部分中。这提高了重启或停止此类安全执行客户机的性能。
在您要保护的虚拟机的 客户机操作系统中 执行以下步骤。
创建一个参数文件。例如:
# touch ~/secure-parameters
在
/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
检索引导装载程序条目的内核选项行:
# 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
将 options 行的内容和
swiotlb=262144
添加到创建的参数文件中。# echo "root=/dev/mapper/rhel-root rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap swiotlb=262144" > ~/secure-parameters
生成一个 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 磁盘和引导镜像。更新虚拟机的引导菜单,以从安全镜像引导。此外,删除以
initrd
和options
开头的行,因为不需要它们。例如,在 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 [...]
创建可引导磁盘镜像:
# zipl -V
安全地删除原始的未保护的文件。例如:
# 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>