it-swarm-ko.tech

헤드리스 서버 부팅 중에 암호화 된 LVM을 해독하는 SSH?

Ubuntu 10.04 및 현재 10.10을 설치할 때 하드 드라이브에 "암호화 된 LVM"을 활성화하는 옵션이 제공되었습니다. 이 옵션을 선택한 후 부팅 중에 LVM을 해독하기 위해 암호를 입력하라는 메시지가 표시됩니다.

이제 Linux를 실행하는 헤드리스 서버 (우분투는 아님)를 설정하려고합니다. 그러나 서버가 헤드리스이므로 시작하는 동안 서버를 해독 할 수 없을지 걱정됩니다. 부팅하는 동안 SSH를 사용하여 암호화 된 LVM의 비밀번호를 입력 할 수 있습니까? 그렇다면 어떻게 설정합니까? 아니면 다른 해결책이 있습니까? 이 질문은 우분투에만 국한되지 않습니다. 감사.

62
hpy

14.04와 같은 최신 버전의 우분투의 경우 @dragly와 this blogposts ' 답변의 조합이 매우 유용하다는 것을 알았습니다. 말을 바꾸려면 :

  1. (서버에서) Dropbear 설치

    Sudo apt-get install dropbear
    
  2. (서버에서) 루트 공개/개인 키 로그인에 대한 권한 복사 및 할당

    Sudo cp /etc/initramfs-tools/root/.ssh/id_rsa ~/.
    Sudo chown user:user ~/id_rsa
    

user 를 서버의 사용자 이름으로 변경하십시오.

  1. (클라이언트에서) 서버에서 개인 키를 가져옵니다.

    scp [email protected]:~/id_rsa ~/.ssh/id_rsa_dropbear
    
  2. (클라이언트에서) ssh 구성에 항목 추가

    Host parkia
        Hostname 192.168.11.111
        User root
        UserKnownHostsFile ~/.ssh/know_hosts.initramfs
        IdentityFile ~/.ssh/id_rsa_dropbear
    Remember to change _parkia_ to whatever you'd like to type `ssh my-box` to be.
    
  3. (서버에서) 이 파일 에서 /etc/initramfs-tools/hooks/crypt_unlock.sh

  4. (서버에서) 해당 파일을 실행 가능하게 만들기

    Sudo chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh
    
  5. Initramfs 업데이트

    Sudo update-initramfs -u
    
  6. 부팅시 dropbear 서비스를 비활성화하여 파티션이 해독 된 후 openssh를 사용합니다

    Sudo update-rc.d dropbear disable
    

끝났습니다. 사용해보십시오. 정적 IP 주소로 서버를 구성하는 방법에 대한 지침은 위에서 링크 된 블로그 게시물을 확인하십시오.

26
nsg

BusyBox 및 Dropbear를 사용하여 이러한 설정을 수행하는 가이드는 이 블로그 게시물 에 표시되어 있습니다. early-ssh는 나를 위해 작동하지 않았으며 더 이상 필요하지 않습니다.

다음에서 수행해야 할 작업을 요약했습니다. 자세한 내용은 위의 게시물을 살펴보십시오.

  1. 서버 에 BusyBox 및 Dropbear를 설치하십시오.

    Sudo apt-get install dropbear busybox
    
  2. 서버 에서 initramfs를 업데이트하십시오.

    Sudo update-initramfs -u
    
  3. Dropbear에 의해 생성 된 개인 키를 클라이언트 시스템에 복사하십시오. 이것을 새로운 디렉토리에 복사하고 소유권을 변경해야 할 수도 있습니다. server 에서 다음을 수행하십시오.

    Sudo cp /etc/initramfs-tools/root/.ssh/id_rsa ~/.
    Sudo chown user:user ~/id_rsa
    

    사용자를 사용자 이름으로 바꾸십시오. 비밀번호 로그인이 작동하지 않는 것 같습니다.

  4. 이제 client 에서 다음을 호출하여 scp로 개인 키를 전송할 수 있습니다.

    scp [email protected]:~/id_rsa ~/.ssh/id_rsa_dropbear
    
  5. 쉬운 로그인을 위해 client 의 ~/.ssh/config 파일을 설정하십시오. 텍스트 편집기로 열고 다음을 추가하십시오.

    Host myremoteserver
        HostName my.remote.server
        User root
        UserKnownHostsFile ~/.ssh/known_hosts.initramfs
        IdentityFile ~/.ssh/id_rsa_dropbear
    

    호스트를 원하는대로 변경하고 HostName을 서버 이름으로 변경하십시오. 사용자를 루트로 둡니다. Dropbear에서 유일한 사용자로 보입니다. 파일을 저장하고 닫습니다.

  6. server 를 다시 시작하고 암호문 프롬프트를 기다립니다. 인터넷 연결을 감지하고 설정하기 위해 Dropbear에 몇 초의 시간을주십시오. client 에서 다음 명령을 사용하여 서버에 연결하십시오.

    ssh myremoteserver # or any name you chose
    
  7. 로그인하면 server 에서 다음 명령을 실행하십시오. 자세한 내용은 블로그 게시물을 참조하십시오.

    pid=`ps | grep "/scripts/local-top/cryptroot" | cut -d " " -f 3`
    kill -9 $pid
    sleep 35
    /scripts/local-top/cryptroot
    pid=`ps | grep "/bin/sh" | cut -d " " -f 3`
    kill -9 $pid;
    

    암호를 입력하기까지 약간의 시간 (30 초)이 소요됩니다. 프롬프트가 표시되면 입력하십시오.

  8. 입력하여 연결을 닫습니다

    exit
    
  9. 서버는 이제 암호화 된 하드 드라이브를 잠금 해제하고 정상적으로 부팅해야합니다.

(블로그 게시물의 최초 작성자에게 큰 감사를드립니다!)

23
dragly

나는 early-ssh 당신이 찾고있는 것을 제공한다고 생각합니다 :

Early-ssh is a simple initramfs hook, which installs Dropbear SSH server into  
your initramfs, and starts it at boottime, so you will be able to do a lot of  
things remotely over SSH, before your root partition gets mounted, for example:

* unlocking LUKS encrypted crypto devices - 
  even your root can be an encrypted filesystem
* assembling/altering RAID arrays (mdadm)
* checking the root filesystem in read-write mode, 
  taking action in case of errors
* and so on...

이미 사용 가능한 .deb 패키지가 있으므로 Ubuntu를 사용하는 것이 좋습니다.

18
wag

/usr/share/doc/cryptsetup/README.remote.gz (Ubuntu 패키지 cryptsetup)에서 이에 대한 cryptsetup readme를 살펴보십시오. 이를 달성하기위한 완전한 가이드가 있습니다. dragly 's answer 와 비슷하지만 조금 더 우아하다고 생각합니다. (Dropbear 형식 키, 취약한 쉘 스크립트 등이 아닌 FIFO를 통해 암호문을 전달)

initramfs에서 SSH 로그인을 통해 rootfs 잠금 해제

Initramfs가 마운트 된 상태에서 ssh를 사용하여 부팅 시스템에 로그인하여 원격으로 부팅 할 때 rootfs의 잠금을 해제 할 수 있습니다.

설정

원격 잠금 해제가 작동하려면 initramfs를 빌드하기 전에 다음 패키지를 설치해야합니다. dropbearbusybox

/etc/initramfs-tools/initramfs.conf 파일은 initramfs를 빌드 할 때 사용되는 구성 옵션을 보유합니다. initramfs에 busybox를 설치하려면 BUSYBOX=y (busybox 패키지가 설치 될 때 기본값으로 설정 됨)를 포함해야하며, DROPBEAR=n를 포함하지 않아야합니다. . DROPBEAR=y로 설정하면 dropbear가 설치됩니다. DROPBEAR이 전혀 설정되지 않은 경우 기존 cryptroot 설정의 경우에만 dropbear가 설치됩니다.

Initramfs에 사용되는 호스트 키는 dropbear_dss_Host_key에있는 dropbear_rsa_Host_key/etc/initramfs-tools/etc/dropbear/입니다. initramfs가 컴파일 될 때 존재하지 않으면 자동으로 생성됩니다. 다음은 수동으로 작성하는 명령입니다.

dropbearkey -t dss -f /etc/initramfs-tools/etc/dropbear/dropbear_dss_Host_key
dropbearkey -t rsa -f /etc/initramfs-tools/etc/dropbear/dropbear_rsa_Host_key

Initramfs는 암호화되지 않으므로 공개 키 인증이 가정됩니다. 사용 된 키는 /etc/initramfs-tools/root/.ssh/authorized_keys에서 가져옵니다. initramfs가 컴파일 될 때이 파일이 존재하지 않으면 파일이 생성되고 /etc/initramfs-tools/root/.ssh/id_rsa.pub가 추가됩니다. 후자의 파일도 존재하지 않으면 자동으로 생성됩니다. 나중에 /etc/initramfs-tools/root/.ssh/id_rsa (또는 id_rsa.dropbear의 initramfs에 로그인해야하는 일치하는 개인 키를 찾을 수 있습니다. dropbear 형식으로 필요한 경우). 다음은 각 단계를 수동으로 수행하는 명령입니다.

키를 작성하려면 (dropbear 형식) :

dropbearkey -t rsa -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear

키를 dropbear 형식에서 openssh 형식으로 변환하려면

/usr/lib/dropbear/dropbearconvert dropbear openssh \
    /etc/initramfs-tools/root/.ssh/id_rsa.dropbear \
    /etc/initramfs-tools/root/.ssh/id_rsa

공개 키를 추출하려면 다음을 수행하십시오.

dropbearkey -y -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear | \
    grep "^ssh-rsa " > /etc/initramfs-tools/root/.ssh/id_rsa.pub

Authorized_keys 파일에 공개 키를 추가하려면 다음을 수행하십시오.

cat /etc/initramfs-tools/root/.ssh/id_rsa.pub >> /etc/initramfs-tools/root/.ssh/authorized_keys

Dhcp를 사용하여 일부 인터페이스를 구성하려면 DEVICE=에서 /etc/initramfs-tools/initramfs.conf를 설정하면 충분합니다. initramfs는 ip= 커널 매개 변수도 준수해야합니다. grub을 사용하는 경우 아마도 '/boot/grub/menu.lst'줄에서 또는 특정 'kernel'줄에 추가 된 # kopt=에서 설정할 수 있습니다. ip= 커널 매개 변수는 커널 소스 트리의 Documentation/nfsroot.txt에 문서화되어 있습니다.

이슈

설정을 변경했을 때 update-initramfs를 실행하는 것을 잊지 마십시오!

Ssh 데몬에 대한 충분한 엔트로피를 수집하는 것이 때때로 문제인 것 같습니다. 엔트로피가 충분히 검색 될 때까지 ssh 데몬의 시작이 지연 될 수 있습니다. 이것은 시작 프로세스에 대한 차단이 아니므로 콘솔에있을 때 sshd가 시작을 완료 할 때까지 기다릴 필요가 없습니다.

잠금 해제 절차

원격에서 잠금을 해제하려면 다음과 같이 할 수 있습니다.

ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" \
    -i "~/id_rsa.initramfs" [email protected] \
    "echo -ne \"secret\" >/lib/cryptsetup/passfifo"

이 예에서는 cryptroot 시스템의 호스트 키를 보유하는 추가 known_hosts 파일 "~/.ssh/known_hosts.initramfs"가 있고 권한이있는 "~/id_rsa.initramfs"파일이 있다고 가정합니다. cryptroot 시스템의 키, cryptroot 시스템의 이름은 "initramfshost.example.com"이고 cryptroot 암호는 "secret"입니다.

-<[email protected]>, 2009 년 9 월 30 일 수요일

다른 채널에서 이것을 지적 해 주신 jap 에게 감사드립니다.

16
gertvdijk

원격으로뿐만 아니라 무인 부팅 할 수 있으려면 Mandos (나와 다른 사람들도 참조) 썼다) :

Mandos는 암호화 된 루트 파일 시스템이있는 서버를 무인 및/또는 원격으로 재부팅 할 수있는 시스템입니다. FAQ 목록 포함)에 대한 자세한 내용은 소개 매뉴얼 페이지 파일을 참조하십시오.

즉, 부팅 서버는 네트워크를 통해 안전한 방식으로 암호를 얻습니다. 자세한 내용은 README을 참조하십시오.

6
Teddy

헤드리스 서버? 직렬 포트가 있으면 사용하십시오.

GRUB은 직렬 포트를 통해 작동하도록 구성 할 수 있습니다. 커널은 초기 부팅 메시지를 출력하고 드라이브 잠금을 해제하기 위해 암호를 입력하고 로그인하기 위해 직렬 포트를 사용하도록 구성 할 수도 있습니다. (서버가 직렬 BIOS를 지원하는 경우이를 활성화하십시오. 기계에 대한 모니터).

헤드리스 서버에 "네트워크가 아닌"방법을 사용하는 것이 좋습니다.

2
LawrenceC

불행히도 위의 답변 중 어느 것도 나를 위해 일하지 않았습니다. 또한 서버에서 개인 키를 복사하는 것은 역설적 인 것처럼 보입니다.

어쨌든 지침을 따르십시오

CLIENT를 통해 암호화 된 파티션을 연결 및 잠금 해제하여 서버를 부팅하십시오.

SERVER에 필수 패키지 설치

apt-get install dropbear initramfs-tools busybox

원하는 공개 키를 SERVER의 certified_keys 파일에 추가하십시오

공개 키를 복사하여 서버의 /etc/dropbear-initramfs/authorized_keys에 붙여 넣기 만하면됩니다.

잠금 해제 스크립트 생성

/etc/initramfs-tools/hooks/crypt_unlock.sh에 다음 스크립트를 작성하십시오.

#!/bin/sh

PREREQ="dropbear"

prereqs() {
  echo "$PREREQ"
}

case "$1" in
  prereqs)
    prereqs
    exit 0
  ;;
esac

. "${CONFDIR}/initramfs.conf"
. /usr/share/initramfs-tools/hook-functions

if [ "${DROPBEAR}" != "n" ] && [ -r "/etc/crypttab" ] ; then
cat > "${DESTDIR}/bin/unlock" << EOF
#!/bin/sh
if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot; then
kill \`ps | grep cryptroot | grep -v "grep" | awk '{print \$1}'\`
# following line kill the remote Shell right after the passphrase has
# been entered.
kill -9 \`ps | grep "\-sh" | grep -v "grep" | awk '{print \$1}'\`
exit 0
fi
exit 1
EOF

  chmod 755 "${DESTDIR}/bin/unlock"

  mkdir -p "${DESTDIR}/lib/unlock"
cat > "${DESTDIR}/lib/unlock/plymouth" << EOF
#!/bin/sh
[ "\$1" == "--ping" ] && exit 1
/bin/plymouth "\[email protected]"
EOF

  chmod 755 "${DESTDIR}/lib/unlock/plymouth"

  echo To unlock root-partition run "unlock" >> ${DESTDIR}/etc/motd

fi

실행 가능하게 만드십시오.

chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh

고정 IP를 만듭니다 (또는 DHCP를 사용하려면이 단계를 건너 뜁니다).

행을 추가하거나 변경하려면 /etc/initramfs-tools/initramfs.conf를 편집하십시오.

#format [Host ip]::[gateway ip]:[netmask]:[hostname]:[device]:[autoconf]
#([hostname] can be omitted)
IP=192.168.1.254::192.168.1.1:255.255.255.0::eth0:off

Initialramfs 업데이트

update-initramfs -u

부팅시 dropbear 서비스를 비활성화하여 파티션이 해독 된 후 openssh를 사용합니다

Sudo update-rc.d dropbear disable

테스팅

  • 서버를 재부팅
  • ssh [email protected] [-i ~/.ssh/id_rsa]를 통해 서버에 연결하십시오
2
ceremcem

아치 리눅스에는 AUR 패키지 dropbear_initrd_encrypt 가 있습니다. 유선 인터페이스에 적합합니다. 무선으로 약간 해킹해야했습니다.

2
user3188445

Debian 9 (stable) 에서이 솔루션은 구식이었습니다. 설치하는 동안 dropbear: WARNING: Invalid authorized_keys file, remote unlocking of cryptroot via SSH won't work!에 대한 경고가 표시되고 필요한 키를 찾을 수 없습니다. 이 방법은 정말 간단하며 훌륭한 #debian 채널에서 다시 설명했습니다 (다시 감사드립니다).

먼저 busybox, dropbeardropbear-initramfs가 설치되어 있는지 확인하십시오.

Sudo apt install busybox dropbear*

그런 다음 ~/.ssh/id_rsa.pub 파일에 공개 키 (대부분 /etc/dropbear-initramfs/authorized_keys)를 추가하십시오.

initramfs를 업데이트하여 변경 사항을 고려하십시오. : update-initramfs -u

그게 다야!

dropbearopenssh 사이의 키가 충돌하지 않도록하려면 (동일한 IP를 공유하지만 다른 키를 사용) 클라이언트에 ~/.ssh/config 같은 것 :

Host myserver_luks_unlock
     User root
     Hostname <myserver>
     # The next line is useful to avoid ssh conflict with IP
     HostKeyAlias <myserver>_luks_unlock
     Port 22
     PreferredAuthentications publickey
     IdentityFile ~/.ssh/id_rsa

그런 다음 다음을 사용하여 연결하십시오.

ssh myserver_luks_unlock

프롬프트가 표시되면 busybox Prompt에서 제안한대로 입력하십시오.

cryptroot-unlock

비밀번호를 입력하십시오.

즐겨!

2
tobiasBora

필자는 헤드리스 Ubuntu Linux 서버를 원격으로 잠금 해제하기 위해이 페이지에서 다른 사람들이 설명 한 기술 (커널을 구성하기 위해 커널 IP 매개 변수를 가진 initramfs의 SSH)을 사용하고 있습니다. 16.04 및 18.04).

심지어 수동으로 수행하는 프로세스가 느꼈기 때문에 실제 잠금 해제를 수행하는 Python 프로그램 ( nlock-remote-system ))을 개발하기까지했습니다. 약간 깨지기 쉽고 서버를 재부팅하는 것을 두려워하기 시작했습니다. 그래서 "그것이 아프면 자동화 가치가 있습니다"라는 정신으로 Python ????)에 내 지식을 인코딩했습니다. 보안 업데이트를 적용하기 위해 정기적으로 재부팅하는 것이 훨씬 쉬워졌습니다).

그 이후로 원격 루트 디스크 암호화 에 대한 개인 메모를 세계와 공유하기로 결정했습니다. 링크 된 페이지에는 절차에 대한 세부 정보 (여기에 언급되지 않은 힌트)가 포함되어 있으며 최신 상태로 유지하려고합니다.

1
xolox

나는 당신을 위해 이것을하는 Ansible 역할을 썼습니다. debops-contrib.dropbear_initramfs 역할을 가져 와서 실행하십시오. 자세한 내용은 역할 문서 를 참조하십시오.

0
ypid