管理 DGX A100 自加密硬盘#

NVIDIA DGX OS 软件支持管理自加密硬盘 (SED) 的功能,包括在 NVIDIA DGX™ A100 系统上设置用于锁定和解锁硬盘的身份验证密钥。您只能管理 SED 数据硬盘。

该软件不能用于管理操作系统硬盘,即使它们支持 SED 功能。

概述#

SED 管理软件位于 nv-disk-encrypt 软件包中。

该软件支持以下配置

  • 所有数据硬盘均为自加密硬盘的 NVIDIA DGX A100 系统。

  • 仅支持用作数据硬盘的 SED。

    该软件不会管理作为操作系统硬盘的 SED。

该软件提供以下功能

  • 识别系统上符合条件的硬盘。

  • 允许您在初始化过程中为每个 SED 分配身份验证密钥(密码)。

    • 或者,该软件可以为每个硬盘生成随机密码。

    • 密码存储在系统上受密码保护的密钥库中。

  • 初始化后,SED 在断电时会被锁定,例如系统关机或硬盘移除。

    恢复供电并挂载根文件系统后,锁定的硬盘将被解锁。

  • 提供导出密钥库的功能。

  • 提供擦除硬盘的功能。

  • 提供恢复初始化的能力。

安装软件#

使用软件包管理器安装 nv-disk-encrypt 软件包,以及可选的 TPM2 工具软件包,并重启系统。如果您计划使用 TPM2 存储安全密钥,则需要 TPM 工具软件包。

  1. 更新软件包。

    $ sudo apt update
    
  2. 安装 nv-disk-encrypt

    $ sudo apt install -y nv-disk-encrypt
    
  3. (可选)安装 tpm2-tools

    $ sudo apt install -y tpm2-tools
    
  4. 重启。

    $ sudo reboot
    

如果您计划使用 TPM2,请启用它。有关更多信息,请参阅“配置可信计算”。

配置可信计算#

以下是有关配置可信计算 (TC) 所需控件的一些信息。

DGX A100 系统 BIOS 提供了用于配置以下 TC 功能的设置控件

  • 可信平台模块

    NVIDIA DGX A100 采用了可信平台模块 2.0 (TPM 2.0),可以从系统 BIOS 中启用并与 nv-disk-encrypt 工具结合使用。启用后,nv-disk-encrypt 工具使用 TPM 进行加密,并将密钥库和 SED 身份验证密钥存储在 TPM 上,而不是文件系统中。使用 TPM 是首选方法,因为即使系统重新映像,这也允许密钥库数据持久存在。

  • Block SID

    某些随 DGX A100 系统发货的硬盘可能支持 Block SID 身份验证功能。Block SID 身份验证可防止恶意行为者获取硬盘的所有权,并阻止其他人使用这些硬盘。默认情况下,DGX BIOS 将发送 Block SID 请求。在这种设置下,您需要在 BIOS 中启用 Disable Block Sid 功能,然后才能继续执行初始化步骤。

确定硬盘是否支持 SID#

硬盘型号是判断硬盘是否支持此功能的一个良好指标。发出以下命令并查找 KCM6DRUL3T84 型号字符串

$ sudo nvme list

Node             SN                   Model ...
---------------- -------------------- ---------------------
/dev/nvme0n1 70H0A0AHTTHR KCM6DRUL3T84 ...
/dev/nvme1n1 70H0A007TTHR KCM6DRUL3T84

启用 TPM 并阻止 BIOS 发送 Block SID 请求#

本节提供有关启用 TPM 并阻止 SBIOS 发送 Block SID 请求的说明。每个任务都是独立的,因此您可以选择要完成的任务。

  1. 重启 DGX A100,然后在 NVIDIA 启动画面出现时按 [Del] 或 [F2] 进入 BIOS 设置。

  2. 导航到顶部菜单上的“Advanced”(高级)选项卡,然后滚动到“Trusted Computing”(可信计算)并按 [Enter] 键。

    • 要启用 TPM,请滚动到“Security Device”(安全设备)并将设置切换为“Enabled”(已启用)。

    • 要禁用 Block SID,请滚动到“Disable Block Sid”(禁用 Block Sid),然后切换为“Enabled”(已启用)。

  3. 保存并退出 BIOS 设置以继续启动过程。

    如果您禁用了 Block SID,系统将提示您接受禁用发出 Block SID 身份验证命令的请求。

    _images/exit-bios-setup.png
  4. 在提示符下按 F10 键。

    系统启动后,您可以继续初始化硬盘加密。

初始化系统以进行硬盘加密#

以下是有关如何初始化系统以进行硬盘加密的一些信息。

注意

在初始化硬盘加密之前,请查看配置可信计算中的信息,并根据需要按照配置说明进行操作。

使用 nv-disk-encrypt 命令初始化系统以进行硬盘加密。

$ sudo nv-disk-encrypt init [-k <your-vault-password>] [-f <path/to/json-file>] [-g] [-r]

以下是选项列表

  • -k:允许您在命令中创建密钥库密码。

    否则,软件将提示您在继续之前创建密码。

  • -f:允许您指定一个 JSON 文件,其中包含密码到硬盘的映射。

    有关更多说明,请参阅示例 1:传入 JSON 文件

  • -g:为每个硬盘密码生成随机 salt 值(存储在 /etc/nv-disk-encrypt/.dgxenc.salt 中)。

    Salt 值是添加到密码中以增强密码安全性的字符。NVIDIA 强烈建议使用此选项以获得最佳安全性,否则软件将使用默认 salt 值而不是随机生成的 salt 值。

  • -r:为每个硬盘生成随机密码。

    这避免了创建 JSON 文件或在初始化期间逐个输入密码的需要。

启用硬盘锁定#

为 SED 管理初始化系统后,发出以下命令,该命令使用 nv-disk-encrypt 命令来启用硬盘锁定。

$ sudo nv-disk-encrypt lock

初始化系统并启用硬盘锁定后,硬盘在断电时将被锁定。当系统恢复供电并且系统重启时,系统将自动解锁每个硬盘。

初始化示例#

示例 1:传入 JSON 文件#

本节中的以下说明描述了一种预先指定硬盘/密码映射的方法。此方法对于一次初始化多个硬盘非常有用,并且避免了在发出初始化命令后为每个硬盘输入密码的需要,或者如果您想要控制密码。

确定哪些硬盘可以作为自加密硬盘进行管理#

以下是有关如何确定哪些硬盘可以作为自加密硬盘进行管理的一些信息。

查看 DGX 系统的存储布局,以确定哪些硬盘符合条件可以作为 SED 进行管理。

$ sudo nv-disk-encrypt info

默认输出显示哪些硬盘可以用于加密,哪些硬盘不能。提供以下状态信息

  • SED capable(SED 功能):这是否是自加密硬盘?

  • Boot disk(启动盘):此硬盘当前是否用作启动盘?它是否包含根文件系统?

  • Locked(已锁定):此硬盘当前是否处于锁定状态?它是否能够接受 I/O?只有在满足以下条件后,它才能处于此状态

    • 已启用锁定 (nv-disk-encrypt init,然后是 nv-disk-encrypt init lock)

    • 硬盘从断电状态恢复。

    • 用户在硬盘(自动)解锁之前查询此状态。

  • Lock Enabled(已启用锁定):是否在此硬盘上启用了锁定?初始化后 (nv- disk-encrypt init) 它将处于此状态。

  • MBR done(MBR 完成):此设置仅与支持 MBR 阴影的硬盘相关。在支持此功能的硬盘上,初始化后 (nv-disk-encrypt init) 这将报告“Y”。

MBR done(MBR 完成):此设置仅与支持 MBR 阴影的硬盘相关。在支持此功能的硬盘上,初始化后 (nv-disk-encrypt init) 这将报告“Y”。

以下示例输出代码段显示了可用于加密的硬盘。请注意 SED capable = Y 和 Boot disk = N。

_images/show-drives-encryption-use.jpg

以下示例输出代码段显示了不能用于加密的硬盘。请注意 SED capable = Y 和 Boot disk = Y,或者 SED capable = N。

_images/show-drives-no-encrypt-use.jpg

或者,您可以使用 -j 选项指定以 JSON 格式显示输出。

$ sudo nv-disk-encrypt info -j

在这种情况下,可以用于加密的硬盘由以下内容指示

"sed_capable": true "used_for_boot": false

而不能用于加密的硬盘由以下内容之一指示

"sed_capable": true "used_for_boot": true

"sed_capable": false

创建硬盘/密码映射 JSON 文件并使用它来初始化系统#

您可以通过创建硬盘和密码映射 JSON 文件来初始化系统。

  1. 创建一个 JSON 文件,其中列出您要管理的所有符合条件的 SED 功能硬盘。

    注意

    这些是您从确定哪些硬盘可以作为自加密硬盘进行管理中获得的硬盘列表。

    以下示例显示了 JSON 文件的格式。

    {
    "/dev/nvme2n1": "<your-password>",
    "/dev/nvme3n1": "<your-password>",
    "/dev/nvme4n1": "<your-password>",
    "/dev/nvme5n1": "<your-password>",
    }
    
    • 确保您完全遵循语法。

    • 密码必须仅包含大写字母、小写字母、数字和/或以下特殊字符:~ : @ % ^ + = _ ,

  2. 初始化系统,然后启用锁定。

    以下命令假定您已将 JSON 文件放在 /tmp 目录中。

    $ sudo nv-disk-encrypt init -f /tmp/<your-file>.json -g
    $ sudo nv-disk-encrypt lock
    

    出现提示时,输入密钥库的密码。

    密码必须仅包含大写字母、小写字母、数字和/或以下特殊字符:~ : @ % ^ + = _ ,

  3. 为了安全起见,删除临时位置的 JSON 文件。

示例 2:生成随机密码#

本主题中的命令使用 -k-r 选项,这样系统就不会提示您输入密码。您将密钥库密码传递到命令中,然后该命令指示工具为每个硬盘生成随机密码。

密钥库密码必须仅包含大写字母、小写字母、数字和/或以下特殊字符:~ : @ % ^ + = _ ,

$ sudo nv-disk-encrypt init -k <your-vault-password> -g -r
$ sudo nv-disk-encrypt lock

示例 3:在出现提示时一次指定一个密码#

如果硬盘数量较少,或者您不想创建 JSON 文件,请发出以下命令。

$ sudo nv-disk-encrypt init -g
$ sudo nv-disk-encrypt lock

软件将提示您输入密钥库的密码,然后输入每个符合条件的 SED 的密码。

密码必须仅包含大写字母、小写字母、数字和/或以下特殊字符:~ : @ % ^ + = _ ,

禁用硬盘锁定#

要在初始化后的任何时间禁用硬盘锁定,请运行以下命令:$ sudo nv-disk-encrypt disable

此命令禁用所有硬盘上的锁定。在此过程完成后,您可以随时再次运行初始设置。

启用硬盘锁定#

为 SED 管理初始化系统后,发出以下命令,该命令使用 nv-disk-encrypt 命令来启用硬盘锁定。

$ sudo nv-disk-encrypt lock

初始化系统并启用硬盘锁定后,硬盘在断电时将被锁定。当系统恢复供电并且系统重启时,系统将自动解锁每个硬盘。

导出密钥库#

以下是有关如何导出密钥库的一些信息。

要将所有硬盘密钥导出到文件,请使用导出功能。这需要您传入密钥库密码。

$ sudo nv-disk-encrypt export -k <your-vault-password>
Writing vault data to /tmp/secrets.out

/tmp/secrets.out 文件包含硬盘序列号到硬盘密码的映射。

擦除您的数据#

以下是有关如何擦除数据的一些信息。

警告

执行此操作时请注意,所有数据都将丢失。在 DGX A100 系统上,这些硬盘通常形成 RAID 0 阵列,并且当您执行擦除时,此阵列也将被销毁。

为 SED 管理初始化系统后,在停止 cachefilesd 并卸载 RAID 阵列后,使用 nv-disk-encrypt 命令擦除硬盘上的数据,如下所示。

  1. 完全停止 RAID。

    $ systemctl stop cachefilesd
    $ sudo umount /raid
    $ sudo mdadm --stop /dev/md1
    
  2. 执行擦除。

    $ sudo nv-disk-encrypt erase
    

    此命令执行以下操作

    • 将硬盘设置为解锁状态。

    • 禁用硬盘上的锁定。

    • 删除 RAID 0 阵列配置。

    要重建 RAID 阵列,请发出以下命令

    $ sudo /usr/bin/configure_raid_array.py -c -f
    

清除 TPM#

如果您丢失了 TPM 的密码,您将无法访问其内容。在这种情况下,重新获得对 TPM 访问权限的唯一方法是清除 TPM 的内容。清除 TPM 后,您需要重新初始化密钥库和 SED 身份验证密钥。

  1. 重启 DGX A100,然后在 NVIDIA 启动画面出现时按 [Del] 或 [F2] 进入 BIOS 设置。

  2. 导航到顶部菜单上的“Advanced”(高级)选项卡,滚动到“Trusted Computing”(可信计算),然后按 [Enter] 键。

  3. 清除 TPM2。

    1. 滚动到“Trusted Computing”(可信计算)并按 [Enter] 键。

    2. 滚动到“Pending Operation”(待处理操作)并按 [Enter] 键。

    3. 在“Pending Operation”(待处理操作)弹出窗口中选择“TPM Clear”(TPM 清除),然后按 [Enter] 键。

  4. 保存并退出 BIOS 设置。

更改硬盘密码、添加硬盘或更换硬盘#

更改或轮换密码、添加硬盘或更换硬盘需要相同的步骤。

当前任务的上下文。

  1. 禁用 SED 管理。

    $ sudo nv-disk-encrypt disable
    
  2. 根据需要添加或更换硬盘,然后重建 RAID 阵列。

    有关更多信息,请参阅 NVIDIA DGX A100 Service Manual

  3. 按照初始化系统以进行硬盘加密中的说明启用 SED 管理并分配密码。

从丢失的密钥中恢复#

NVIDIA 建议备份您的密钥并将其存储在安全位置。如果您丢失了用于初始化和锁定硬盘的密钥,您将无法再次解锁硬盘。如果发生这种情况,唯一的恢复方法是执行出厂重置,这将导致数据丢失。

SED 硬盘的标签上印有 PSID;此值只能通过物理检查硬盘来获得,如下面的图像所示例。

_images/recover-lost-keys.png

使用以下 sedutil-cli 命令指定 PSID 以重置硬盘

$ sudo sedutil-cli --yesIreallywanttoERASEALLmydatausingthePSID <your-drive-psid> /dev/ nvme3n1