1、描述

Tang 是一个将数据绑定到网络状态的服务器。当系统绑定到某个安全网络时,它会使包含数据的系统变得可用。Tang 是无状态的,不需要 TLS 或身份验证。与基于 escrow 的解决方案不同,服务器存储所有加密密钥并了解以前使用的每个密钥,Tang 从不与任何客户端密钥进行交互,因此不会从客户端获得任何识别信息。

Clevis 是一个自动化解密的可插拔框架。在 NBDE 中,Clevis 提供 LUKS 卷的自动解锁。clevis 软件包提供了该功能的客户端。

Clevis pin 是 Clevis 框架的一个插件。其中一个 pins 是实现与 NBDE 服务器进行交互的插件 - Tang。

Clevis 和 Tang 是通用的客户端和服务器组件,提供网络绑定加密。在 RHEL 中,它们与 LUKS 一起使用,以加密和解密 root 和非 root 存储卷,以完成网络绑定磁盘加密。

客户端和服务器端组件都使用 José 库来执行加密和解密操作。

当您开始调配 NBDE 时,Tang 服务器的 Clevis pin 将获得 Tang 服务器发布的非对称密钥的列表。或者,由于密钥是非对称的,因此 Tang 的公钥列表可以分发到带外,以便客户端能够在不访问 Tang 服务器的情况下进行操作。此模式称为 脱机调配。

Tang 的 Clevis pin 使用其中一个公钥来生成唯一的强加密的加密密钥。使用此密钥加密数据后,密钥将被丢弃。Clevis 客户端应将此调配操作生成的状态存储在方便的位置。这种加密数据的过程就是 调配步骤。

LUKS 版本 2(LUKS2)是 RHEL 中的默认磁盘加密格式,因此 NBDE 的调配状态作为令牌存储在 LUKS2 标头中。luksmeta 软件包对 NBDE 的调配状态的利用仅用于使用 LUKS1 加密的卷。

Tang 的 Clevis pin 支持 LUKS1 和 LUKS2,不需要规范。Clevis 可以加密纯文本文件,但您必须使用 cryptsetup 工具来加密块设备。如需更多信息,请参阅 使用 LUKS 加密块设备。

当客户端准备好访问其数据时,它会加载再调配步骤中生成的元数据,并响应恢复加密密钥。此过程是 恢复步骤。

在 NBDE 中,Clevis 使用 pin 绑定 LUKS 卷,以便能自动解锁它。成功完成绑定流程后,可以使用提供的 Dracut 解锁程序解锁磁盘

NBDE采用C/S架构,其中Tang 负责向 Clevis 客户端提供加密密钥,为密钥托管服务提供了一个安全、无状态、匿名的替代方案。我们可在本地网络中部署一个本地 Tang 服务器提供密钥服务。

:可插拔的框架工具,自动解密和解锁 LUKS 卷
:将加密密钥绑定到网络状态的服务


2、Tang服务器安装

安装 tang 软件包及其依赖项

$ yum install tang -y

tang服务器的默认端口为,如有占用,请修改端口

选择一个未被占用的端口,例如== 7500/tcp==,并允许 tangd 服务绑定到该端口

一个端口一次只能由一个服务使用,因此尝试使用已占用的端口会出现 错误消息

$ semanage port -a -t tangd_port_t -p tcp 7500

配置防火墙,开放7500端口

$ firewall-cmd --add-port=7500/tcp --perm
$ firewall-cmd --runtime-to-permanent
$ firewall-cmd --reload

启用tang服务

$ systemctl enable tangd.socket

如有修改端口,请执行以下命令

## 创建覆盖文件
$ systemctl edit tangd.socket

## 修改配置文件
$ vim /etc/systemd/system/tangd.socket.d/override.conf 
[Socket]
ListenStream=
## 修改的端口
ListenStream=7500

## 重新载入修改
$ systemctl daemon-reload

## 检查您的配置是否正常工作
$ systemctl show tangd.socket -p Listen

## 启动Tang服务
$ systemctl restart tangd.socket

3、客户端


3.1、依赖安装

$ yum install cryptsetup -y

$ yum install clevis clevis-luks clevis-dracut -y

3.2、创建加密磁盘分区

例如:我们现在对现有的 目录进行加密

执行 ,我们可以看到home目录对应的磁盘是,全路径即是:

$ lsblk 
NAME     MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda        8:0    0   477G  0 disk  
├─sda1     8:1    0   600M  0 part  /boot/efi
├─sda2     8:2    0     1G  0 part  /boot
├─sda3     8:3    0 397.7G  0 part  /home
├─sda4     8:4    0    70G  0 part  /
└─sda5     8:5    0   7.7G  0 part  [SWAP]
sdb        8:16   1   7.5G  0 disk  
└─sdb1     8:17   1   7.5G  0 part

我们需要去 home目录

umount 可能报错:目录繁忙。
解决方案:关闭正在执行的任务,任何执行目录、存储目录涉及到home的任务。

$ umount /home

再次执行 ,我们可以看到磁盘sda3的挂载home没有了

$ lsblk 
NAME     MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda        8:0    0   477G  0 disk  
├─sda1     8:1    0   600M  0 part  /boot/efi
├─sda2     8:2    0     1G  0 part  /boot
├─sda3     8:3    0 397.7G  0 part  
├─sda4     8:4    0    70G  0 part  /
└─sda5     8:5    0   7.7G  0 part  [SWAP]
sdb        8:16   1   7.5G  0 disk  
└─sdb1     8:17   1   7.5G  0 part

3.3、luks加密


安装加密软件,一般服务器自带

$ yum install cryptsetup -y
cryptsetup [其他参数] luksFormat 需要加密的磁盘

常用参数:


我们这里使用默认值,执行的过程中,命令会警告你将会清除磁盘上的所有数据,并要求你输入两次密码

注意:下面的必须输入大写的

$ cryptsetup luksFormat /dev/sda3
WARNING!
========
这将覆盖 /dev/sda3 上的数据,该动作不可取消。

Are you sure? (Type 'yes' in capital letters): YES
输入 /dev/sda3 的口令:
确认密码:

3.4、打开luks加密盘

命令如下:

cryptsetup 加密类型Open 加密磁盘 映射名称

执行该命令后就会将 /dev/sda3 解密,并映射成 /dev/mapper/home

$ cryptsetup luksOpen /dev/sda3 home
输入 /dev/sda3 的口令:

3.5、操作和配置luks加密盘

## 在加密的分区上创建一个 XFS 文件系统
$ mkfs.xfs /dev/mapper/home

## 锁定分区
$ cryptsetup luksClose home

4、开机自动解密和挂载加密盘


设置开机自动解密 luks 分区:

$ vim /etc/crypttab
# <name>  <device>      <password> <options>
home    /dev/sda3       none   _netdev

注释老的home自动挂载,设置新的 home 自动挂载点:

$ vim /etc/fstab

# 
# /etc/fstab
# Created by anaconda on Tue Jun 20 10:39:43 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=715d159b-2612-439d-8da9-4f003aebe3be /                       xfs     defaults        0 0
UUID=fbbb9210-1b17-485b-b95d-5e550e3b7be8 /boot                   xfs     defaults        0 0
UUID=D918-3920          /boot/efi               vfat    umask=0077,shortname=winnt 0 2
# 注释掉老的home挂载信息
# UUID=7ee7cabf-8627-46b0-b40c-2c329926e775 /home                   xfs     defaults        0 0
UUID=de06acc9-4238-4de4-bc67-b754c2c0e993 none                    swap    defaults        0 0

#配置新的home挂载信息
/dev/mapper/home        /home   xfs    _netdev        1 2
~                                                                     

运行以下 clevis 命令,连接Tang服务器,自动解密磁盘

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

rwA2BAITfYLuyNiIeYUMBzkhk7M

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


参考:
红帽官网文档: https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html/security_hardening/configuring-automated-unlocking-of-encrypted-volumes-using-policy-based-decryption_security-hardening

luks自动加密和挂载磁盘: https://zhaosongbin.blog.csdn.net/article/details/131450726

07-11 23:09