我正在设置一个加密的根文件系统,我之前已经这样做过,但这次我使用带有对称密码的 PGP 加密密钥文件来熟悉该过程。
有两个地方似乎会发生加密根的配置,在cryptopts
和下的内核 init 选项中/etc/crypttab
,这似乎用于mkinitramfs
将某些内容烘焙到 initramfs 中。
两个地方都更新有点麻烦;毕竟,如果一个地方就足够了,那么把它放在两个地方又有什么意义呢?我确实看到了将东西放在 中的价值/etc/crypttab
,因为如果存在 LUKS 卷,则可以使用不同的挂钩和脚本以不同的方式生成 initramfs。
使用之前针对此问题修正的示例,这是我的 crypttab:
picrypt /dev/mmcblk0p2 /boot/diskkey.gpg luks,keyscript=/lib/cryptsetup/scripts/decrypt_gnupg
Run Code Online (Sandbox Code Playgroud)
据推测,这告诉 initramfs/dev/mmcblk0p2
应该解密以使用 name picrypt
,指定我们要使用该文件luks
并将其传递/boot/diskkey.gpg
给/lib/cryptsetup/scripts/decrypt_gnupg
脚本以生成卷的密码。
接下来,这是我的内核 init 行中的加密选项:
cryptopts=target=picrypt,source=/dev/mmcblk0p2,lvm=pi
Run Code Online (Sandbox Code Playgroud)
再次,我们重新指定/dev/mmcblk0p2
create picrypt
,在这种情况下,我们还告诉它内部有一个名为 call 的 LVM 卷,pi
在尝试挂载内核参数指定的根文件系统之前,它应该等待该卷root=/dev/mapper/pi-root
。
奇怪的是,这个设置不起作用,因为它似乎忽略了 crypttab 的密钥文件和密钥脚本参数,并且不提示输入 GPG 对称密钥密码,而是直接输入密钥。我将修改我的脚本以包含keyscript
and keyfile
in cryptopts
,但为什么我必须这样做呢?
有没有一种方法可以将所有这些(或至少大部分)包含在内核初始化行中/etc/crypttab
,并且不重复内核初始化行中的所有内容?必须将所有内容更改两次,这有点荒谬。这些不同的源是否只是提供不同的功能,crypttab 以钩子的形式,cryptopts 以 cryptsetup 的实际参数的形式?
我的Raspberry Pi(现在距离我10,000公里)的工作原理如下:
/boot
cryptsetup
)包含/
dropbear
。它要求输入 HDD 的密码,然后启动顺序将正常继续。有关我如何完成这一切的更多信息,请阅读http://blog.romainpellerin.eu/raspberry-pi-the-ultimate-guide.html。
TL;DR这是一个简化版本:
apt-get install busybox cryptsetup rsync
echo "initramfs initramfs.gz 0x00f00000" >> /boot/config.txt
sed -e "s|root=/dev/mmcblk0p2|root=/dev/mapper/hddcrypt cryptdevice=/dev/sda1:hddcrypt|" -i /boot/cmdline.txt
sed -e "s|/dev/mmcblk0p2|/dev/mapper/hddcrypt|" -i /etc/fstab
echo -e "hddcrypt\t/dev/sda1\tnone\tluks" >> /etc/crypttab
cryptsetup --verify-passphrase -c aes-xts-plain64 -s 512 -h sha256 luksFormat /dev/sda1
mkinitramfs -o /boot/initramfs.gz $(uname -r)
aptitude install dropbear
// Configuring the SSH access …
Run Code Online (Sandbox Code Playgroud) 今天我在外部硬盘驱动器上安装 ubuntu,在初始设置中我标记了“加密安装”选项并单击了安装按钮,但我没有注意到我的内部硬盘驱动器(其中有 Windows 10)是已选择。
当我点击安装时,出现一个弹出窗口,说 3 个分区将被删除,所以在那一刻我注意到我选择了错误的驱动器,我取消了安装,返回,选择正确的驱动器,然后继续安装(这次我禁用了加密选项)。
到目前为止,ubuntu 运行得很好,但是当我无法从 Windows 启动时,我意识到我加密了整个驱动器!
我需要拿回文件,我不知道下一步该怎么做!请帮助,我读到我需要进行备份,但我什至不知道如何访问驱动器。我们欢迎任何意见或建议。
我处于一种(糟糕的)情况,我有多个正确的密码并使用了 luks 插槽,但我无法分辨哪个密码属于哪个插槽
解密(在启动期间感谢 crypttab)效果很好,但我无法判断哪个插槽已被使用。为了合理化这种情况,有没有办法确定哪个luks槽被使用了呢?
从这个问题我读到:
如果您忘记了其中一个密码,那么您只能通过消除来找到它所在的位置,而如果您忘记了其中两个密码,则无法区分哪个是哪个(否则密码哈希将被破坏)。
...所以我有点害怕测试每个密码的每个插槽,即使我没有在手册页中找到任何损坏的密码哈希的参考。
注意:幸运的是,第一个 luks 插槽是已知的,所以我可以通过重置其他插槽来重新站起来。
当您luksDump
在 LUKS 设备上运行时,我得到以下信息:
$ sudo cryptsetup luksDump /dev/sda1
LUKS header information
Version: 2
Epoch: 3
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID: 4640c6e4-[…]
Label: (no label)
Subsystem: (no subsystem)
Flags: (no flags)
[…]
Run Code Online (Sandbox Code Playgroud)
我很清楚“版本”指的是什么(当前最好的是 v2,所以这就是你的目标),我已经看到了Epoch
3 到 5 的值。
然而,究竟Epoch
指的是什么?我应该瞄准什么价值?那里声明的数字是否重要(安全方面)?如果它仍然是 Epoch 3 是不是很糟糕,例如?可以升级那个时代吗?
我已经在网络和常见问题解答中搜索信息,但epoch
那里没有提到这个词。
我目前知道两种将 LUKS 加密根分区绑定到 TPM2 的最新方法:systemd-cryptenroll
和clevis
. 在成功检查密钥密封的 PCR 后,他们似乎都释放了加密密钥。
但我不喜欢在没有用户交互的情况下解密卷的想法。我宁愿有一个类似于 BitLocker for Windows 提供的解决方案:TPM 和额外的 PIN 或恢复密钥。
尽管我在网上进行了详尽的搜索,但我无法找到这方面的任何提示。有人知道解决方案吗?
编辑:有一个--recovery-key
选项systemd-cryptenroll
。我只关心如何在使用 TPM 时获得额外的 PIN 要求的问题。
这是我的设置
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 238.5G 0 disk
??nvme0n1p1 259:1 0 100M 0 part /boot/efi
??nvme0n1p2 259:2 0 250M 0 part /boot
??nvme0n1p3 259:3 0 238.1G 0 part
??Be-Water-My-Friend 254:0 0 238.1G 0 crypt
??Arch-swap 254:1 0 2G 0 lvm [SWAP]
??Arch-root 254:2 0 236.1G 0 lvm /
Run Code Online (Sandbox Code Playgroud)
我有一个主要的 LUKS2 加密分区 ( nvme0n1p3
),一个 LVM 卷组 ( Be-Water-My-Friend
) 包含两个逻辑卷Arch-swap
和Arch-root
.
这Arch-root
是一个btrfs。
当我设置它时,我只选择了 2GB 的交换空间,这不足以满足我的需求。我想将其增加到 …
首先,我已经阅读了这个主题: How to change the hash-spec and iter-time of an existing dm-crypt LUKS device?
其中建议是以下命令:
cryptsetup-reencrypt --keep-key
Run Code Online (Sandbox Code Playgroud)
然而,这个答案是 7 年前的,并且被认为是实验性的。就我而言,我在安装过程中从加密磁盘上的实时 USB 滴答声安装了 Debian 。因此,当我启动设备时,我必须直接从 grub 解密。解密时间太长,因为--iter-time
即使我的密码正确,似乎默认也在 30 秒左右,因此有人建议减少--iter-time
到300
.
这就是为什么我还有其他问题:
cryptsetup-reencrypt --keep-key -iter-time DEVICE
今天的代码准确吗?/dev/nvme0n1p2
,luks 分区是/dev/mapper/luks-xxxx
,交换分区也一样。选择哪个设备:cryptsetup-reencrypt --keep-key -iter-time /dev/nvme0n1p2
或cryptsetup-reencrypt --keep-key -iter-time /dev/mapper/luks-xxxx
?非常感谢。
供参考 :
我新安装了 ubuntu 22.04,并从 ubuntu 安装程序选项中选择了全磁盘加密 (LUKS) 和 ZFS。
我需要进行一些编辑,/etc/crypttab
以便以自动方式解锁我的驱动器(花式 USB 自动解锁),但我所做的编辑/etc/crypttab
不会保留到 initramfs 中。
我正在做的是:
/etc/crypttab
update-initramfs -u
/etc/
但不存在 cryptotab。我对它的工作原理的理解是否错误?我需要将某些版本的 crypttab 保留到加载程序,但它不起作用。
有任何指示我做错了什么吗?
我有带全盘加密的笔记本电脑。有一个未加密的 /boot 分区,另一个分区 /dev/sda5 是。
为了解密,它要求我输入密码,然后将其传递给命令 /sbin/cryptsetup luksOpen ${name} ${device}。
如果命令 /sbin/cryptsetup 在加密分区上,它如何解密分区,这是不可访问的。我想也许 /boot 分区中有该命令的副本,但我没有找到。
有人可以对此有所了解吗?
luks ×10
cryptsetup ×2
crypttab ×2
debian ×2
initramfs ×2
ubuntu ×2
arch-linux ×1
btrfs ×1
dropbear ×1
encryption ×1
grub ×1
grub2 ×1
kernel ×1
lvm ×1
secure-boot ×1
systemd ×1
tpm ×1
zfs ×1