在 Linux 上自动解锁加密磁盘

通过使用网络绑定磁盘加密 (NBDE),无需手动输入密码即可打开加密磁盘。
74 位读者喜欢这篇文章。
Lock

JanBaby,通过 Pixabay CC0。

从安全角度来看,加密您的敏感数据以保护其免受窥探和黑客攻击非常重要。 Linux 统一密钥设置(LUKS)是一个很棒的工具,也是 Linux 磁盘加密的通用标准。因为它将所有相关的设置信息存储在分区头中,所以可以轻松迁移数据。

要使用 LUKS 配置加密磁盘或分区,您需要使用 cryptsetup 实用程序。不幸的是,加密磁盘的缺点之一是,每次系统重启或磁盘重新挂载时,您都必须手动提供密码。

但是,网络绑定磁盘加密 (NBDE) 可以自动安全地解锁加密磁盘,而无需任何用户干预。它在多个 Linux 发行版中可用,从 Red Hat Enterprise Linux 7.4、CentOS 7.4 和 Fedora 24 以及每个版本的更高版本开始。

NBDE 通过以下技术实现

  • Clevis 框架: 一种可插拔框架工具,可自动解密和解锁 LUKS 卷
  • Tang 服务器: 一种将加密密钥绑定到网络存在的服务

Tang 为 Clevis 客户端提供加密密钥。根据 Tang 开发人员的说法,这提供了一种安全、无状态、匿名的密钥托管服务替代方案。

由于 NBDE 使用客户端-服务器架构,因此您必须同时配置客户端和服务器。您可以使用本地网络上的虚拟机作为 Tang 服务器。

服务器安装

使用 sudo 安装 Tang

sudo yum install tang -y

启用 Tang 服务器

sudo systemctl enable tangd.socket --now

Tang 服务器在端口 80 上工作,必须添加到 firewalld。添加适当的 firewalld 规则

sudo  firewall-cmd --add-port=tcp/80 --perm
sudo firewall-cmd --reload

服务器现在应该已安装。

客户端安装

在此示例中,假设您已向系统添加了一个名为 /dev/vdc 的新 1GB 磁盘。

使用 fdisk 或 parted 创建主分区

sudo fdisk /dev/vdc

完成以下步骤以安装客户端。

Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x4a6812d4.

Command (m for help):

输入 n 以创建新分区

Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended   
Select (default p):

Enter 键选择主分区

Using default response p
Partition number (1-4, default 1):

Enter 键选择默认分区号

First sector (2048-2097151, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151):

Enter 键选择最后一个扇区

Using default value 2097151
Partition 1 of type Linux and of size 1023 MiB is set

Command (m for help): wq

键入 wq 以保存更改并退出 fdisk

The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

运行 partprobe 以通知系统分区表更改

sudo partprobe

使用 sudo 安装 cryptsetup 软件包

sudo yum install cryptsetup -y

使用 cryptsetup luksFormat 命令加密磁盘。系统提示时,您需要键入 YES,并选择并输入密码以加密磁盘

sudo cryptsetup luksFormat /dev/vdc1
WARNING!
========
This will overwrite data on /dev/vdc1 irrevocably.

Are you sure? (Type uppercase yes):

Enter passphrase for /dev/vdc1: 
Verify passphrase:

使用 cryptsetup luksOpen 命令将加密分区映射到逻辑设备。例如,使用 encryptedvdc1 作为名称。您还需要再次输入密码

sudo cryptsetup luksOpen /dev/vdc1 encryptedvdc1
Enter passphrase for /dev/vdc1:

加密分区现在可在 /dev/mapper/encryptedvdc1 中使用。

在加密分区上创建 XFS 文件系统

sudo mkfs.xfs /dev/mapper/encryptedvdc1

为挂载加密分区创建一个目录

sudo mkdir /encrypted

使用 cryptsetup luksClose 命令锁定分区

cryptsetup luksClose encryptedvdc1

使用 sudo 安装 Clevis 软件包

sudo yum install clevis clevis-luks clevis-dracut -y

修改 /etc/crypttab 以在启动时打开加密卷

sudo vim /etc/crypttab

添加以下行

encryptedvdc1       /dev/vdc1  none   _netdev

修改 /etc/fstab 以在重启或启动时自动挂载加密卷

sudo vim /etc/fstab

添加以下行

/dev/mapper/encryptedvdc1   /encrypted       xfs    _netdev        1 2

在此示例中,假设 Tang 服务器的 IP 地址为 192.168.1.20。如果愿意,您也可以使用主机名或域名。

运行以下 clevis 命令

sudo clevis bind luks -d /dev/vdc1 tang '{"url":"http://192.168.1.20"}'
The advertisement contains the following signing keys:

rwA2BAITfYLuyNiIeYUMBzkhk7M

Do you wish to trust these keys? [ynYN] Y
Enter existing LUKS password: 

键入 Y 以接受 Tang 服务器的密钥,并为初始设置提供现有的 LUKS 密码。

通过 systemctl 启用 clevis-luks-askpass.path,以防止在非 root 分区上提示输入密码。

sudo systemctl enable clevis-luks-askpass.path

客户端已安装。现在,每当您重启服务器时,加密磁盘都应该通过从 Tang 服务器检索密钥来自动解密和挂载。

如果 Tang 服务器因任何原因不可用,您需要手动提供密码才能解密和挂载分区。

接下来阅读什么
User profile image.
Curt Warfield 是北卡罗来纳州罗利市的高级技术支持工程师。

1 条评论

很棒的文章。现在我想知道如何在已经有全盘加密的
服务器上启用 NBDE。有什么技巧吗?

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.