LUKS脚本被忽略…要求输入密码


10

首先,我要说我不是LUKS的新手。无论是否使用LVM,我都使用键脚本多次设置了LUKS。我不确定这里到底发生了什么。我有一个具有单个加密分区的系统。我的驱动器组织如下:

#lsblk

名称:最低RM尺寸RO型MOUNTPOINT
sda 8:0 0 128G 0磁盘  
s─sda18:1 0 128G 0部分  
  ├─vg0-root253:1 0 20G 0 lvm /
  ├─vg0-安全253:6 0 100M 0 lvm   
  │└─安全253:7 0 98M 0 crypt / root / secure
  └─vg0交换253:4 0 1G 0 lvm [SWAP]

我的/etc/crypttab档案看起来像这样

#此处不需要UUID,因为到LV的路径不会改变
安全的/ dev / vg0 / secure none luks,keyscript = / lib / cryptsetup / scripts / insecure

我的/lib/cryptsetup/scripts/insecure文件是可执行文件,看起来像这样

#!/bin/sh
# My actual file looks somewhat different because it dumps the key file with dd.
# This accomplishes virtually the same thing though.

echo -n "my-encryption-password"

update-initramfs -k all -u配置crypttab并将我的脚本文件放置到位后,我已经运行了很多次。

据我所知,我的脚本文件甚至没有被复制到initrd.img文件中。现在考虑了一下,我不认为它将被复制到initrd.img文件中,因为根分区未加密,脚本文件应该可以从那里方便地访问。

重新启动后,系统会从crypttab中看到记录,并要求输入密码(在我的情况下该密码实际上不存在,因为唯一的密钥是充满随机位的密钥文件),而不是使用密钥脚本来解锁LUKS分区。我尝试将LUKS从LVM中取出并放在sda2上,结果是相同的。我也知道该键脚本可以正常工作,因为它cryptsetup luksOpen /dev/vg0/secure secure -d - <<< "$(/lib/cryptsetup/scripts/insecure)"就像一个超级按钮一样可以解密我的LUKS分区。

我已经在Ubuntu 16.04.2和Ubuntu Mate 16.04.2中尝试了相同的结果。我之前使用过脚本没有任何麻烦。唯一的区别是,过去,我的/分区始​​终是加密的。如果有人可以阐明一下,我将不胜感激。我只想要一个很小的加密分区,因为我打算克隆该系统,并且我不想用整个/分区加密来克隆它。


更新2017-04-26

在浏览日志时,我发现一行带有以下错误,这没有任何意义。因为什么时候'keyscript = / path / to / script'是crypttab的未知选项?

... systemd-cryptsetup [737]:遇到未知的/ etc / crypttab选项'keyscript = / lib / cryptsetup / scripts / insecure',忽略。

只是为了踢球,我尝试删除keyscript选项并使用密钥文件,并且一切都正常!实际上,我尝试了其他选项,例如keyfile-offset,它们也起作用。因此,问题出在关键脚本选项的某个地方。有谁知道为什么吗?


3
我认为systemd是您的问题。快速谷歌对systemd和keyscript显示一个错误,并在systemd实施keyscript pull请求这里。第一个链接甚至提供了解决方法。
sergtech

这一直是我的怀疑,而且我继续深入研究我的问题并搜索我在网上找到的结果。我在这里尝试了一些建议,但是我不确定如何将脚本文件放入initrd。
b_laoshi

Answers:


3

尝试在/ etc / crypttab中使用选项“ initramfs”(根据https://unix.stackexchange.com/a/447676/356711)。/etc/crypttab然后,您将如下所示:

# UUID is not required here since the path to the LV won't change
secure      /dev/vg0/secure       none      luks,keyscript=/lib/cryptsetup/scripts/insecure,initramfs

请注意,您的根fs可能位于LVM容器中,这可能是一个问题。上面链接的文章中也提到了此问题:“ 但是,当前(仅可靠地)如果根设备不在LVM中,则此方法有效 ”幸运的是,似乎提供了一种解决方法。

我的系统如下所示:

$ lsblk
NAME                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                             8:0    0 931.5G  0 disk
└─sda1                          8:1    0 931.5G  0 part
  └─md1                         9:1    0 931.4G  0 raid1
    └─md1_crypt               253:3    0 931.4G  0 crypt
      └─raid_crypt_vg-data_lv 253:4    0 931.4G  0 lvm   /raid
sdb                             8:16   0 931.5G  0 disk
└─sdb1                          8:17   0 931.5G  0 part
  └─md1                         9:1    0 931.4G  0 raid1
    └─md1_crypt               253:3    0 931.4G  0 crypt
      └─raid_crypt_vg-data_lv 253:4    0 931.4G  0 lvm   /raid
sdc                             8:32   0 465.8G  0 disk
├─sdc1                          8:33   0   953M  0 part  /boot
└─sdc2                          8:34   0 464.8G  0 part
  └─sdc2_crypt                253:0    0 464.8G  0 crypt
    ├─system_crypt_vg-data_lv 253:1    0   447G  0 lvm   /
    └─system_crypt_vg-swap_lv 253:2    0  17.8G  0 lvm   [SWAP]

...,然后在Ubuntu 18.04.2 LTS中使用键脚本(!)执行以下/etc/crypttab解密魔术:

$ cat /etc/crypttab
# <target name> <source device>                           <key file> <options>
sdc2_crypt      UUID=[...]                                none       luks,discard,keyscript=/etc/decryptkeydevice/decryptkeydevice_keyscript.sh
md1_crypt       /dev/md1                                  none       luks,discard,keyscript=/etc/decryptkeydevice/decryptkeydevice_keyscript.sh,initramfs

请注意,sdc2_crypt使用提供的键脚本进行的解密在没有 initramfs选项的情况下有效(因为它包含根fs,因此在initramfs引导阶段被“自动”考虑)。md1_crypt我添加了initramfs选项后,才在initramfs引导阶段(因此根据crypttab条目使用键脚本)才对它进行了解密。在systemd引导阶段对md1_crypt的更高版本解密不适用于crypttab中给出的密钥脚本,因为“ systemd cryptsetup”不支持选项密钥脚本,请参见https://github.com/systemd/systemd/pull/3007

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.