管理自加密驱动器#

NVIDIA DGX OS 软件支持管理自加密驱动器 (SED) 的功能,包括为 NVIDIA DGX H100/H200、DGX A100、DGX A800、DGX Station A100 和 DGX-2 系统上的驱动器设置身份验证密钥以进行锁定和解锁。

您只能管理 SED 数据驱动器。该软件不能用于管理操作系统驱动器,即使它们支持 SED 功能。

概述#

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

该软件支持以下配置

  • NVIDIA DGX H100/H200、DGX A100、DGX A800、DGX Station A100 和 DGX-2 系统,其中所有数据驱动器均为自加密驱动器。

  • 仅支持用作数据驱动器的 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. (可选)安装 TPM 工具包。

    • 对于 DGX A100、DGX Station A100 或 DGX H100/H200,安装 tpm2-tools 包。

    sudo apt install -y tpm2-tools
    
    • 对于 DGX-2,安装 tpm-tools 包。

    sudo apt install -y tpm-tools
    
  4. 重启。

    sudo reboot
    

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

配置可信计算#

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

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

  • 可信平台模块

    NVIDIA DGX H100/H200、DGX A100、DGX A800 和 DGX Station A100 包含可信平台模块 2.0 (TPM 2.0)。DGX-2 包含一个 TPM 模块。这些模块可以从系统 BIOS 启用,并与 nv-disk-encrypt 工具结合使用。启用后,nv-disk-encrypt 工具使用 TPM 进行加密,并将保管库和 SED 身份验证密钥存储在 TPM 上,而不是文件系统上。使用 TPM 是首选方法,因为即使系统重新映像,保管库数据也可以持久存在。

  • 阻止 SID

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

注意

启用 “禁用阻止 SID” 选项仅对一次重启有效,因此如果需要再次启用驱动器加密,则还需要在 BIOS 中启用该功能。

确定驱动器是否支持 SID#

驱动器型号是驱动器是否支持此功能的良好指标。发出以下命令并查找以下型号字符串之一

  • KCM6DRUL3T84

  • KCM6DRUL7T68

  • MZQLB7T6HMLA-00007

sudo nvme list

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

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

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

  1. 重启系统,然后在 NVIDIA 启动画面中按 [Del] 或 [F2] 进入 BIOS 设置。

  2. 导航到顶部菜单上的 “Advanced” 选项卡,然后滚动到 “Trusted Computing” 并按 [Enter]。

    _images/trusted-computing-1.png
    • 要启用 TPM,请滚动到 “Security Device” 并将设置切换为 “Enabled”。

    _images/trusted-computing-2.png
    • 要禁用阻止 SID,请转到右侧的 “Security” 选项卡,然后滚动到 “Disable Block Sid”,然后切换到 “Enabled”。

    _images/trusted-computing-3.png
  3. 保存并退出 BIOS 设置以继续启动过程。

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

    _images/access-sbios-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:为每个驱动器密码生成随机盐值(存储在 /etc/nv-disk-encrypt/.dgxenc.salt 中)。

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

  • -r:为每个驱动器生成随机密码。

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

启用驱动器锁定#

在初始化系统以进行 SED 管理后,发出以下命令,该命令使用 nv-disk-encrypt 命令来启用驱动器锁定。

sudo nv-disk-encrypt lock

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

初始化示例#

本节提供一些初始化示例。

示例 1:传入 JSON 文件#

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

有关更多信息,请参阅以下内容

确定哪些驱动器可以作为自加密驱动器进行管理#

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

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

sudo nv-disk-encrypt info

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

  • SED capable: 这是否是自加密驱动器?

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

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

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

    • 驱动器正在从断电状态恢复。

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

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

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

MBR done: 此设置仅与支持 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
    

    当提示时,输入保管库的密码。

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

示例 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 yourvaultpassword
Writing vault data to /tmp/secrets.out

擦除您的数据#

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

警告

执行此操作时请注意,所有数据都将丢失。在 DGX H100/H200 系统上,这些驱动器通常形成 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. 重启系统,然后在 NVIDIA 启动画面中按 [Del] 或 [F2] 进入 BIOS 设置。

  2. 导航到顶部菜单上的 “Advanced” 选项卡,滚动到 “Trusted Computing”,然后按 [Enter]。

  3. 清除 TPM2。

    1. 滚动到 “Trusted Computing” 并按 [Enter]。

    2. 滚动到 “Pending Operation” 并按 [Enter]。

    3. 在 “Pending Operation” 弹出窗口中选择 “TPM Clear”,然后按 [Enter]。

  4. 保存并退出 BIOS 设置。

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

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

  1. 禁用 SED 管理。

    sudo nv-disk-encrypt disable
    
  2. 根据需要添加或更换驱动器,然后重建 RAID 阵列。有关更多信息,请参阅您的系统服务手册。

  3. 根据 初始化系统以进行驱动器加密 中的说明,启用 SED 管理并分配密码。

从丢失的密钥中恢复#

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

SED 驱动器标签上印有 PSID;此值只能通过物理检查驱动器来获得,如以下图像所示。

_images/recover-lost-keys.png

指定 PSID 以使用以下 sedutil-cli 命令重置驱动器

sudo sedutil-cli ----yesIreallywanttoERASEALLmydatausingthePSID yourdrivesPSID /dev/nvme3n1