起動時に LUKS ルートではなくファイルシステムパーティションをロック解除する

起動時に LUKS ルートではなくファイルシステムパーティションをロック解除する

Ubuntu 16.04の私のシステム/には暗号化されていないパーティションが1つありますが、LUKSは3つのパーティションでZFS zpoolを暗号化しました。システムを正しく起動するには、ZFSやその他のサービス(データベース、ネットワーク、電子メールなど)が起動する前にLUKSボリュームのロックを解除したいと思います。これはSSH経由でリモートで行う必要があります。

3つのパーティションを追加した後、システムが起動し、/etc/crypttabそのinitramfsステップの後にロック解除(およびパスワードプロンプト)が行われるのを待ちます。ただし、リモートブート時にLUKSロック解除が行われる一般的な方法は、「失敗」とdropbear言いinitramfs、3つのパーティションがシステムにないために続行することです。この場合、これはリモートロック解除より優先されるか、リモートロック解除が無効になることを意味するため、望ましくありません。fstabinitramfssystemdsystemdcrypttabOpenSSHdropbear

可能な汚れたハッキン​​グは、sleep 300initramfsに1つを追加してログインしdropbearてロックを解除する時間を与えることですが、これもお勧めできません。この問題を解決するための2つのオプションがありますが、どちらが最善かわかりません。実装方法もわかりません。

  • リモートまたはローカルのロック解除を有効にし、以前に起動したことがないかどうかをsystemd確認するために起動順序を変更します。networkingOpenSSHcrypttab

  • 続行する前に、initramfs重要なパーティションがロック解除されるのを待ってくださいsystemd

答え1

  1. Ubuntuでlukをロック解除する
  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

みんな大丈夫です。一度に2つのディスクのロックを解除するように求められ、うまくいきました。 / 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

ファタイ

関連情報