하나의 비밀번호로 모든 LUKS 볼륨을 여는 방법은 무엇입니까?

하나의 비밀번호로 모든 LUKS 볼륨을 여는 방법은 무엇입니까?

저는 EndeavourOS(기본적으로 Arch)를 사용하고 있지만 initrd로 systemd-boot와 dracut을 사용하고 있습니다. 암호화되지 않은 부팅 파티션과 LUKS 암호화된 루트 및 스왑 파티션을 사용하여 간단한 설정을 했습니다. 특히 설정은 아래 출력에 설명되어 있습니다.

$ cat /etc/fstab
# <file system>             <mount point>  <type>  <options>  <dump>  <pass>
UUID=8A2F-4076                            /efi           vfat    defaults,noatime 0 2
/dev/mapper/luks-81733cbe-81f5-4506-8369-1c9b62e7d6be /              ext4    defaults,noatime 0 1
/dev/mapper/luks-9715a3f9-f701-47b8-9b55-5143ca88dcd8 swap           swap    defaults   0 0
tmpfs                                     /tmp           tmpfs   defaults,noatime,mode=1777 0 0

$ lsblk -f
NAME                                          FSTYPE      FSVER LABEL       UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
nvme0n1                                                                                                                         
├─nvme0n1p1                                   vfat        FAT32             8A2F-4076                             915.6M     8% /efi
├─nvme0n1p2                                   crypto_LUKS 1                 81733cbe-81f5-4506-8369-1c9b62e7d6be                
│ └─luks-81733cbe-81f5-4506-8369-1c9b62e7d6be ext4        1.0   endeavouros d8d14c59-8704-4fb8-ad02-7d20a26bc1e1  843.6G     2% /
└─nvme0n1p3                                   crypto_LUKS 1                 9715a3f9-f701-47b8-9b55-5143ca88dcd8                
  └─luks-9715a3f9-f701-47b8-9b55-5143ca88dcd8 swap        1     swap        b003ea64-a38d-464c-8609-7278e21f8a0f                [SWAP]

문제는 컴퓨터를 시작할 때마다 루트 파티션에 한 번, 스왑 파티션에 한 번 비밀번호를 두 번 입력해야 한다는 것입니다(도움이 된다면 두 파티션에 동일한 비밀번호를 사용한다는 점에 유의하세요). 이것은 번거로운 일이 되었습니다. 제 질문은: 루트 파티션 비밀번호를 성공적으로 입력한 후 스왑 파티션을 자동으로 해독하는 방법이 있습니까?

이것과 매우 비슷한 질문이 있습니다현명한 대답, 그러나 성공하지 못했습니다. 대답의 첫 번째 부분은 데비안 중심이며 다른 배포판에는 존재하지 않는 스크립팅 옵션이 있습니다. 두 번째 부분에서는 crypttab을 사용하여 다른 파티션의 암호를 해독하는 데 사용되는 키 파일의 위치를 ​​지정합니다.

지금까지 initrd의 crypttab은 다음과 같으며 /crypto_keyfile.bin루트 파티션에 존재하는 모든 파티션을 엽니다.

$ lsinitrd --file /etc/crypttab
luks-81733cbe-81f5-4506-8369-1c9b62e7d6be /dev/disk/by-uuid/81733cbe-81f5-4506-8369-1c9b62e7d6be /crypto_keyfile.bin luks
luks-9715a3f9-f701-47b8-9b55-5143ca88dcd8 /dev/disk/by-uuid/9715a3f9-f701-47b8-9b55-5143ca88dcd8 /crypto_keyfile.bin luks

이 접근 방식은 다음 두 가지 이유로 작동하지 않습니다.

  1. 연결된 답변에서 제안한 것과는 달리(사용자에게 crypttab 항목 순서대로 파티션을 쿼리함) 순서는 부팅할 때마다 무작위로 지정됩니다. 루트를 연 후 자동으로 스왑 파티션을 열 수 있더라도 스왑이 먼저 오면 키 파일이 루트에 있기 때문에 루트의 비밀번호를 입력해야 합니다.
  2. 루트 비밀번호를 입력한 후 바로 파일 시스템이 마운트되지 않는 것 같습니다. initrd 파일 시스템이 실제로 /crypto_keyfile.bin검색되는데, 이는 로그에 두 번 나타나는 다음 오류를 설명합니다.systemd-cryptsetup[460]: Failed to activate, key file '/crypto_keyfile.bin' missing.

따라서 제가 올바른 길을 가고 있다면 systemd-cryptsetup루트 파티션을 먼저 쿼리한 다음 스왑 파티션을 쿼리할 때마다 어떻게 확인하고 루트 파티션을 연 후 파일 시스템이 마운트되어 /crypto_keyfile.bin성공적으로 열렸는지 확인하려면 어떻게 해야 합니까? 스왑 파티션?

그렇지 않고 여기서 완전히 벗어나면 내가 원하는 것을 달성할 수 있는 방법이 있습니까?

감사해요.

답변1

Arch 전문가는 아니지만 데비안 중심 스크립트는 데비안에서 잘 작동하지만 이에 따르면위키피디아 페이지작동해야 하거나 적어도 작동할 것으로 예상됩니다.

부팅 중에 입력한 비밀번호는 systemd-cryptsetup(8)에 의해 커널 키링에 캐시되므로 동일한 비밀번호로 여러 장치를 잠금 해제할 수 있는 경우(여기에는 crypttab에서 부팅 후 잠금 해제된 장치가 포함됨) 각 장치 비밀번호만 입력하면 됩니다. 한 번.

설정에서 문제가 있는 것으로 보이는 것은 루트 파티션의 키 파일을 사용하도록 crypttab을 구성하고 키 파일이 암호화된 루트 파티션에 저장된다는 것입니다. 비밀번호를 입력하고 둘 다에 동일한 비밀번호를 사용해도 괜찮으므로 nonecrypttab에서 키 파일을 설정하면 문제가 해결될 수 있습니다.

이것systemd-cryptsetup 맨페이지비밀번호 캐싱도 명시적으로 언급되어 있으므로 켜는 순서는 중요하지 않습니다.

만약을 대비해 최대 절전 모드/재개를 사용하지 않는 경우 임의 키를 사용하여 스왑 파티션을 암호화할 수도 있습니다.

관련 정보