在启动时解锁 LUKS 非根文件系统分区

在启动时解锁 LUKS 非根文件系统分区

我的系统/在 Ubuntu 16.04 上有一个未加密的分区,但在 3 个分区上有 LUKS 加密的 ZFS zpool。为了使系统正常启动,我希望在 ZFS 和其他服务(如数据库、网络、电子邮件等)启动之前解锁 LUKS 加密卷,并且这需要能够通过 SSH 远程完成。

将 3 个分区添加到 后/etc/crypttab,系统启动,并在该initramfs阶段之后等待解锁(并提示输入密码)。但是,通常在远程启动时完成 LUKS 解锁的方式是通过dropbearinitramfs但是由于 3 个分区不在fstab系统中,因此可以说“失败”initramfs并继续systemd。在这种情况下,这是不可取的,因为systemd优先crypttabOpenSSHdropbear意味着远程解锁被禁用。

一个可行的肮脏黑客方法是简单地sleep 300在 initramfs 中添加一个,让您有时间登录dropbear和解锁,但这也是不可取的。我看到有两个选项可以解决这个问题,但不确定哪个最好,而且我也不知道如何实现:

  • 更改systemd启动顺序,以确保类似networking和之类的内容OpenSSH之前已启动crypttab,从而启用远程或本地解锁。

  • 在继续之前等待initramfs重要分区被解锁systemd

答案1

  1. 在ubuntu中解锁luks
  2. 在 /etc/crypttab 末尾添加“,initramfs”
root@a:~# cat /etc/crypttab
vda6_crypt UUID=9f420e32-0821-4cc8-a87e-59db96a12df0 none luks,discard 
vdb_crypt  UUID=8632fd8d-46ca-4c82-931c-6f6e04066465 none luks,discard,initramfs
  1. 更新-initramfs -u
  2. 检查 /cryptroot/crypttab 文件
root@a:~# unmkinitramfs /boot/initrd.img-5.8.0-50-generic /tmp/initramfs
root@a:~# cat /tmp/initramfs/main/cryptroot/crypttab

vda6_crypt UUID=9f420e32-0821-4cc8-a87e-59db96a12df0 none luks,discard
vdb_crypt UUID=8632fd8d-46ca-4c82-931c-6f6e04066465 none luks,discard,initramfs

答案2

我目前正在建立这样一个系统,但是是在 debianstretch 中。在实际设置物理计算机本身之前,我正在虚拟机中进行实验。我在虚拟机中有一个非常相似的设置。

zpool 镜像中有 2 个磁盘用于 /,但不用于 /boot。 /boot 位于 md0 上。 zpool 位于 LUKS 之上。使用EFI。

root@zstaging:~# cat /proc/1/comm
systemd

root@zstaging:~# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda               8:0    0   20G  0 disk
+-sda1            8:1    0  256M  0 part
¦ +-md0           9:0    0  256M  0 raid1 /boot
+-sda2            8:2    0  256M  0 part  /boot/efi
+-sda3            8:3    0 19.5G  0 part
¦ +-disk0_crypt 253:0    0 19.5G  0 crypt
+-sda9            8:9    0    9M  0 part
sdb               8:16   0   20G  0 disk
+-sdb1            8:17   0  256M  0 part
¦ +-md0           9:0    0  256M  0 raid1 /boot
+-sdb2            8:18   0  256M  0 part
+-sdb3            8:19   0 19.5G  0 part
¦ +-disk1_crypt 253:1    0 19.5G  0 crypt
+-sdb9            8:25   0    9M  0 part
sdc               8:32   0   20G  0 disk
sr0              11:0    1  1.8G  0 rom

root@zstaging:~# zpool status
  pool: rpool
 state: ONLINE
  scan: none requested
config:

        NAME             STATE     READ WRITE CKSUM
        rpool            ONLINE       0     0     0
          mirror-0       ONLINE       0     0     0
            disk0_crypt  ONLINE       0     0     0
            disk1_crypt  ONLINE       0     0     0

errors: No known data errors

相关文件及设置:

root@zstaging:~# cat /etc/fstab
UUID=648bfa4b-1b5f-480a-bb26-b3abffb4a6de /boot auto defaults 0 0
PARTUUID=1673f966-173b-4128-84d5-4e8d5810efef /boot/efi vfat defaults 0 1

root@zstaging:~# cat /etc/crypttab
disk0_crypt UUID=26194846-ba49-4e53-ab0b-857b0dad2021 none luks
disk1_crypt UUID=ef44b66a-8706-4be2-bd12-a30d40de9669 none luks

root@zstaging:~# cat /etc/initramfs-tools/conf.d/cryptroot
target=disk0_crypt,source=UUID=26194846-ba49-4e53-ab0b-857b0dad2021,key=none,rootdev
target=disk1_crypt,source=UUID=ef44b66a-8706-4be2-bd12-a30d40de9669,key=none,rootdev

set CRYPTSETUP=y in /etc/cryptsetup-initramfs/conf-hook

# vi /etc/default/grub
replace GRUB_CMDLINE_LINUX="" with GRUB_CMDLINE_LINUX="boot=zfs"
Remove quiet from: GRUB_CMDLINE_LINUX_DEFAULT
Uncomment: GRUB_TERMINAL=console

# update-initramfs -u -k all
# update-grub
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian --recheck --no-floppy

一切都很好。收到一次解锁两个磁盘的提示,然后我们就可以开始了。没有必要在 /etc/fstab 中列出任何 zfs 内容。是的,initramfs 等会抱怨 /etc/fstab,但到目前为止一切正常

我什至可以远程解锁

# apt-get install dropbear-initramfs busybox
# vi /etc/dropbear-initramfs/authorized_keys
Paste my SSH pubkey

# chmod 400 /etc/dropbear-initramfs/authorized_keys
# update-initramfs -u

in another machine that has my SSH keys, add a custom section in ~/.ssh/config:
  Host zstaging_unlock
  HostName <ip_of_zstaging>
  User root
  HostKeyAlias zstaging_unlock

to remote unlock zstaging, from remote machine:
$ ssh zstaging_unlock
and follow prompts

华泰

相关内容