Red Hat Training

A Red Hat training course is available for RHEL 8

11.9. 配置 LUKS 加密卷的手动注册

使用以下步骤使用 NBDE 配置 LUKS 加密卷的解锁。

先决条件

  • Tang 服务器正在运行且可用。

流程

  1. 要自动解锁现有的 LUKS 加密卷,请安装 clevis-luks 子软件包:

    # yum install clevis-luks
  2. 识别 PBD 的 LUKS 加密卷。在以下示例中,块设备被指代为 /dev/sda2

    # lsblk
    NAME                                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    sda                                             8:0    0    12G  0 disk
    ├─sda1                                          8:1    0     1G  0 part  /boot
    └─sda2                                          8:2    0    11G  0 part
      └─luks-40e20552-2ade-4954-9d56-565aa7994fb6 253:0    0    11G  0 crypt
        ├─rhel-root                               253:0    0   9.8G  0 lvm   /
        └─rhel-swap                               253:1    0   1.2G  0 lvm   [SWAP]
  3. 使用 clevis luks bind 命令将卷绑定到 Tang 服务器:

    # clevis luks bind -d /dev/sda2 tang '{"url":"http://tang.srv"}'
    The advertisement contains the following signing keys:
    
    _OsIk0T-E2l6qjfdDiwVmidoZjA
    
    Do you wish to trust these keys? [ynYN] y
    You are about to initialize a LUKS device for metadata storage.
    Attempting to initialize it may result in data loss if data was
    already written into the LUKS header gap in a different format.
    A backup is advised before initialization is performed.
    
    Do you wish to initialize /dev/sda2? [yn] y
    Enter existing LUKS password:

    此命令执行四个步骤:

    1. 使用与 LUKS 主密钥相同的熵创建新的密钥。
    2. 使用 Clevis 加密新密钥.
    3. 将 Clevis JWE 对象存储在 LUKS2 标头令牌中,或者使用 LUKSMeta(如果使用非默认 LUKS1 标头)。
    4. 启用用于 LUKS 的新密钥。

      注意

      绑定过程假定至少有一个可用的 LUKS 密码插槽。clevis luks bind 命令占用了其中一个插槽。

  4. 卷现在可以使用您的现有密码和 Clevis 策略解锁。
  5. 要启用早期引导系统来处理磁盘绑定,请在已安装的系统中使用 dracut 工具:

    # yum install clevis-dracut

    在 Red Hat Enterprise Linux 8 中,Clevis 生成一个通用 initrd (初始 ramdisk),且没有特定于主机的配置选项,且不会自动在内核命令行中添加诸如 rd.neednet=1 等参数。如果您的配置在早期引导过程中依赖于需要网络的 Tang pin,请在检测到 Tang 绑定时使用 --hostonly-cmdline 参数 and dracut add rd.neednet=1

    # dracut -fv --regenerate-all --hostonly-cmdline

    或者,在 /etc/dracut.conf.d/ 中创建 .conf 文件,并将 hostonly_cmdline=yes 选项添加到该文件中,例如:

    # echo "hostonly_cmdline=yes" > /etc/dracut.conf.d/clevis.conf

    然后您可以在 不使用 --hostonly-cmdline 的情况下使用 racut

    # dracut -fv --regenerate-all

验证

  1. 要验证 Clevis JWE 对象是否已成功放入 LUKS 标头中,请使用 clevis luks list 命令:

    # clevis luks list -d /dev/sda2
    1: tang '{"url":"http://tang.srv:port"}'
重要

要将 NBDE 用于带有静态 IP 配置(没有 DHCP)的客户端,请手动将网络配置传递给 dracut 工具,例如:

# dracut -fv --regenerate-all --kernel-cmdline "ip=192.0.2.10::192.0.2.1:255.255.255.0::ens3:none:192.0.2.45"

或者,使用静态网络信息在 /etc/dracut.conf.d/ 目录中创建 .conf 文件。例如:

# cat /etc/dracut.conf.d/static_ip.conf
kernel_cmdline="ip=192.0.2.10::192.0.2.1:255.255.255.0::ens3:none:192.0.2.45"

重新生成初始 RAM 磁盘镜像:

# dracut -fv --regenerate-all

其它资源

  • clevis-luks-bind(1) and dracut.cmdline(7) man pages