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

使用 Clevis 框架,您可以在所选 Tang 服务器可用时配置客户端来自动解锁 LUKS 加密卷。这会创建一个 NBDE (网络绑定磁盘加密)部署。

先决条件

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

步骤

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

    # dnf 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 命令占用了其中一个插槽。

    现在可以使用您的现有密码和 Clevis 策略来解锁卷。

  4. 要启用早期引导系统来处理磁盘绑定,请在已安装的系统上使用 dracut 工具:

    # dnf install clevis-dracut

    在 RHEL 中,Clevis 生成没有特定于主机配置选项的通用 initrd (初始 RAM 磁盘),且不会自动将 rd.neednet=1 等参数添加到内核命令行。如果您的配置依赖于在早期引导期间需要网络的 Tang pin ,请在检测到 Tang 绑定时使用 --hostonly-cmdline 参数和 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
    注意

    您还可以通过使用安装了 Clevis 的系统上的 grubby 工具,确保在早期引导时 Tang pin 的网络可用:

    # grubby --update-kernel=ALL --args="rd.neednet=1"

    然后您可以使用不带 --hostonly-cmdlinedracut

    # 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"

或者,在 /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"

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

# dracut -fv --regenerate-all

其他资源