Ubuntu 22.04를 새로 설치했고 설치 프로그램에서 ZFS+LUKS 전체 드라이브 암호화 옵션을 사용했습니다.
시스템을 부팅할 때마다 암호 해독 문구를 입력하는 대신 USB 키가 감지되면(USB 스틱의 LUKS 잠금 해제 키) 부팅 시 드라이브가 자동으로 잠금 해제되도록 구성하는 방법을 웹에서 검색해 왔습니다.
수많은 가이드를 찾았지만 해당 지침 중 어느 것도 ZFS와 LUKS를 모두 사용할 때 드라이브의 파티션 구조를 설정하는 22.04 방식에 적용할 수 없는 것 같습니다.
내가 따르는 가장 가까운 가이드는 다음과 같습니다. https://tqdev.com/2022-luks-with-usb-unlock
LUKS 드라이브에 키를 추가해야 하는 지점(6단계)에 도달할 때까지는 모든 것이 잘 진행되는 것 같습니다. 두 개의 드라이브가 LUKS 드라이브로 나열되어 있기 때문입니다.
root@bob-home-linux:~# sudo blkid --match-token TYPE=crypto_LUKS -o device
/dev/sdc2
/dev/zd0
여기서 어떻게 진행해야 할지 잘 모르겠습니다!
답변1
업데이트: 2024년 3월 20일:우분투에서 포인트 릴리스(예: 22.04.3 > 22.04.4)를 수행하면 이러한 변경 사항이 재설정되고 13단계와 20단계를 다시 실행해야 합니다.
ZFS를 사용하고 Ubuntu 설치 프로그램을 사용하여 암호화를 사용하여 Ubuntu 22.04 데스크탑을 설치합니다. 이후 단계에서 사용할 수 있도록 암호화 암호를 안전하게 기록해 두십시오. 설치 프로그램에서 복구 키를 설정하지 않았기 때문에 복구 키를 사용할 때 이러한 단계가 작동하는지 알 수 없습니다. YMMV.
설치 후 USB 드라이브를 포맷하고 ext4 표준을 사용하여 새 파티션을 만듭니다(저는 Ubuntu에서 디스크 유틸리티를 사용했습니다). 파티션을 'linux-key'라고 부릅니다.
USB 드라이브가 마운트되었는지 확인하세요. '파일' 애플리케이션을 사용하여 USB가 파일 창의 왼쪽 열에 마운트되어 있는지 확인하세요.
터미널을 시작하고 다음 명령을 입력하여 루트로 전환한 다음 USB 드라이브로 전환합니다.
sudo su cd /media/<yourusername>/linux-key ls -la
USB 드라이브가 비어 있음을 나타내는 빈 디렉토리 목록이 표시되어야 합니다.
root@ubuntu:/media/bob/linux-key$ ls -la total 29 drwx------ 3 bob bob 4096 Jan 25 15:07 . drwxr-x---+ 3 root root 3 Jan 25 15:08 .. drwx------ 2 root root 16384 Jan 25 15:07 lost+found
시스템에 LUKS 파티션을 표시하려면 다음을 입력하십시오. 수정해야 하는 기본 파티션은 일반적으로 /dev/zd0입니다. 아래 명령을 실행할 때 표시되는지 확인하세요.
$ blkid --match-token TYPE=crypto_LUKS -o device /dev/sdc2 /dev/zd0
새 암호화 키 파일을 만듭니다.
dd if=/dev/urandom bs=1 count=256 > linux.key
키 파일이 있는지 확인하세요. 목록에 파일이 표시되어야 합니다.
$ ls -la -rw-rw-r-- 1 root root 256 Jan 25 15:10 linux.key
파티션과 함께 작동하도록 키 파일을 구성한 다음 설치 프로그램에서 이전에 구성한 암호 해독 암호를 입력합니다.
cryptsetup luksAddKey /dev/zd0 linux.key
키 슬롯 1이 채워졌는지 확인하여 키 삽입이 성공했는지 확인하세요.
cryptsetup luksDump /dev/zd0;
... Area offset:32768 [bytes] Area length:258048 [bytes] Digest ID: 0 1: luks2 <------------- the key you just added Key: 512 bits Priority: normal Cipher: aes-xts-plain64 Cipher key: 512 bits PBKDF: argon2id ...
키 파일 권한 조정
chmod 400 linux.key
다음으로 initramfs scripts 폴더로 이동하여 'zfs'라는 파일을 엽니다. 원하는 텍스트 편집기를 사용할 수 있습니다. (
nano
이 예에서는 사용하고 있습니다 )cd /usr/share/initramfs-tools/scripts nano zfs
다음 줄을 찾아 다음 텍스트로 바꿉니다.
이 줄을 찾아보세요
echo "keystore-${pool} ${ks} none luks,discard" >> "${TABFILE}"
이것으로 교체하세요
echo "keystore-${pool} ${ks} none luks,discard,tries=10,keyscript=/scripts/usb-unlock" >> "${TABFILE}"
파일을 저장하고 닫습니다.
동일한 디렉터리에 'usb-unlock'이라는 새 파일을 만듭니다.
nano usb-unlock
이 요지의 스크립트를 붙여넣습니다. 'linux-key'라는 USB 드라이브 파티션을 확인하고 linux.key라는 파일을 검색한 후 이를 사용하여 파티션의 암호를 해독하려고 시도합니다.
파일을 저장하고 닫습니다.
USB 잠금 해제 스크립트에 대한 권한 조정
chmod 755 usb-unlock
스크립트의 디렉터리를 나열합니다. 방금 작업한 두 파일이 755 권한 집합을 가진 루트 사용자에게 속해 있는지 확인하세요.
$ ls -la # you should see these files... -rwxr-xr-x 1 root root 550 Dec 22 20:38 usb-unlock -rwxr-xr-x 1 root root 31665 Dec 22 20:40 zfs
마지막으로 initramfs를 업데이트하여 부팅 시 스크립트를 실행하도록 하세요.
update-initramfs -u
컴퓨터를 재부팅하고 USB 드라이브가 삽입되었는지 확인하세요. 삽입된 경우에는 암호 해독 암호를 입력할 필요가 없습니다. 비밀번호가 누락된 경우 스크립트는 입력해야 하는 비밀번호 문구를 묻는 메시지로 돌아갑니다.
답변2
initramfs에는 숨겨진 '마법'이 있습니다. zfs-initramfs
정확히 말하면 패키지에 있습니다.
/usr/share/initramfs-tools/script/zfs를 보고 다음 줄을 찾으세요.
# Open and mount luks keystore for any pools using one
동작은 다음과 같습니다.
풀(예: rpool
)을 가져온 후 그 안에 있는 암호화되지 않은 볼륨(zvol)을 로 사용할 수 있습니다 /dev/zvol/rpool/keystore
.
이 zvol 장치는 여전히 암호화되어 있습니다.
luks로 암호화된 zvol( )에 대한 crypttab 항목은 zfs list -t volume
부팅 시 /cryptroot/crypttab에 즉시 생성됩니다.
그러면 해당 항목에 대한 암호가 사용자에게 쿼리됩니다.
그러면 장치가 잠금 해제되고 에 암호화되지 않은 상태로 마운트됩니다 /run/rpool/keystore
.
rpool 자체는 암호화되어 있고 해당 키 위치가 이 위치를 가리키므로 rpool의 키를 로드하고 부팅 프로세스를 계속할 수 있습니다.
아마도 누군가가 그것을 적절하게 문서화해야 할 것입니다.)
원래 질문에 대해 initramfs의 가능한 확장 지점을 사용하여 동작을 조정하여 /etc/initramfs-tools/scripts/local-*/
동일한 작업을 수행하고 USB 장치의 암호로 zvol을 직접 마운트하거나 rpool에 대한 키를 직접 제공할 수 있습니다.