나는 루트 파일 시스템이 다음과 같은 Debian Buster를 실행하는 서버를 가지고 있습니다.~ 아니다암호화되어 있지만 다른 드라이브는 암호화되어 있습니다.
[예상 시간:모든 OS 시스템 디렉터리( /var
, /home
, /etc
등)는 암호화되지 않은 루트 파티션에 있습니다. 스왑은 암호화되지만 부팅할 때마다 새로운 임의의 키를 사용하여 비대화식으로 생성되므로 이를 기다리는 것이 아무것도 없습니다.]
암호화된 '저장소'를 해독하고 마운트하기 위한 항목이 /etc/crypttab 및 /etc/fstab에 있습니다 . 드라이브 및 부팅 프로세스는 다른 드라이브의 암호를 해독하는 키 파일을 보유하는 작은 암호화된 파티션에 대한 암호를 무기한 기다립니다. 여태까지는 그런대로 잘됐다. 물리적으로 연결된 모니터에 암호 문구가 나타나면 물리적으로 연결된 키보드에 암호를 입력하고 부팅이 진행됩니다. OpenSSH 데몬을 설치하고 공개 키 인증을 사용하여 부팅 후 모든 종류의 관리를 위해 서버에 연결합니다.
이제 SSH를 통해 원격으로 LUKS 장치의 잠금을 해제할 수 있기를 원합니다. 루트는~ 아니다암호화된 파일 시스템 중 하나인 경우 "initramfs의 dropbear+busybox" 전체 작업이 필요하지 않으며 이것이 비교적 간단할 것이라고 생각했습니다.
sudo systemctl edit ssh.service
그리고 다음 줄을 추가하세요:
[Unit]
Before=cryptsetup-pre.target
[Install]
WantedBy=cryptsetup-pre.target
이렇게 하면 로컬 디스크의 암호 해독을 시작하기 전에 sshd를 시작하기 위해 시스템이 셔플을 해야 합니다. 그렇죠? ( Sshd가 예상대로 나타나지 않으면 systemd가 cryptsetup을 '실패'하는 것을 원하지 않기 때문에 WantedBy
대신 선택했습니다 .)RequiredBy
sudo systemctl daemon-reload
불평하지 않고 cat /etc/systemd/system/ssh.service.d/override.conf
예상대로 네 줄을 보여줍니다. 재부팅 시 암호 프롬프트가 표시되지만(예상) 서버에 SSH를 연결하려는 모든 시도는 으로 돌아오므 No route to host
로 분명히 ssh.service가 먼저 시작되지 않았습니다.
ssh가 WantedBy이고 대신 systemd의 생성 단위 이전에 제공되도록 지정하기 위해 재정의를 변경해 보았습니다 [email protected]
. 흥미롭게도 이로 인해 ssh가 발생하지 않았습니다.그리고암호 프롬프트가 없어서 부팅이 영원히 중단되었고 복구 미디어에서 부팅하고 재정의를 제거해야 했습니다. 꼭 도움이 되는 것은 아니지만 적어도 관찰 가능한 효과가 있었습니다. 어쩌면 어딘가에 순환 종속성을 만들었을까요? 암호 프롬프트가 나오는 것 같습니다.정말부팅 순서 초기에.
여기서 나의 다음 단계는 무엇입니까? systemd에서 생성된 cryptsetup 단위를 재정의하여 이를 제공 Wants=
하고 After=
링크할 수 있습니까 ssh.service
? 가능하다면 더 나은 결과를 얻을 것이라고 생각할 이유가 있습니까? 해당 키 저장소 파티션에 대해 /etc/ 아래에 자체 단위를 작성하고 해당 inittab 및 fstab 항목을 제거하는 것이 합리적입니까? 간단히 말해서, 이 작업을 수행하는 원격으로 정상적인 방법이 있습니까? 아니면 결국 이 방법을 포기하고 initramfs에서 dropbear+busybox로 가야 합니까?
추신. 암호화된 드라이브를 'noauto'로 만드는 방법도 생각했지만 나중에 부팅 프로세스에서 자동 시작되도록 구성된 디스크에 VM이 있으므로 실제로는 원격 잠금 해제 작업을 수행하는 것이 좋습니다.
답변1
사용하거나 cryptsetup.target
작동 cryptsetup-pre.target
하지 않았지만 이유가 없습니다.
다음에 대한 오버레이를 만드는 데 효과적이었습니다 [email protected]
.
# /etc/systemd/system/[email protected]/myservice.conf
[Unit]
Wants=myservice.service
After=myservice.service