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驱动程序的UEFI安全启动以及grub2作为UEFI部署的替代引导加载程序。
准备环境¶
操作员通过节点
capabilities属性告知Ironic。操作员可以在该节点的properties中的capabilities中添加一个新的capabilitysecure_boot=true。这是一个可选属性,如果节点需要为安全启动配置,则可以使用它。默认情况下,行为将如同此属性设置为“false”一样。iLO驱动程序中的检查功能可以自动发现节点的安全启动能力,并将节点能力创建到该节点对象中。如果用户在flavor中设置了
secure_bootcapability,pxe_ilo有能力使用proliantutils库调用动态地将启动模式更改为UEFI,并为节点准备安全启动。即使在节点的
properties/capabilities中将secure_bootcapability设置为true,节点仍然可以用于正常的非安全启动部署。驱动程序将使用节点instance_info字段中的secure_bootcapability信息来为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 Driver会将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签名。Secure boot启用的HP Proliant UEFI系统预加载了Microsoft UEFI CA签名。可以使用用户签名的镜像,但用户需要使用Proliant工具手动将他们的密钥配置到HP Proliant系统ROM数据库中。
当节点使用pxe启动时,它加载Microsoft签名的‘shim’引导加载程序,该程序反过来加载发行版签名的‘grub2’。发行版签名的‘grub2’可以验证和加载发行版内核。shim引导加载程序是必需的,因为它使用Microsoft UEFI CA签名进行签名,并识别相应的linux供应商证书作为有效的证书。
用户可以通过更改/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 OS供应商签名的部署和引导镜像。如果用户想使用自定义签名镜像,则需要使用HP Proliant工具手动将他们的密钥配置到UEFI。如果用户要使用未签名的镜像进行flavor请求UEFI安全启动的部署,则部署过程将成功完成,但最终启动到实例镜像将失败。未签名组件的签名验证将失败,导致启动过程失败。适当的启动失败消息将显示在节点的控制台上。
可扩展性影响¶
无
性能影响¶
由于安全启动中的签名验证,没有性能影响。
其他部署者影响¶
用户只能使用启用了UEFI安全启动的签名镜像进行部署。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
Shivanand Tendulker (stendulker@gmail.com)
工作项¶
为Ironic pxe驱动程序添加对grub2/shim作为替代UEFI引导加载程序的支持。
为pxe_ilo驱动程序实现安全启动。
依赖项¶
已完成必要的DiskImageBuilder更改以构建签名的Ubuntu和Fedora镜像。
测试¶
将为所有新添加的代码添加单元测试。
升级和向后兼容性¶
无。grub2将是替代引导加载程序,用户只有在需要UEFI安全启动功能时才能使用它。
文档影响¶
将适当地记录新添加的功能。
参考资料¶
UEFI规范 http://www.uefi.org
Proliantutils模块 - https://pypi.python.org/pypi/proliantutils
HP UEFI系统实用程序用户指南 - http://www.hp.com/ctg/Manual/c04398276.pdf
HP Proliant服务器上的Secure Boot http://h20195.www2.hp.com/V2/getpdf.aspx/4AA5-4496ENW.pdf