用cryptsetup/LUKS进行全盘加密¶
本指南展示了如何配置LUKS加密卷,在启动时用`Nitrokey Pro <https://shop.nitrokey.com/shop/product/nk-pro-2-nitrokey-pro-2-3>`__或`Nitrokey Storage <https://shop.nitrokey.com/shop/product/nitrokey-storage-2-56>`__验证。
为了提供一些背景资料,cryptsetup-initramfs现在支持使用Nitrokey Pro和Nitrokey Storage等OpenPGP智能卡来解锁LUKS加密的卷。一旦你完成设置,你只需要在启动时插入Nitrokey并输入用户密码,而不是输入常规的磁盘加密口令。
这些说明已经在Ubuntu 20.04和Debian 10上进行了测试。
警告
下面的指南有可能会把你的电脑锁住。你应该意识到这些风险,我们建议你在第二台电脑上使用下面的脚本,或者在完全备份后使用,因为你可能会丢失你的数据。
要求¶
一台至少有一个LUKS加密卷的Ubuntu或Debian电脑。
请参阅下面的章节,以确定哪种方法与本指南兼容。
一个Nitrokey Pro 2或Nitrokey Storage 2 `初始化<openpgp.html>`_的键。
已知问题¶
到目前为止,该脚本只适用于手动分区的卷,即由未加密的``/boot``分区和加密的根``/`` 分区组成。
请不要选择你所使用的操作系统为本指南提供的自动全盘加密功能。在Ubuntu和Debian上使用安装界面自动进行分区时,你将面临反复的错误。
说明¶
安装依赖项
$ sudo apt install scdaemon opensc gnupg2
创建智能卡-鲁克斯目录
$ mkdir smartcard-luks && cd smartcard-luks
下载智能卡-鲁克斯-脚本
$ wget https://raw.githubusercontent.com/daringer/smartcard-key-luks/main/smartcard-key-luks $ sudo chmod +x smartcard-key-luks
导出公钥
要从GnuPG的钥匙圈中导出你的公钥。
$ gpg2 --armor --export KeyID > pubkey.asc
如果你已经将公钥上传到钥匙服务器(或将其储存在其他地方),你应该以你最习惯的方式检索它,并继续进行第5步。
为你的根分区确定并验证正确的LUKS设备名称。
$ cat /etc/crypttab # if there is only one entry, you want the 1st column of this entry
提示
通常这应该是`nvme0n1p3_crypt`(用于NitroPC)或`sda3_crypt`(用于NitroPads)。 你可以而且应该通过检查`/etc/crypttab`中提到的UUID是指定的分区,即`/dev/disks/by-uuid/`中的符号链接。
以luks设备名称(例如:nvme0n1p3_crypt)和`pubkey.asc`为参数执行脚本。
$ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey.asc
一旦你用OpenPGP公钥作为参数运行该脚本,它就会自动设置一个新的LUKS秘密,用该公钥进行加密,并设置crypttab、LUKS、initramfs和GRUB。
首先,你会被提示``User PIN``。
一旦你解锁了Nitrokey,你会被提示你的``OLD passphrase``。这是你在安装时输入的加密卷的口令。
备注
这是在你丢失Nitrokey或无法使用的情况下的一种后备选择。到目前为止,它还没有经过测试,用户必须意识到,如果后备方法不奏效,就有可能被锁在电脑外。
一旦你输入了口令,脚本就会在大约一分钟内完成设置。不要打断脚本,否则你可能会在重启后被锁定在你的电脑之外。
完成了!
现在你必须重新启动,你应该能够使用你的Nitrokey来解锁你的加密驱动器。
使用方法¶
重新启动后,系统会提示你输入用户密码。
输入你的用户密码以解锁硬盘
进一步提示¶
更改密码锁¶
一旦完成这个设置,你就不应该再使用(gnome)*disks*工具来改变(后备)密码。正确的方法是像这样直接调用*cryptsetup*。
$ sudo cryptsetup luksChangeKey /dev/nvme0n1p3
`nvme0n1p3`是你为之设置钥匙的分区。
使用多个键¶
使用多个(硬件)安全密钥是很容易的,这样每个密钥都能独立解锁LUKS驱动器。只要导出多个公钥,同时*将多个密钥*传给设置脚本,像这样。
$ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey-1.asc pubkey-2.asc
设置持卡人姓名¶
在启动时输入PIN码以解密LUKS根分区时,会向用户展示一个持卡人。请使用``$ gpg --edit-card``并在提示中输入 ``admin<xid="189"></x>`和``name``来设置OpenPGP卡(Nitrokey Storage 2或Nitrokey Pro 2)的持卡人。
替换/删除钥匙¶
不可能直接添加/删除钥匙。因此,你需要删除/删除旧的设置,然后用指定的钥匙重新运行设置。
从luks-device(nvme0n1p3)中删除密钥文件(路径,如果你使用了上面的脚本)。
$ sudo cryptsetup luksRemoveKey /dev/nvme0n1p3 /etc/cryptsetup-initramfs/cryptkey.gpg
删除密钥文件本身。
$ sudo rm /etc/cryptsetup-initramfs/cryptkey.gpg
重新运行上述设置。
用X509证书解锁LUKS2¶
SystemD支持使用X509证书解锁LUKS2分区,在`Vladimir Timofeenko的个人博客上有一篇关于如何实现这一功能的精彩博客文章。