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
重新启动系统,测试是否可以自动解密。