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:
luks自动加密和挂载磁盘: https://zhaosongbin.blog.csdn.net/article/details/131450726