用cryptsetup/LUKS进行全盘加密¶
Compatible Nitrokeys |
|||||||
|---|---|---|---|---|---|---|---|
✓ active |
⨯ inactive |
⨯ inactive |
✓ active |
⨯ inactive |
✓ active |
✓ active |
⨯ inactive |
备注
本指南目前已废弃。
This guide shows how to configure LUKS-encrypted volumes, to authenticate at boot with Nitrokey Pro or Nitrokey Storage.
为了提供一些背景资料,cryptsetup-initramfs现在支持使用Nitrokey Pro和Nitrokey Storage等OpenPGP智能卡来解锁LUKS加密的卷。一旦你完成设置,你只需要在启动时插入Nitrokey并输入用户密码,而不是输入常规的磁盘加密口令。
这些说明已经在Ubuntu 20.04和Debian 10上进行了测试。
警告
下面的指南有可能会把你的电脑锁住。你应该意识到这些风险,我们建议你在第二台电脑上使用下面的脚本,或者在完全备份后使用,因为你可能会丢失你的数据。
要求¶
一台至少有一个LUKS加密卷的Ubuntu或Debian电脑。
请参阅下面的章节,以确定哪种方法与本指南兼容。
A Nitrokey Pro 2 or Nitrokey Storage 2 initialized with keys.
已知问题¶
到目前为止,该脚本只适用于手动分区的卷,即由未加密的``/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
导出公钥
To export your public key from GnuPG's keyring:
$ 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``。这是你在安装时输入的加密卷的口令。
备注
This is a fall-back alternative in case you lose your Nitrokey, or if it's unavailable. So far, it was not tested, and users must be aware of the risk of getting locked out of their computer, if the fall-back method does not work.
一旦你输入了口令,脚本就会在大约一分钟内完成设置。不要打断脚本,否则你可能会在重启后被锁定在你的电脑之外。
完成了!
现在你必须重新启动,你应该能够使用你的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的个人博客上有一篇关于如何实现这一功能的精彩博客文章。