Cryptsetup:无法连接环回设备

Cryptsetup:无法连接环回设备

我正在使用cryptsetup分离的标头。为此,我使用--header 参数来指定头文件。我可以使用以下方式打开我的设备:

cryptsetup luksOpen /dev/sdb1 sdb1 --header LUKS-HEADER

但我需要提供标头,而不是作为文件,而是作为另一个命令的输出(我cat在这里使用命令进行说明)

cryptsetup luksOpen /dev/sdb1 sdb1 --header <(cat LUKS-HEADER)

但这不起作用。我收到以下错误:

Attaching loopback device failed (loop device with autoclear flag is required).

这很令人困惑,因为类似的方法适用于提供密钥,即

cryptsetup luksOpen /dev/sdb1 sdb1 --header LUKS-HEADER --key-file <(printf asdf)

上面的命令工作正常(我使用“asdf”作为示例密码)。

如何--header从管道/另一个进程向选项提供参数?

赏金更新:

接受的答案有效,即我可以使用:

cat LUKS-HEADER > /dev/ram0
cryptsetup luksDump /dev/ram0

但是,我需要一个如何使用进程替换的解决方案,即。目前,进程替换不起作用:

cryptsetup luksDump <(cat LUKS-HEADER)

它给出了错误:

Attaching loopback device failed (loop device with autoclear flag is required).

答案1

似乎 cryptsetup 要求 LUKS 标头是常规文件或设备。如果您需要提供 LUKS 标头作为进程/流的输出,您可以通过将其发送到/dev/ram

cat LUKS-HEADER > /dev/ram0

(前提是你的内核支持ramdisk)

然后您可以简单地使用 cryptsetup 命令:

cryptsetup luksOpen /dev/sdb1 sdb1 --header /dev/ram0

请记住,LUKS 标头将保留在/dev/ram0磁盘中,直到您释放空间。要释放内存,可以使用以下blockdev命令:

blockdev -v --flushbufs /dev/ram0

答案2

地穴设置男人

由于 Cryptsetup--header选项正在读取设备或文件(密码设置.c "header", "Device or file with separated LUKS header"),一个潜在的解决方案可能是提出一个问题这里询问该功能。或者可以为 cryptsetup 编写自定义补丁以添加对管道的支持(这种解决方案不是最简单的,但它是最可靠的,--header参数保存在变量中opt_header_device 密码设置.c)。

答案3

要修复仅打开 LUKS 设备时出现的错误“附加环回设备失败(需要具有自动清除标志的环回设备)”,只需运行sudo modprobe loop.

看起来最新的 Linux 内核 (5.3.13) 中不再默认加载“loop”模块。

答案4

我认为无论你在做什么,<(cat HEADER)实际上并没有按照你的想法去做。我相信这一点的原因如下:

luksOpen <device> <name> (old syntax)

打开 LUKS 设备device并设置映射name成功验证所提供的密码后。如果未通过 提供密码--key-file,则该命令交互式提示

环回设备使用注意事项

Cryptsetup 通常直接在块设备上使用(磁盘分区或 LVM 卷)。但是,如果设备参数是一个文件,cryptsetup则尝试分配一个环回设备并将其映射到该文件中。此模式需要 Linux 内核 2.6.25 或更高版本,支持循环自动清除标志(循环设备在上次关闭时自动清除)。当然,您始终可以手动将文件映射到循环设备。

不知何故,你似乎生成了比你打算做的更多的参数,或者更少,因为,看起来,cryptsetup以某种方式将你的设备参数作为一个文件而不是作为块设备,因此尝试通过环回安装它。

相关内容