我的系统/
在 Ubuntu 16.04 上有一个未加密的分区,但在 3 个分区上有 LUKS 加密的 ZFS zpool。为了使系统正常启动,我希望在 ZFS 和其他服务(如数据库、网络、电子邮件等)启动之前解锁 LUKS 加密卷,并且这需要能够通过 SSH 远程完成。
将 3 个分区添加到 后/etc/crypttab
,系统启动,并在该initramfs
阶段之后等待解锁(并提示输入密码)。但是,通常在远程启动时完成 LUKS 解锁的方式是通过dropbear
,initramfs
但是由于 3 个分区不在fstab
系统中,因此可以说“失败”initramfs
并继续systemd
。在这种情况下,这是不可取的,因为systemd
优先crypttab
于OpenSSH
或dropbear
意味着远程解锁被禁用。
一个可行的肮脏黑客方法是简单地sleep 300
在 initramfs 中添加一个,让您有时间登录dropbear
和解锁,但这也是不可取的。我看到有两个选项可以解决这个问题,但不确定哪个最好,而且我也不知道如何实现:
更改
systemd
启动顺序,以确保类似networking
和之类的内容OpenSSH
之前已启动crypttab
,从而启用远程或本地解锁。在继续之前等待
initramfs
重要分区被解锁systemd
。
答案1
- 在ubuntu中解锁luks
- 在 /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
- 更新-initramfs -u
- 检查 /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
华泰