Linux 里使用 luks 加密硬盘分区并且用 TPM 自动解密

Windows里的Bitlocker加密有一个突出的优点是可以依托主板上的TPM模块实现开机自动解密而不需要手动输入解密的密码,而在Linux里其实也可以实现同样的功能。

本文使用Clevis和TPM来实现LUKS硬盘的自动解密。Clevis提供了一种方便的方式来使用不同的解密后端,如TPM。请确保在进行任何系统配置更改之前备份重要的数据。

假设你有一个硬盘分区 /dev/sda1 ,你想用luks加密这个分区,然后系统每次启动的时候自动解密并绑定到目录 /mnt/encrypted。如果自动解密失败,例如TPM判断硬件有更改导致解密失败等,也可以手动输入密码进行解锁。

硬件需求:一台带有TPM2.0模块的电脑,BIOS里开启TPM,使用UEFI启动系统。

本文方法在 Debian 11里测试成功。

一、安装必须软件

apt-get install cryptsetup clevis clevis-luks clevis-tpm2 clevis-systemd

二、在加密之前,确保/dev/sda1分区上没有重要的数据,因为加密将擦除分区上的所有内容。执行以下命令以加密/dev/sda1分区:

cryptsetup luksFormat /dev/sda1

系统会提示你确认操作并要求设置加密密钥(密码)。请记住设置的密码,因为它将用于解密分区(仅在自动解密失败后才需要你输入密码)。

三、解锁加密的分区并创建一个映射设备(如/dev/mapper/encrypted)

cryptsetup luksOpen /dev/sda1 encrypted

这将要求你输入之前设置的密码以解锁分区并创建映射设备。

四、现在,你可以将文件系统(如ext4)格式化到加密映射设备上

mkfs.ext4 /dev/mapper/encrypted

这将创建一个ext4文件系统并将其安装在加密映射设备上。

五、最后,你可以将加密的分区挂载到所需的目录。例如,创建一个目录(如/mnt/encrypted)并将加密分区挂载到该目录

mkdir /mnt/encrypted
mount /dev/mapper/encrypted /mnt/encrypted

现在,/dev/sda1分区已被加密,并且可以在/mnt/encrypted目录下访问它。但是在重新启动系统后,需要手动解锁加密分区才能访问其中的数据。下面教大家自样自动解锁。

六、为刚才加密好的/dev/sda1分区创建一个Clevis密钥,将其与TPM绑定

clevis luks bind -d /dev/sda1 tpm2 '{"pcr_ids":"1,4,5,7,9","pcr_bank":"sha256"}'

如果这个步骤出错,请检查你的主板上的TPM2.0功能j否正常。

七、更新initramfs以包含Clevis解密插件

update-initramfs -u -k 'all'

这将更新initramfs以包含Clevis插件,以便在引导过程中使用Clevis解密。

八、自动解锁方式一

使用 blkid 命令查找分区的 uuid:

root@rbjk:~# blkid
/dev/sda1: UUID="111111111-111111111-111111111-111111111-111111111" TYPE="crypto_LUKS" PARTUUID="5f3f412e-03"
/dev/sdb1: UUID="222222222-222222222-222222222-222222222-222222222" TYPE="swap" PARTUUID="5f3f412e-01"

可知我的 /dev/sda1 分区的uuid是 111111111-111111111-111111111-111111111-111111111,注意,每个人的uuid都是不同的,不要抄我的。

使用文本编辑器(如nano或vim)打开 /etc/crypttab 文件:

nano /etc/crypttab

在末尾添加一行:

encrypted UUID=111111111-111111111-111111111-111111111-111111111 none luks,discard

设置自动挂载分区:

使用文本编辑器(如nano或vim)打开 /etc/fstab 文件:

nano /etc/fstab

在 /etc/fstab 文件的末尾添加一个新的条目来描述要自动挂载的分区:

/dev/mapper/encrypted  /mnt/encrypted  ext4  defaults  0  0

九、自动解锁方式二

编辑 /etc/rc.local ,增加

clevis luks unlock -d /dev/sda1 -n encrypted
mount /dev/mapper/encrypted /mnt/encrypted

重新启动系统,测试是否可以自动解密。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注