파티션을 자동 해독하도록 LVM 및 LUKS를 구성하는 방법은 무엇입니까?


21

최근에 전체 lvm 암호화 (설정에서 설치)로 우분투 서버 11.04를 설치했습니다. 자동 잠금 해제를 위해 키 파일을 사용하고 싶습니다. 이 가이드를 따르려고했습니다 http://ubuntuforums.org/showthread.php?t=837416

이 명령으로 키를 생성했습니다. sudo dd if=/dev/urandom of=/boot/grub/keyfile bs=1024 count=4

/boot/grub암호화되지 않았다고 생각하기 때문에 넣었습니다 . 이 쉼표로 키를 추가하려고 sudo cryptsetup luksAddKey /dev/sdX /boot/grub/keyfile 하면 암호 문구를 묻고 아무 것도 입력하지 않으면 아무 것도 화면에 인쇄되지 않습니다! 나는 그것을 무시하고 다른 단계를 계속하고 재부팅하지만 아무 일도 일어나지 않아 암호 문구를 요구합니다.

도와 주셔서 감사합니다 .


암호를 입력하지 않고 암호 해독을 의미합니까? 부팅 프로세스에서 그렇게 할 수 있다면 볼륨을 해독하는 데 필요한 키가 부팅 중에 액세스 가능한 시스템에 있어야합니다. 데이터 도난으로부터 어떻게 보호 할 수 있습니까?
James Henstridge

예, 숨겨진 파티션이나 USB 플래시 드라이브에 키를 넣을 것이라고 생각합니다. 가능합니까?
isoman

문제는 부트 로더가 키를 찾을 수 있으면 (암호화되지 않은) 부트 코드를 검사하는 누군가가 키를 찾을 수 있다는 것입니다. 키를 USB 스틱에 저장하면 컴퓨터에서 스틱을 도난 당하지 않았는지 확인하고 싶을 것입니다. 부팅하는 동안 스틱을 꽂을 경우 암호를 입력하는 것보다 편리하지 않습니다.
James Henstridge

답변:


27

방금 새 홈 서버 에서이 과정을 거쳤습니다. 많은 인터넷 검색과 추측이 필요했지만 작동했습니다. 여기서 단계를 재현 해 보겠습니다. Ubuntu Server 11.10을 사용하고 있으며 암호화 된 LVM을 사용하여 거의 표준 설치로 시작 했으므로 여기서 변경 한 내용을 설명하겠습니다.

설정:

  • / dev / sda1은 암호화되지 않은 / boot 파티션입니다
  • / dev / sda5는 루트, 스왑 및 홈을 포함한 모든 것을 포함하는 내 lvm 파티션입니다.
  • / dev / sdc1은 키 파일을 저장할 USB 플래시 드라이브의 파티션입니다.

먼저 홈 디렉토리에 키 파일을 만들었습니다.

dd if=/dev/urandom of=keyfile bs=512 count=4

(더 큰 블록 크기를 사용하거나 더 큰 키를 계산할 수 있습니다)

cryptsetup에 새 키를 알려줍니다 (파일 이름이 아닌 중요한 내용 임).

sudo cryptsetup luksAddKey /dev/sda5 keyfile

그런 다음 USB 플래시 드라이브를 ext2로 포맷하고 레이블을 지정했습니다. 레이블을 사용하여 나중에 레이블로 마운트하고 문제가 발생할 경우 USB 플래시 드라이브를 교체 할 수 있습니다.

sudo mkfs -t ext2 /dev/sdc1
sudo e2label /dev/sdc1 KEYS

(물론 장치가 다릅니다)

이제 키 파일을 루트 모드 400이 소유 한 USB 플래시 드라이브에 복사하십시오.

mkdir KEYS
sudo mount /dev/sdc1 KEYS
sudo cp keyfile KEYS
sudo chown root KEYS/keyfile
sudo chmod 400 KEYS/keyfile

/ etc / crypttab을 수정하십시오. 원래 포함 된

sd5_crypt UUID=(...) none luks

내가 바꿨다

sd5_crypt UUID=(...) /dev/disk/by-label/KEYS:/keyfile luks,keyscript=/lib/cryptsetup/scripts/passdev

마지막으로, initramfs를 업데이트하십시오 :

sudo update-initramfs -uv

이제 USB 플래시 드라이브의 키 파일을 사용하여 부팅됩니다. 휴일에 갈 때 플래시 드라이브를 제거하면 부팅되지 않으며 데이터가 안전하게 보호됩니다.

USB 플래시 드라이브가없는 경우 암호를 요청하는 방법을 아는 사람은 대체로 유용합니다. 이것이 도움이되기를 바랍니다. 추가 또는 수정은 환영 이상입니다!


3
암호 프롬프트를 얻는 방법을 잘 모를 경우 플래시 드라이브의 부팅 가능 파티션을 사용하여 키 파일을 찾고 대체 initramfs를 통해로드 할 수 있습니다. 비밀번호.
Monica Monica 복원-ζ--

1
@ 3pic 몇 달 전에 이렇게 했으므로 100 % 확신 할 수 없습니다. 그러나 우분투는 가상 파일 시스템으로 부팅됩니다. 그것에 스크립트를 keyscript=/lib/cryptsetup/scripts/passdev추가 passdev합니다. 그런 다음 update-initramfs -uv파일 시스템 아카이브를 다시 작성 합니다.
VarunAgw

1
@RandyOrrison 이것은 정말 좋습니다. 작동합니다. 그러나 ... initram을 지나간 후에는 최소 2 분 동안 앉아 있습니다 A start job is running for dev-sda8:-keyfile.device (1min 18s...). 통과하면 모든 것이 마운트되지만 잠시 동안 중단됩니다. 로그에 "장치 dev-sda8 : -sda7keyfile.device 대기 시간이 초과되었습니다. sda7crypt의 암호화 설정에 대한 종속성이 실패했습니다." 물론, 그것은 이미 initram에 의해 마운트되었지만 .... 내가 뭘 잘못하고 있습니까?
deitch

1
어떤 이유로 든 systemd를 좋아하거나 작동하지 않는 것 같습니다. 단순히 keyscript필드 를 무시 합니다.
에티엔 느 브루 인스

1
Ubuntu 17.10+에서, 루트 파일 시스템이 luks 볼륨에 있고 키 파일이있는 경우 update-initramfs 도구는 luks 볼륨을 부팅 할 수있는 initramfs 이미지를 생성하지 않습니다. "none"을 키 파일 값으로두고 옵션을 keyscript = / etc / my-keyscript로 설정하여 작동시킬 수 있습니다. 여기서 / etc / my-keyscript는 키를 인쇄하는 쉘 스크립트입니다.
Macil

6

howtoforge.com의 지침에 따라 자동 암호 해독 볼륨으로 시작했습니다.

방법 : 키 파일을 사용하여 LUKS 암호화 드라이브 자동 잠금 해제

1 단계 : 임의의 키 파일 생성

sudo dd if=/dev/urandom of=/root/keyfile bs=1024 count=4

2 단계 : 키 파일을 루트로 읽기 전용으로 설정

sudo chmod 0400 /root/keyfile

그러면 루트에서만 키 파일을 읽을 수 있습니다. 누군가이 키 파일에 액세스하면 컴퓨터에서 더 큰 문제가 발생합니다.

또는 원하는 키 파일을 root : root로 chown하여 / root 폴더로 이동하십시오.

3 단계 : LUKS에 키 파일 추가

LUKS / dm_crypt 가능 장치는 최대 10 개의 서로 다른 키 파일 / 암호를 보유 할 수 있습니다. 따라서 이미 설정 한 비밀번호를 가지고 옆에이 키 파일을 추가 인증 방법으로 추가합니다.

sudo cryptsetup luksAddKey /dev/sdX /root/keyfile

sdX는 물론 LUKS 장치입니다.

먼저 드라이브의 잠금을 해제하기 위해 (기존) 비밀번호를 입력하라는 메시지가 표시됩니다. 모든 것이 제대로 작동하면 다음과 같은 결과가 나타납니다.

Enter any LUKS passphrase:
key slot 0 unlocked.
Command successful.

4 단계 : 매퍼 만들기

LUKS 장치는 fstab에서 참조 할 수있는 매퍼를 작성해야합니다. / etc / crypttab 열기

sudo nano /etc/crypttab

그런 다음 다음과 같은 줄을 추가하십시오.

sdX_crypt      /dev/sdX  /root/keyfile  luks

또는 장치의 UUID를 사용할 수 있습니다.

sdX_crypt      /dev/disk/by-uuid/247ad289-dbe5-4419-9965-e3cd30f0b080  /root/keyfile  luks

sdX_crypt는 작성중인 맵퍼의 이름입니다. 여기서 "음악"또는 "영화"또는 "sfdsfawe"등의 이름을 사용할 수 있습니다.

ctrl-x를 실행하여 파일을 저장하고 닫은 후 입력하고 입력하십시오. Ctrl-x는 nano를 닫지 만 먼저 파일 [yes = enter]와 이름을 [같은 이름 = enter]로 저장하라는 메시지를 표시합니다.

우리가 실제로 한 일은 드라이브를 잠금 해제하기 위해 비밀번호 입력 대신 / root / keyfile을 사용해야한다는 것입니다.

5 단계 : fstab에 장치 마운트

이제 잠금이 해제 된 장치 (아직 시스템이 부팅 될 때)가 생겼으므로 지금 마운트하면됩니다. / etc / fstab을여십시오 :

sudo nano /etc/fstab

다음과 같은 새 항목을 추가하십시오.

/dev/mapper/sdX_crypt  /media/sdX     ext3    defaults        0       2

4 단계에서 추가 한 올바른 매퍼 이름이 있는지 확인하십시오. 또한 마운트 지점 / 폴더가 존재하는지 확인하십시오. 파일을 추가 한 후 파일을 다시 저장하고 닫으십시오 (ctrl-x, enter, enter).

6 단계 : 재부팅 또는 다시 마운트

그게 다야. 이제 다시 부팅 할 수 있으며 추가 장치를 자동 잠금 해제하고 마운트해야합니다. 모든 장치를 다시 마운트하여 테스트 할 수도 있습니다.

sudo mount -a

1
업데이트를 잊고 initramfs100 % 필요
3pic

6

Randy Orrison의 대답을 향상 시키면 여기에 내가 만든 작은 스크립트가 있습니다.이 스크립트는 키 파일을 찾지 못하면 암호를 묻는 사용자에게 시스템 폴백을 제공합니다.

#!/bin/sh

ask_for_password () {
    cryptkey="Unlocking the disk $cryptsource ($crypttarget)\nEnter passphrase: "
    if [ -x /bin/plymouth ] && plymouth --ping; then
        cryptkeyscript="plymouth ask-for-password --prompt"
        cryptkey=$(printf "$cryptkey")
    else
        cryptkeyscript="/lib/cryptsetup/askpass"
    fi
    $cryptkeyscript "$cryptkey"
}

device=$(echo $1 | cut -d: -f1)
filepath=$(echo $1 | cut -d: -f2)

# Ask for password if device doesn't exist
if [ ! -b $device ]; then
    ask_for_password
    exit
fi

mkdir /tmp/auto_unlocker
mount $device /tmp/auto_unlocker

# Again ask for password if device exist but file doesn't exist
if [ ! -e /tmp/auto_unlocker$filepath ]; then
    ask_for_password
else
    cat /tmp/auto_unlocker$filepath
fi

umount /tmp/auto_unlocker

그것을 저장하고 대신 keyscript=/lib/cryptsetup/scripts/passdev/etc/crypttab이 파일을 실행하려면 경로와 함께 sudo update-initramfs -uv하면 모든 작업이 완료된다.


귀하의 솔루션이 하나 이상의 키 파일에 대한 USB 드라이브에서 작동하지 않는 것 같습니다. 암호화 된 파티션 (홈, 스왑, 루트)이 둘 이상 있으면 의미합니다. cat 명령 후 USB 드라이버를 마운트 해제하지 않는다는 점에 유의하십시오. 그것을 고치는 방법에 대한 아이디어가 있습니까?
Khamidulla 2016 년

이것은 나를 위해 일하고 있지만 (Xubuntu 17.10) grub을 편집하고 "splash"를 제거해야했습니다. 또한 파일을 적절한 위치 (/ lib / cryptsetup / scripts / unlock_custom)에 저장하고 chmod 755로 수정해야합니다. 특정 위치에서 스플래시 또는 복사로 인해 효과가 있었는지 확실하지 않지만 이전에는 작동하지 않았습니다. 어쨌든, 그것은 작동하지만 부팅 후에 Startet AppArmor initialization.는 다음과 같이 나타납니다 : dev-disk keyfile.device (1m 30s)에 대한 시작 작업이 실행 중입니다. 90 년대 X가 시작된 후 시스템을 사용할 수 있습니다 ...이 시작 작업을 고치는 방법을
모릅니다

1

@deitch @Randy Orrison과 같은 설정을했고 동일한 문제가 발생했으며 / etc / crypttab에서 해당 항목을 찾으면 / 파일 시스템을 다시 마운트하려고 시도하는 systemd의 버그입니다.

이 문제를 해결하기 위해 update-initramfs -uv 명령을 실행 한 후 / etc / crypttab에서 sda5_crypt에 대한 항목을 제거했습니다.

재부트하면 모든 것이 제대로 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.