LUKS 密钥管理的 10 个 Linux cryptsetup 示例
LUKS 是 Linux 的磁盘加密。
首次使用 LUKS 加密分区时(或在操作系统安装期间选择加密磁盘选项时),您必须指定打开 LUKS 分区时使用的密码。
但是,在那之后,您可以根据需要多次挂载和卸载分区,而无需输入密码,直到您重新启动系统。
想象以下两种情况:
- 您忘记了 LUKS 密码。或者,您从某个安装了带有 LUKS 加密的分区的人那里继承了一个系统。您没有 LUKS 密码。当您重新启动系统时,您将遇到麻烦,因为您没有 LUKS 密钥。
- 出于安全合规目的,您需要经常更改 LUKS 加密密码。在这种情况下,您必须在不中断已安装分区的情况下轮换 LUKS 密钥。
在本教程中,我们将讨论您需要了解的有关 LUKS 密钥管理的所有信息。
1. 八个 LUKS 键槽
在 LUKS 中,对于单个加密分区,您可以拥有八个不同的密钥。
八个不同的密钥中的任何一个都可以用来打开加密分区。
您可以选择在一个分区上只有一个键,或者您可以分配所有八个不同的键。
这些密钥存储在分区的 LUKS 密钥槽中。因此,一个分区将有 8 个键槽。
要查看所有密钥槽,请使用 cryptsetup luksDump,如下所示。在此示例中,它仅使用两个插槽。
# cryptsetup luksDump /dev/sdb1 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
在上面:
- /dev/sdb1 是 LUKS 加密分区。
- Key Slot 编号从 0 开始。由于我们有 8 个 slot,因此 key slot 编号从 0 到 7 开始。
- ENABLED 表示这个特定的插槽有一个分配给它的键。
- 这里我们有两个带有 LUKS 键的插槽。因此,/dev/sdb1 LUKS 加密分区分配了两个密钥。
2.添加新的LUKS密钥
要将新的 LUKS 密码(LUKS 密钥)添加到 /dev/sdb1 LUKS 加密分区,请使用 cryptsetup luksAddKey 命令,如下所示。
# cryptsetup luksAddKey /dev/sdb1
Enter any passphrase:
Enter new passphrase for key slot:
Verify passphrase:
在上面:
- 当它显示“输入任何密码:”时,您应该输入 /dev/sdb1 的任何现有密码。正如我们在上面看到的,这已经有来自 Slot 0 和 Slot 1 的两个密码。您应该先输入其中任何一个密码。
- 输入现有密码后,您可以分配新的 LUKS 密钥。
每当您添加新的 LUKS 密钥时,它将被添加到下一个可用插槽中。由于我们已经有两个现有的密钥,新密钥被添加到插槽#2,这是下一个可用的插槽。
因此,插槽#0 到 2 将显示“已启用”。我们在 /dev/sdba1 上有三个 LUKS 键。
# cryptsetup luksDump /dev/sdb1 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: ENABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
3. 将新的 LUKS 密钥添加到特定插槽
除了 LUKS 将新密钥添加到下一个可用插槽之外,您还可以将新密钥添加到特定插槽。
为此,请在 cryptsetup luksAddKey 中使用 -S 选项,如下所示。
在本例中,我们将新的 LUKS 键添加到 Slot#5。我将新密码分配为:PasswordforSlot5
# cryptsetup luksAddKey /dev/sdb1 -S 5
正如我们在下面看到的,现在 Slot#5 显示“ENABLED”,而 slot#3 和 #4 仍处于 DISABLED 状态。
# cryptsetup luksDump /dev/sdb1 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: ENABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: ENABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
在这个阶段,我们有 4 个 LUKS 密钥分配给 /dev/sdb1 加密分区。
4. 删除现有的 LUKS 密钥
要从 LUKS 分区中删除现有密钥,请使用 cryptsetup luksRemoveKey,如下所示。
在此示例中,您只需输入要删除的密码(密钥)。
从插槽中移除/擦除/删除 LUKS 密钥。您不必指定插槽号。而是指定要删除的密钥!。
在这个例子中,当它提示“Enter LUKS passphrase to be deleted:”时,我输入了上一个例子中创建的密钥:PasswordforSlot5
# cryptsetup luksRemoveKey /dev/sdb1
Enter LUKS passphrase to be deleted:
从以下 luksDump 输出中可以看到,Slot#5 中的密钥现在已被擦除。
# cryptsetup luksDump /dev/sdb1 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: ENABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
5. 使用 luksKillSlot 删除一个 LUKS Key
如果您没有特定插槽的密钥,但只想删除它,您可以使用 cryptsetup luksKillSlot 命令执行此操作,如下所示。
在本例中,我们从 LUKS slot#2 中删除密钥。
为此,您必须为任何一个插槽输入 LUKS 密钥。这仅作为从插槽#2 中删除密钥之前的验证。
# cryptsetup luksKillSlot /dev/sdb1 2
Enter any remaining LUKS passphrase:
正如您从以下 luksDump 输出中看到的,现在 Slot#2 中的密钥已被擦除。
# cryptsetup luksDump /dev/sdb1 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
6. 从文件中添加新的 LUKS 密钥
您还可以根据已有的密钥文件添加新的 LUKS 密钥,如下所示。
# cryptsetup luksAddKey /dev/sdb1 masterkeyfile
Enter any passphrase:
在上面:
- masterkeyfile 包含您要添加的新 LUKS 密钥。这应该是一个二进制文件。
- 当它提示“输入任何密码:”时,为 /dev/sdb1 分区输入任何一个现有的 LUKS keyu。
- 正如您在上面看到的,它没有提示输入新的 LUKS 密钥,因为它是从主密钥文件中获取的。
正如您从以下 luksDump 输出中看到的那样,主密钥文件中的这个新密钥被添加到 slot#2
# cryptsetup luksDump /dev/sdb1 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: ENABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
7. 重置忘记的 LUKS 密钥 - 获取现有密钥
如果您重新启动服务器,并且无法挂载加密的 LUKS 分区,因为您忘记了您的 LUKS 密码,那么您运气不好,您可以重置它。
但是,如果已经打开了一个加密的 LUKS 分区,并且您还没有重新启动系统,并且您忘记了已经挂载的分区的 LUKS 密码(自上次重新启动以来至少打开了一次 LUKS),那么您可以分配一个新的 LUKS 键。
在这种“忘记了我的 LUKS 密码”的场景中,您可以执行以下两个步骤:
- 从 LUKS 分区中提取当前的加密密钥
- 使用上面提取的加密密钥创建一个新的 LUKS 密钥
在这个例子中,我安装了 /home1 分区,这是一个 LUKS 加密分区,但我没有密码。
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 127G 44G 76G 37% /
/dev/mapper/home1 93G 188M 88G 1% /home1
卷名是上述 df 命令输出的第一列中“/dev/mapper/”之后的任何内容。因此,在我们的示例中,卷名是“home1”
以下 dmsetup 表 –showkeys 将显示安装在系统上的所有分区的加密密钥。
# dmsetup table --showkeys
home1: 0 197259264 crypt aes-cbc-essiv:sha256 607f482870c795a9b1e307ffbfc6643eaa219e9ef8c6773de02cd298c8fcda3c 0 8:17 4096
“aes-cbc-essiv:sha256”后面的字段是加密密码。获取加密的 LUKS 密钥并将其存储在文件中。
# vi existinglukskey.txt
607f482870c795a9b1e307ffbfc6643eaa219e9ef8c6773de02cd298c8fcda3c
8. 重置忘记的 LUKS 密钥 – 创建二进制密钥文件
现在,我们必须将这个现有的密钥从文本文件转换为二进制文件。使用 xxd 命令,如下所示。
# xxd -r -p existinglukskey.txt existinglukskey.bin
在上面:
- -r 选项用于反向。这会将十六进制转储转换为二进制。
- -p 选项用于后记。这表明 postscript 连续 hexdump 样式。
- 现有lukskey.txt 输入文件
- 现有的lukskey.bin 输出文件。这现在将在二进制文件中包含现有的加密 LUKS 密码。
9. 重置忘记的 LUKS 密钥 - 添加新密钥
最后,使用我们提取到二进制文件中的现有 LUKS 密钥添加一个新的 LUKS 密钥。
# cryptsetup luksAddKey /dev/sdb1 --master-key-file <(cat existinglukskey.bin)
Enter new passphrase for key slot:
Verify passphrase:
在上面:
- --master-key-file 在此指定二进制文件。不要使用现有的lukskey.txt。而是使用我们在上面创建的现有lukskey.bin。
- 正如您在上面看到的,luksAddKey 没有要求提供现有的 LUKS 密码,因为它是从二进制文件中获取的。
- 当提示“Enter new passphrase for key slot:”时,输入新的 LUKS 密码。但是,这一次,不要忘记这一点。
再次记住这一点:如果您在重新启动系统后忘记了 LUKS 密码,那么您就失去了 Luks(运气不好),因为您无法重置它。
10. 转储 LUKS MasterKey
您还可以转储 MasterKey 并将其保存在某个地方。将 –dump-master-key 选项与 luksDump 一起使用,如下所示。
# cryptsetup luksDump --dump-master-key /dev/sdb1
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
LUKS header information for /dev/sdb1
Cipher name: aes
Cipher mode: cbc-essiv:sha256
Payload offset: 4096
UUID: 146d639a-757c-4bcb-aee6-8fe815345104
MK bits: 256
MK dump: 60 7f 48 28 70 c7 95 a9 b1 e3 07 ff bf c6 64 3e
aa 21 9e 9e f8 c6 77 3d e0 2c d2 98 c8 fc da 3c
请记住,您必须将 LUKS 标头转储存储在安全的地方。使用主密钥转储,有人可以访问 LUKS 加密分区。
- 点赞
- 收藏
- 关注作者
评论(0)