在无头服务器上使用LUKS进行全系统加密 – 使用dropbear和busybox解锁。 怎么样?

我使用cryptsetup / LUKS加密了无头服务器。
2个带有512 MB / boot / dev / md0的硬盘和1,61 TB LUKS加密/ dev / md1,LVM包含/,交换等。
我安装了dropbear(并且已安装busybox)以在启动过程中解锁所有内容。 我用的是GRUB2。

到目前为止一切正常。 我可以在dropbear上使用私钥登录,在端口22上侦听并使用该命令解锁LUKS

echo -n "passphrase" > /lib/cryptsetup/passfifo 

一旦我这样做,服务器就像没有加密一样启动。 这正是我想要的。

现在,虽然这很好用,但这并不是我想要它的工作方式。
首先,我找不到/ lib / cryptsetup / passfifo上的任何文档。 它甚至如何工作? 其次,我使用GPG生成了一个密钥文件(也是一个使用cryptsetup作为回送设备的密钥文件),我想使用它而不是密码。 但我找不到关于如何在busybox中执行此操作的任何纪录片。 似乎没有安装GPG,所以我无法使用该密钥(我可以以某种方式使GPG可用于busybox吗?)

所以目前,解锁我的系统的唯一方法是将我的密码传递给我不想使用的/ lib / cryptsetup / passfifo。 我尝试直接在它的busybox路径中使用cryptsetup

 cryptsetup luksOpen /dev/md1 cryptdisk 

我没有显示任何错误,但我的系统没有继续启动。

任何想法我能做什么,或者我处理这个问题的方法有什么问题?

坦率

抱歉,这更像是评论而不是答案。 但既然你还没有得到任何答复,我还是想写点什么。

至于它是如何工作的:

在Initramfs中,您通常有一个主进程(通常是基于busybox的/init shell脚本),它负责在将引导进程切换到Ubuntu安装的真实init系统之前使根分区可用。

如果是Initramfs中的dropbear ,那是/init启动的单独进程。 登录dropbear你得到一个shell,这是另一个过程。 原始/init必须一直运行并等待某些东西,在这种情况下是LUKS密码。

那么/init脚本最有可能在这里启动dropbear,创建一个命名管道,或者fifo,即/lib/cryptsetup/passfifo 。 然后它从那个命名管道中读取。 这个读取将阻塞,直到实际上有东西要读,这就是/init挂起并等待输入的方式。

然后几年后你登录dropbear并做你的echo passphrase > /lib/cryptsetup/passfifo ,此时/init从睡眠中醒来并恢复解锁LUKS并继续进行其余的启动过程。

这基本上是它如何运作的一般概念。 如果没有相关文档,则必须阅读shell脚本。

至于Initramfs中的GPG加密密钥,我确信这是Ubuntu中的标准方法,可能是通过/etc/crypttab 。 你检查了wiki的howto吗?

肯定会要求GPG包含在Initramfs中。 但是我在这里概述了一种替代方法,可以在没有其他依赖关系的情况下工作:

如何将dm-crypt(LUKS)与GnuPG一起使用双因素进行FDE?

这个问题当然不是标准的,所以虽然它在理论上可能更简单但实际上可能更难设置。