pxe_iLO驱动程序的UEFI安全启动支持

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/ironic/+spec/uefi-secure-boot-pxe-ilo

在 Kilo 版本中,UEFI 安全启动支持已为所有 iLO 驱动程序启用,除了 pxe_ilo。对于 pxe_ilo 驱动程序支持此功能非常重要,以便对安全敏感的用户来说,可以使用 UEFI 的安全启动功能更安全地部署。本规范建议在 pxe_ilo 驱动程序的裸机配置中支持 UEFI 安全启动。

问题描述

安全启动是UEFI规范的一部分(http://www.uefi.org)。它有助于确保节点仅使用管理员/最终用户信任的软件进行启动。

安全启动与TPM(可信平台模块)不同。TPM是安全加密处理器的标准,是一种专用的微处理器,旨在通过将加密密钥集成到设备中来保护硬件。安全启动是UEFI规范的一部分,可以通过防止加载未用可接受的数字签名签名的驱动程序或操作系统加载程序来保护启动过程。

当节点以启用安全启动的方式启动时,系统固件会检查每个启动软件的签名,包括固件驱动程序(选项ROM)、引导加载程序和操作系统。如果签名有效,节点将启动,并且固件会将控制权交给操作系统。

由于他们打算在配置的节点上运行的工作负载,管理员和最终用户对裸机配置的安全性有敏感性,他们将有兴趣使用UEFI提供的安全启动功能。

一旦为节点启用了安全启动,就无法使用未签名的启动镜像进行启动。因此,如果节点要使用安全启动进行启动,则使用已签名的引导加载程序和内核非常重要。

在 Kilo 版本中,此功能已为 iscsi_ilo 和 agent_ilo 驱动程序启用。需要将其为 pxe_ilo 驱动程序启用。这需要 pxe_ilo 驱动程序支持已签名的 UEFI 引导加载程序,以便节点能够在 UEFI 安全启动环境中启动。

提议的变更

本规范建议为 pxe_ilo 驱动程序和 grub2 提供 UEFI 安全启动支持,作为 PXE 驱动程序的 UEFI 部署的替代引导加载程序。

准备环境

  • 操作员通过节点 capabilities 属性告知 Ironic。操作员可以在该节点的 properties 中的 capabilities 中添加新的 capability secure_boot=true。这是一个可选属性,如果节点需要为安全启动配置,则可以使用它。默认情况下,行为将如同将此属性设置为“false”一样。iLO 驱动程序中的检查功能可以自动发现节点的安全启动能力,并将节点 capability 创建到该节点对象中。

  • 如果用户在 flavor 中设置了 secure_boot capability,pxe_ilo 能够使用 proliantutils 库调用动态地将引导模式更改为 UEFI,并为节点准备安全启动。

  • 即使在节点的 properties/capabilities 中将 secure_boot capability 设置为 true,节点仍然可以用于正常的非安全启动部署。驱动程序将使用节点 instance_info 字段中的 secure_boot capability 信息,为 UEFI 安全启动配置节点。

准备flavor以进行安全启动

  • nova flavor 中的 extra_specs 字段应用于指示安全启动。用户需要通过将“capabilities:secure_boot=true”添加到 flavor 中来创建 flavor。

  • 如果flavor中不存在“secure_boot”capability或设置为“False”,iLO驱动程序将不会执行安全启动。如果extra_spec中存在“secure_boot”,Nova调度器会将secure_boot capability作为节点选择标准之一。如果extra_spec中不存在“secure_boot”,则Nova调度器将不会将“secure_boot”capability作为节点选择标准。

  • Ironic virt 驱动程序会将 flavor capability 信息作为 ‘instance_info’ 的一部分传递给驱动程序。将 capability 信息作为 ‘instance_info’ 的一部分传递将有助于驱动程序适当地准备和退役节点。对于安全启动功能,此信息将由 pxe_ilo 驱动程序用于:-

    • 在配置期间,驱动程序可以启用安全启动能力,以验证引导加载程序和内核的签名。

    • 在拆卸期间,节点上的安全启动模式将被禁用。

准备引导加载程序和部署镜像

为了支持 pxe_ilo 驱动程序的 UEFI 安全启动,Ironic 的 pxe 驱动程序应支持已签名的 UEFI 引导加载程序。目前,‘elilo’ 是所有 pxe 驱动程序的默认 UEFI 引导加载程序。并非所有主要的 Linux 发行版都提供已签名的 ‘elilo’ 引导加载程序。它们提供已签名的 ‘grub2’ 引导加载程序。

启用 grub2 引导加载程序需要类似于 elilo 的步骤。步骤如下:-

  • 将已签名的 shim 和 grub2 引导加载程序文件复制到 tftproot 目录中,分别作为 bootx64.efi 和 grubx64.efi。

  • 在 /tftpboot/grub 下创建一个 master grub.cfg 文件

  • master grub.cfg 的内容如下所示。 set default=master set timeout=5 set hidden_timeout_quiet=false

    menuentry “master” { configfile /tftpboot/$net_default_ip.conf }

    此 master grub.cfg 在 PXE 启动期间首先加载。它告诉 grub 参考 tftproot 目录中为 PXE 配置的节点特定配置文件。配置文件的名称使用分配给节点的 DHCP IP 地址来确定。这是为了确保可以为并行部署创建多个 grub.cfg 文件。$net_default_ip.conf 的内容由 PXE 驱动程序使用 grub 模板文件动态填充。

Ironic 需要支持 ‘grub2’ 作为替代 UEFI 引导加载程序的原因如下:-

  • ‘elilo’ 没有活跃的开发。

  • 所有主要的 Linux 发行版都支持 ‘grub2’ 作为默认 UEFI 引导加载程序。

  • 所有主要的 Linux 发行版都提供已签名的 ‘grub2’ 引导加载程序,可用于使用发行版提供的云镜像进行 UEFI 安全启动部署。否则,用户需要构建自己的已签名镜像进行安全启动部署。

  • 已签名的 grub2 也可以用于正常的 UEFI 部署。

所有主要的 Linux 发行版都提供它们自己签名的 ‘grub2’,并提供 Microsoft UEFI CA 签名的 shim 引导加载程序。shim 引导加载程序包含各自发行版的 UEFI 签名。

当节点使用 pxe 启动时,它加载 Microsoft 签名的 ‘shim’ 引导加载程序,该引导加载程序反过来加载发行版签名的 ‘grub2’。发行版签名的 ‘grub2’ 可以验证并加载发行版内核。shim 引导加载程序是必需的,因为它使用 Microsoft UEFI CA 签名进行签名,并识别相应的 Linux 供应商证书作为有效的证书。启用了安全启动的 HP Proliant UEFI 系统预加载了 Microsoft UEFI CA 签名。可以支持用户签名的镜像,但用户需要使用 Proliant 工具手动将他们的密钥配置到 HP Proliant 系统 ROM 数据库中。如果用户尝试使用未签名的镜像进行 flavor 请求 UEFI 安全启动的部署,则部署过程将成功完成,但最终启动到实例镜像将失败。未签名组件的签名验证将失败,导致启动过程失败。适当的启动失败消息将显示在节点的控制台上。

用户可以通过更改 /etc/ironic/ironic.conf 下 pxe 部分中的以下现有变量来配置 ‘grub2’ 作为引导加载程序:uefi_pxe_config_template uefi_pxe_bootfile_name

备选方案

在 Ironic 中添加对已签名的 ‘grub2’ 作为默认 UEFI 引导加载程序的支持。但是,这样的更改会对向后兼容性产生影响。

数据模型影响

状态机影响

REST API 影响

RPC API 影响

客户端 (CLI) 影响

驱动程序 API 影响

Nova 驱动程序影响

安全影响

这增强了安全性。只有正确签名的固件、引导加载程序和操作系统才能启动。它为用户提供了以最安全的方式运行他们选择的软件的机会。

其他最终用户影响

用户需要使用正确签名的部署和引导组件。目前 pxe_ilo 驱动程序将支持具有 ‘shim’ 和 ‘grub2’ 签名(由 Linux 操作系统供应商签名)的部署和引导镜像。如果用户想要使用自定义签名镜像,则需要使用 HP Proliant 工具手动将他们的密钥配置到 UEFI 中。如果用户使用未签名的镜像进行部署,并且 flavor 请求 UEFI 安全启动,则部署过程将成功完成,但最终启动到实例镜像将失败。未签名组件的签名验证将失败,导致启动过程失败。适当的启动失败消息将显示在节点的控制台上。

可扩展性影响

性能影响

由于安全启动中的签名验证,没有性能影响。

其他部署者影响

用户只能使用启用 UEFI 安全启动的已签名镜像进行部署。

开发人员影响

实现

负责人

主要负责人

Shivanand Tendulker (stendulker@gmail.com)

工作项

  1. 为 Ironic pxe 驱动程序添加对 grub2/shim 作为替代 UEFI 引导加载程序的支持。

  2. 为 pxe_ilo 驱动程序实现安全启动。

依赖项

已签名的用户镜像。必要的 DiskImageBuilder 更改已完成,以构建已签名的 Ubuntu 和 Fedora 镜像。

测试

将为所有新添加的代码添加单元测试。

升级和向后兼容性

无。grub2 将是替代引导加载程序,用户只有在需要 UEFI 安全启动功能时才能使用它。

文档影响

将适当地记录新添加的功能。

参考资料

  1. UEFI 规范 http://www.uefi.org

  2. Proliantutils 模块 - https://pypi.python.org/pypi/proliantutils

  3. HP UEFI 系统实用程序用户指南 - http://www.hp.com/ctg/Manual/c04398276.pdf

  4. HP Proliant 服务器上的安全启动 http://h20195.www2.hp.com/V2/getpdf.aspx/4AA5-4496ENW.pdf