Debian Jessie의 systemd에서 암호화된 다중 디스크 루트 파일 시스템을 안정적으로 부팅하는 데 많은 문제가 있습니다. 동시에 비밀번호를 한 번만 입력하면 됩니다. 이전에는 Debian에서 decrypt_derived
첫 번째 장치를 제외한 모든 장치에 대해 /etc/crypttab의 키 스크립트를 사용하여 이 문제를 처리했는데 , 이는 잘 작동했습니다.
그러나 systemd가 도입되면 제대로 작동하지 않습니다. systemd-cryptsetup-generator
키보드 스크립트를 처리하지 않으며 이 문제를 해결하는 방법에 대한 추가 정보를 찾으려고 할 때 일부 사용자 정의에 대한 모호한 참조만 발견했습니다.비밀번호 프록시안에이메일쓸모없는 조언만 제공한 시스템 개발자의 말:"에이전트를 추가로 작성하기 쉽습니다. 따르는 기본 알고리즘은 다음과 같습니다."그런 다음 취해야 할 13가지 단계를 나열합니다. 분명히 최종 사용자에게는 적합하지 않습니다.
/etc/crypttab
데비안에서는 systemd에게 부팅 중에 이를 무시하거나 완전히 무시하도록 지시하는 몇 가지 커널 옵션을 사용하여 어느 정도 작동하도록 했습니다 . 데비안은 update-initramfs
핵심 스크립트를 initramfs에 복사하고 systemd가 인계받기 전에 장치의 잠금을 해제하지만 systemd에는 이제 장치를 해독하기 위한 단위 파일이 없기 때문에 나중에 문제가 발생한다는 것을 발견했습니다. 그래서 때때로 이에 의존하는 마운트가 있습니다. 시작이 멈추거나 지연되는 것 같습니다. 이것이 문제가 되는 한 가지 장소는 btrfs 하위 볼륨을 마운트하려고 할 때입니다. 하위 볼륨은 루트와 동일한 물리적 장치에서 마운트되지만 systemd는 장치가 잠금 해제되어 부팅 시 중지되는 것을 알지 못합니다.
TL;DR - 실제 질문:
비밀번호를 한 번만 입력하면 되는 여러 장치(btrfs 시스템, LVM 이미지 등)에서 암호화된 루트 파일 시스템을 systemd는 어떻게 처리합니까? 저는 이것이 매우 특이한 상황이라고 생각하지 않습니다. 따라서 이를 수행할 수 있는 방법이 있기를 바랍니다.
나는 몇 가지 가능한 해결책을 생각해 보았습니다.
- 키 파일이 포함된 작은 암호화 파티션으로, 루팅 전에 잠금 해제됩니다. 루팅된 장치는 이 키 파일을 참조합니다. 이것을 systemd에게 어떻게 알릴 수 있나요?
- 비밀번호를 기억하고 시작 시 이를 필요한 모든 장치에 전달하는 initramfs에서 실행되는 일종의 캐싱 비밀번호 에이전트입니다.
- 누군가 decryption_derivation을 시뮬레이트하는 systemd 에이전트를 작성했습니다. 이것을 내 런처에 어떻게 통합하나요?
나는 데비안만 실행하지만 문제에 대한 해결책을 찾기 위해 며칠 동안 노력한 후에 이것이 시스템 전반에 걸친 문제일 수도 있다는 느낌이 들었습니다.
답변1
이는 잘 알려진 문제이며 현재로서는 해결책이 없습니다.
Debian(및 기타 시스템)에서 systemd는 병렬 프로세스 및 다양한 테스트로 인해 암호화된 BTRFS 배열을 어셈블할 수 없습니다. (올바르게) 마운트하려면 BTRFS 배열의 모든 볼륨이 존재해야 하지만 BTRFS 배열의 모든 볼륨은 설계상 동일한 UUID를 갖기 때문에 systemd는 다른 볼륨을 기다리지 않고 열린 첫 번째 볼륨을 마운트하려고 시도합니다. 동일한 UUID로 인해 시스템이 더욱 혼란스러워졌습니다.)
현재 데비안에서 암호화된 BTRFS 볼륨을 사용하는 유일한 방법은 다음과 같습니다.아니요systemd(패키지 등)를 사용 sysvinit-core
하세요 systemd-shim
. "시스템화된 방식"은 불가능합니다.
답변2
이제 이 문제에 대한 해결책이 있습니다(적어도 Ubuntu 18.04+에서는 Debian 및 CentOS-7이라고 가정합니다). 설명하다여기. 인용하다:
Systemd...모든 추가 LUKS 파티션을 잠금 해제합니다.만약에
- 잠금을 해제하려는 모든 파티션에 동일한 비밀번호를 사용하세요.
- 처음에는 올바른 루트 파티션 비밀번호를 입력하십시오. 실수한 경우에는 추가 LUKS 파티션마다 다시 입력해야 합니다.