创建 Linux 受防护的 VM 模板磁盘

本主题说明如何为可用于实例化一个或多个租户 VM 的 Linux 受防护的 VM 准备模板磁盘。

先决条件

若要准备和测试 Linux 受防护的 VM,需要使用以下资源:

  • 运行 Windows Server 版本 1709 或更高版本的、具有虚拟化能力的服务器
  • 能够运行 Hyper-V 管理器以连接到正在运行的 VM 的控制台的第二台计算机(Windows 10 或 Windows Server 2016)
  • 受支持的 Linux 受防护的 VM OS 之一的 ISO 映像:
    • 具有 4.4 内核的 Ubuntu 16.04 LTS
    • Red Hat Enterprise Linux 7.3
    • SUSE Linux Enterprise Server 12 Service Pack 2
  • Internet 访问权限,以下载 lsvmtools 包和 OS 更新

重要

上述 Linux OS 的较新版本可能包含已知的 TPM 驱动程序 bug,这将阻止它们成功预配为受防护的 VM。 在提供补丁之前,不建议将模板或受防护的 VM 更新到较新版本。 当更新公开时,上文受支持的 OS 列表将更新。

准备 Linux VM

受防护的 VM 是从安全模板磁盘创建的。 模板磁盘包含 VM 的操作系统和元数据,包括 /boot 和 /root 分区的数字签名,以确保核心 OS 组件在部署之前不会被修改。

若要创建模板磁盘,必须先创建一个常规 VM(非受防护的 VM),将该 VM 准备为将来受防护的 VM 的基础映像。 安装的软件和对此 VM 所做的配置更改将应用于从此模板磁盘创建的所有受防护的 VM。 这些步骤将引导你完成基本的最低要求,让 Linux VM 准备好进行模板化。

注意

对磁盘进行分区时,将配置 Linux 磁盘加密。 也就是必须创建使用 dm-crypt 预先加密的新 VM,以创建 Linux 受防护的 VM 模板磁盘。

  1. 在虚拟化服务器上,通过在提升的 PowerShell 控制台中运行以下命令,确保已安装 Hyper-V 和主机保护者 Hyper-V 支持功能:

    Install-WindowsFeature Hyper-V, HostGuardian -IncludeManagementTools -Restart
    
  2. 从可信源下载 ISO 映像,并将其存储在虚拟化服务器或虚拟化服务器可访问的文件共享上。

  3. 在运行 Windows Server 版本 1709 的管理计算机上,通过运行以下命令安装受防护的 VM 远程服务器管理工具:

    Install-WindowsFeature RSAT-Shielded-VM-Tools
    
  4. 在管理计算机上打开 Hyper-V 管理器并连接到虚拟化服务器。 操作方法:单击“操作”窗格中的“连接到服务器...”,或单击 Hyper-V 管理器并选择“连接到服务器...”。提供 Hyper-V 服务器的 DNS 名称,以及连接所需的凭据(如有必要)。

  5. 使用 Hyper-V 管理器,在虚拟化服务器上配置外部交换机,以便 Linux VM 可以访问 Internet 以获取更新。

  6. 随后,创建要安装 Linux OS 的新虚拟机。 在“操作”窗格中,单击“新建>虚拟机”以打开向导。 为 VM 提供易记名称(例如“预模板化 Linux”)并单击“下一步”

  7. 在向导的第二页上,选择“第 2 代”以确保使用基于 UEFI 的固件配置文件预配 VM

  8. 根据自己的偏好完成向导的剩余部分。 不要对此 VM 使用差异磁盘;受防护的 VM 模板磁盘无法使用差异磁盘。 最后,将之前下载的 ISO 映像连接到此 VM 的虚拟 DVD 驱动器,以便安装 OS。

  9. 在 Hyper-V 管理器中选择新创建的 VM,然后在“操作”窗格中单击“连接...”,以附加到 VM 的虚拟控制台。 在显示的窗口中单击“启动”以打开虚拟机

  10. 继续完成所选 Linux 分发的设置过程。 虽然每个 Linux 分发使用不同的安装向导,但对于将成为 Linux 受防护的 VM 模板磁盘的 VM,必须满足以下要求:

    • 必须使用 GUID 分区表 (GPT) 布局对磁盘进行分区
    • 必须使用 dm-crypt 加密根分区。 密码应设置为 passphrase(全小写)。 预配受防护的 VM 时,此密码将随机化并重新加密分区。
    • 启动分区必须使用 ext2 文件系统
  11. Linux OS 完全启动并登录后,建议安装 Linux 虚拟内核和关联的 Hyper-V 集成服务包。 此外,还需要安装 SSH 服务器或其他远程管理工具,以在 VM 受到防护后访问它。

    在 Ubuntu 上,运行以下命令以安装这些组件:

    sudo apt-get install linux-virtual linux-tools-virtual linux-cloud-tools-virtual linux-image-extra-virtual openssh-server
    

    在 RHEL 上,则改为运行以下命令:

    sudo yum install hyperv-daemons openssh-server
    sudo service sshd start
    

    而在 SLES 上,请运行以下命令:

    sudo zypper install hyper-v
    sudo chkconfig hv_kvp_daemon on
    sudo systemctl enable sshd
    
  12. 根据需要配置 Linux OS。 安装的任何软件、添加的用户帐户以及所做的系统范围的配置更改都将应用于以后从此模板磁盘创建的所有 VM。 应避免将任何机密或不必要的包保存到磁盘。

  13. 如果计划使用 System Center Virtual Machine Manager 部署 VM,请安装 VMM 来宾代理,使 VMM 能够在 VM 预配期间让 OS 专用化。 专用化允许使用不同的用户和 SSH 密钥、网络配置和自定义设置步骤安全地设置每个 VM。 在 VMM 文档中了解如何获取和安装 VMM 来宾代理

  14. 随后将 Microsoft Linux 软件存储库添加到包管理器

  15. 使用包管理器安装 lsvmtools 包,其中包含 Linux 受防护的 VM 引导加载程序填充码、预配组件和磁盘准备工具。

    # Ubuntu 16.04
    sudo apt-get install lsvmtools
    
    # SLES 12 SP2
    sudo zypper install lsvmtools
    
    # RHEL 7.3
    sudo yum install lsvmtools
    
  16. 完成自定义 Linux OS 后,在系统上找到 lsvmprep 安装程序并运行它。

    # The path below may change based on the version of lsvmprep installed
    # Run "find /opt -name lsvmprep" to locate the lsvmprep executable
    sudo /opt/lsvmtools-1.0.0-x86-64/lsvmprep
    
  17. 关闭 VM。

  18. 如果采用了 VM 的任何检查点(包括通过 Hyper-V 使用 Windows 10 Fall Creators Update 创建的自动检查点),请务必将其删除,然后再继续操作。 检查点创建模板磁盘向导不支持的差异磁盘 (.avhdx)。

    若要删除检查点,请打开 Hyper-V 管理器、选择 VM、右键单击“检查点”窗格中最上面的检查点,然后单击“删除检查点子树”

    在 Hyper-V 管理器中删除模板 VM 的所有检查点

保护模板磁盘

在上一部分中准备的 VM 已经差不多能用作 Linux 受防护的 VM 模板磁盘。 最后一步是通过模板磁盘向导运行磁盘,该向导将对根分区和启动分区的当前状态进行哈希和数字签名。 预配受防护的 VM 时,将验证哈希和数字签名,以确保在模板创建和部署间不会对两个分区进行未经授权的更改。

获取证书以对磁盘进行签名

若要对磁盘度量进行数字签名,需要在运行模板磁盘向导的计算机上获取证书。 该证书必须满足以下要求:

Certificate 属性 所需的值
密钥算法 RSA
最小密钥大小 2048 位
签名算法 SHA256(推荐)
密钥用法 数字签名

当租户创建其防护数据文件并授权他们信任的磁盘时,系统将向其显示有关此证书的详细信息。 因此,请务必从你和租户共同信任的证书颁发机构获取此证书。 在你既是宿主又是租户的企业方案中,可以考虑从你的企业证书颁发机构颁发此证书。 请谨慎保护此证书,因为拥有此证书的任何人都可以创建与可信磁盘一样受信任的新模板磁盘。

在测试实验室环境中,可以使用以下 PowerShell 命令创建自签名证书:

New-SelfSignedCertificate -Subject "CN=Linux Shielded VM Template Disk Signing Certificate"

使用模板磁盘向导 cmdlet 处理磁盘

将模板磁盘和证书复制到运行 Windows Server 版本 1709 的计算机,然后运行以下命令以启动签名过程。 提供给 -Path 参数的 VHDX 将被更新的模板磁盘覆盖,因此请确保在运行命令之前复制该信息。

重要

Windows Server 2016 或 Windows 10 上提供的远程服务器管理工具不能用于准备 Linux 受防护的 VM 模板磁盘。 请仅使用 Windows Server 版本 1709 上提供的 Protect-TemplateDisk cmdlet 或 Windows Server 2019 上提供的远程服务器管理工具来准备 Linux 受防护的 VM 模板磁盘。

# Replace "THUMBPRINT" with the thumbprint of your template disk signing certificate in the line below
$certificate = Get-Item Cert:\LocalMachine\My\THUMBPRINT

Protect-TemplateDisk -Path 'C:\temp\MyLinuxTemplate.vhdx' -TemplateName 'Ubuntu 16.04' -Version 1.0.0.0 -Certificate $certificate -ProtectedTemplateTargetDiskType PreprocessedLinux

模板磁盘现已准备好用于预配 Linux 受防护的 VM。 如果使用 System Center Virtual Machine Manager 部署 VM,现在可以将 VHDX 复制到 VMM 库。

可能还需要从 VHDX 中提取卷签名目录。 此文件用于向想要使用模板的 VM 所有者提供有关签名证书、磁盘名称和版本的信息。 他们需要将此文件导入防护数据文件向导,以授权你(即拥有签名证书的模板作者)为他们创建该模板磁盘以及将来的模板磁盘。

若要提取卷签名目录,请在 PowerShell 中运行以下命令:

Save-VolumeSignatureCatalog -TemplateDiskPath 'C:\temp\MyLinuxTemplate.vhdx' -VolumeSignatureCatalogPath 'C:\temp\MyLinuxTemplate.vsc'