부팅 시 LUKS 루트가 아닌 파일 시스템 파티션 잠금 해제

부팅 시 LUKS 루트가 아닌 파일 시스템 파티션 잠금 해제

Ubuntu 16.04의 내 시스템 /에는 암호화되지 않은 파티션이 하나 있지만 LUKS는 3개의 파티션에 ZFS zpool을 암호화했습니다. 시스템이 제대로 부팅되도록 하려면 ZFS 및 기타 서비스(예: 데이터베이스, 네트워크, 이메일 등)가 시작되기 전에 LUKS 볼륨을 잠금 해제하고 싶습니다. 이 작업은 SSH를 통해 원격으로 수행해야 합니다.

3개의 파티션을 추가한 후 /etc/crypttab시스템이 부팅되고 initramfs해당 단계 이후에 잠금 해제(및 비밀번호 프롬프트)가 이루어질 때까지 기다립니다. 그러나 원격 부팅 시 LUKS 잠금 해제가 수행되는 일반적인 방법은 "실패" 라고 dropbear말하고 initramfs3개의 파티션이 시스템에 없기 때문에 계속하는 것 입니다 . 이 경우 이는 원격 잠금 해제 보다 우선시되거나 원격 잠금 해제가 비활성화됨을 의미하므로 바람직 하지 않습니다.fstabinitramfssystemdsystemdcrypttabOpenSSHdropbear

가능한 더러운 해킹은 sleep 300initramfs에 하나를 추가하여 로그인 dropbear하고 잠금을 해제할 시간을 주는 것이지만 이 역시 권장되지 않습니다. 이 문제를 해결하기 위한 두 가지 옵션이 있지만 어느 것이 가장 좋은지 확실하지 않으며 구현 방법도 모르겠습니다.

  • 원격 또는 로컬 잠금 해제를 활성화하고 이전에 부팅된 적이 있는지 systemd확인하기 위해 부팅 순서를 변경합니다 .networkingOpenSSHcrypttab

  • 계속하기 전에 initramfs중요한 파티션이 잠금 해제될 때까지 기다리십시오 systemd.

답변1

  1. 우분투에서 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

모두 괜찮습니다. 한 번에 두 개의 디스크를 잠금 해제하라는 메시지가 표시되었고 잘 진행되었습니다. /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

화타이

관련 정보