배경

배경

배경

CentOS 8 Stream에서 자동 LUKS 잠금 해제를 구성하려고 합니다. 암호화되지 않은 부팅 파티션에 키 파일을 배치하고 이를 사용하여 LUKS로 보호되는 LVM PV(루트 파일 시스템 포함)를 잠금 해제하려고 합니다. 나는 이것이 이상한 일이고 디스크 암호화의 가치를 상당 부분 무너뜨리는 일이라는 것을 알고 있습니다. 하지만 유머를 부탁드립니다.

현재 레이아웃의 개요는 다음과 같습니다.

$ lsblk
NAME                                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
nvme0n1                                       259:0    0 931.5G  0 disk  
├─nvme0n1p1                                   259:1    0   256M  0 part  /boot/efi
├─nvme0n1p2                                   259:2    0     1G  0 part  /boot
└─nvme0n1p3                                   259:3    0 930.3G  0 part  
  └─luks-3d33d226-9640-4343-ba5a-b9812dda1465 253:0    0 930.3G  0 crypt 
    └─cs-root                                 253:1    0    20G  0 lvm   /
$ sudo e2label /dev/nvme0n1p2
boot

현재 여기에는 /etc/crypttab수동으로 입력한 비밀번호(가독성을 위해 편집된 UUID)로 부팅하기 위한 다음 내용이 포함되어 있으며 이는 훌륭하게 작동합니다.

luks-blah UUID=blah none discard

자동 잠금 해제를 달성하기 위해 키 파일을 생성 /boot/keys/keyfile하고 luksAddKey.

1번 시도

첫 번째 시도에서 crypttab 줄을 다음과 같이 변경했습니다.

luks-blah UUID=blah /keys/keyfile:LABEL=boot discard,keyfile-timeout=10s

이로 인해 루트 파일 시스템이 자동으로 잠금 해제되고 마운트되지만 부팅 프로세스가 실패하고 시스템을 마운트할 수 없기 때문에 복구 모드로 전환됩니다 /boot. 그 이유는 부팅 파티션이 이미 (키 파일을 얻기 위해 임의의 위치에) 마운트되었기 때문입니다 /run/systemd/cryptsetup/keydev-luks-blah.

2번 시도

crypttab을 다음으로 변경해 보았습니다.

luks-blah UUID=blah /boot/keys/keyfile discard,keyfile-timeout=10s

/boot/keys/keyfile나는 아마도 부트 스크립트가 아직 /boot설치되지 않은 상태에서도 액세스하는 방법을 알아낼 만큼 충분히 똑똑할 것이라고 생각했습니다 . 하지만 이것은 작동하지 않습니다. 비밀번호를 수동으로 입력하라는 메시지가 나타납니다.

질문

일반 설치에 사용해야 하는 파티션에 저장된 키 파일을 사용하여 루트 파일 시스템을 잠금 해제하는 방법이 있습니까?

답변1

다음은 Nikita의 제안을 기반으로 한 솔루션입니다. 키 파일을 initramfs에 넣고 CentOS 8에서 작동하도록 조정해 보세요.

이 방법을 사용하면 원본 키 파일을 암호화되지 않은 파일 시스템에 배치할 필요가 없습니다. initramfs 생성 중에 암호화되지 않은(그러나 압축된) initramfs에 복사됩니다. 이것은 약간의 혼란을 더할 수 있습니다.

1. 크립트탭 업데이트

crypttabinitramfs에 배치할 키 파일의 경로를 지정하도록 업데이트합니다 .

luks-blah UUID=blah /boot/keys/keyfile discard,keyfile-timeout=10s

2. dracut 구성

/etc/dracut.conf.dinitramfs에 복사할 키 파일을 구성하는 파일을 이 파일 아래에 생성합니다 (참고자료 참조 man 5 dracut.conf). 키 파일은 initramfs의 동일한 위치에 있습니다.

$ cat /etc/dracut.conf.d/copy-keyfile.conf 
install_items+=/boot/keys/keyfile

이제 initramfs를 업데이트하십시오.dracut -f

3. 확인

임의로 선택할 수 있는:lsinitrd이제 initramfs에 파일이 있는지 확인합니다 . 이것은 나에게 다음을 보여줍니다:

-r-------- 1 root root 32 Aug 9 20:09 boot/keys/keyfile

답변2

키 파일을 다음 위치에 넣으세요.파일 시스템 초기화그러면 시작 스크립트가 그곳에서 이를 찾을 수 있습니다.

하지만 CentOS에서는 이런 일을 해본 적이 없습니다. 나는 LUKS를 사용하지 않지만 아이디어를 시연하는 데는 그다지 중요하지 않습니다.

데비안에서 이를 수행하는 방법은 다음과 같습니다.

파일 /etc/crypttab은 다음과 같습니다.

lvm0 /dev/md/lvm0 none cipher=aes-xts-plain64,hash=ripemd160,keyscript=/etc/initramfs-tools/lvm0.sh

md raid(슈퍼블록 버전 1.2)라는 기본 장치를 사용하고 있어서 UUID로 장치를 효과적으로 식별할 수 있어서 안전합니다. 암호화되지 않은 장치는 /dev/mapper/lvm0이 예와 같으며, 짐작할 수 있듯이 LVM PV입니다.

keyscript는 키를 표준 출력으로 인쇄하는 쉘 스크립트입니다. 여기에 주어진 경로는 경로입니다루트 파일 시스템에서(암호화됨) 데비안의 initramfs 생성 스크립트는 lvm0.shinitramfs에 복사해야 할 파일을 찾고 init 스크립트가 실제로 initramfs에서 중요한 스크립트를 찾을 수 있도록 경로를 조정할 만큼 똑똑합니다 . 주요 스크립트 자체는 다음과 같습니다(문자 그대로 복사하지 말고 원하는 길이의 임의 문자열을 생성하세요).

#!/bin/sh

cat - <<EOF
egjseoius9usajogj8g...
EOF

실제 설정은 다음과 같습니다. 부팅 파티션은 컴퓨터를 시작하는 데 필요한 이동식 미디어에 있습니다. 컴퓨터 부팅이 완료되면 미디어가 삭제됩니다. 저는 이 아이디어를 기반으로 여러 시스템을 구축했습니다. 부팅 미디어(플래시 스틱)가 암호화된 장치를 잠금 해제하는 유일한 방법이기 때문에 모든 경우에 고객은 항상 부팅 미디어의 복사본을 두 개 이상 안전하게 보관해야 합니다.

나는 Gentoo에서도 똑같은 개념을 사용했지만 거기의 시스템은 더 맞춤화되었고 전체 맞춤화 initramfs init 스크립트를 발명했습니다. 스크립트에는 암호화된 장치를 잠금 해제하기 위한 다음과 유사한 명령이 포함되어 있습니다.

cryptsetup open /dev/sda3 pv0 --key-file=/etc/keys/pv0.key --allow-discards --type=plain --cipher=aes-xts-plain64 --key-size=256

(또한 initramfs에 이 파일이 포함되어 있는지 확인해야 합니다 /etc/keys/pv0.key).

이것을 CentOS에 적용할 수 있기를 바랍니다.

관련 정보