Fra*_*nkM 6 encryption boot luks busybox cryptsetup
我使用 cryptsetup/LUKS 加密了无头服务器。
2 个 HDD,/dev/md0 上有 512 MB /boot,1.61 TB LUKS 加密 /dev/md1,LVM 包含 /、swap 等。
我安装了 dropbear(并且已经安装了 busybox)以在启动过程中解锁所有内容。我用GRUB2。
到目前为止一切正常。我可以在 dropbear 上使用私钥登录并侦听端口 22,并使用以下命令解锁 LUKS
echo -n "passphrase" > /lib/cryptsetup/passfifo
Run Code Online (Sandbox Code Playgroud)
一旦我这样做,服务器就会启动,就好像没有加密一样。这正是我想要的。
现在,虽然这工作得很好,但这不是我想要的。
首先,我在 /lib/cryptsetup/passfifo 上找不到任何文档。它是如何运作的?其次,我使用 GPG 生成了一个密钥文件(也是一个使用 cryptsetup 作为环回设备的密钥文件),我想用它来代替密码。但我找不到任何有关如何在 busybox 中执行此操作的纪录片。GPG 似乎没有安装,所以我无法使用该密钥(我可以以某种方式使 GPG 可供 busybox 使用吗?)
所以目前,我解锁系统的唯一方法是将我的密码传递给 /lib/我不想使用 cryptsetup/passfifo 。我尝试直接在它的 busybox 路径中使用 cryptsetup
cryptsetup luksOpen /dev/md1 cryptdisk
Run Code Online (Sandbox Code Playgroud)
我没有显示任何错误,但我的系统没有继续启动。
我能做什么,或者我的处理方法有问题吗?
坦率
抱歉,这更多的是评论而不是答案。但既然你还没有收到任何回复,我还是想写点东西。
至于它是如何工作的:
在 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 上的操作指南吗?
它肯定需要将 GPG 包含在 Initramfs 中。但我在这里概述了一种替代方法,可以在没有额外依赖的情况下工作:
如何将 dm-crypt (LUKS) 与 GnuPG 结合使用以使用二因子进行 FDE?
这样做的问题当然是它不是标准的,因此虽然理论上它可能更简单,但实际上可能更难设置。