답변:
이를 수행하는 가장 좋은 방법 중 하나는 암호화 키가있는 스마트 카드를 사용하여 암호화 된 블록 장치의 키를 잠금 해제하는 것입니다. 비밀번호 문구 (도구에서 "PIN"이라고 함)를 한 번만 입력하면 캐시됩니다. 이것은 사용자가 가지고있는 것 (개인 키를 추출 할 수없는 스마트 카드 자체)과 알 수있는 것 (암호)으로 암호화 된 데이터를 보호하는 이점이 있습니다.
다음 /etc/crypttab
과 같이 형식을 지정하십시오 .
mapper-name /dev/disk/raw-device /var/lib/filename-containing-encrypted-key \
luks,keyscript=/lib/cryptsetup/scripts/decrypt_opensc
데비안과 파생어에서 initramfs-tools는 키 스크립트를 인식하고 스마트 카드에 자동으로 액세스하는 데 필요한 모든 도구와 데몬을 자동으로 복사합니다.
스마트 카드 설정 및 키 생성 (및 암호화)에 대한 정보는에서 찾을 수 있습니다 /usr/share/doc/cryptsetup/README.opensc.gz
.
이 목적 으로 Yubikey 4 또는 Yubikey NEO 를 다른 용도로 사용할 수 있습니다 .
구현 노트 :이 기능은 가장자리가 거칠고 YMMV와 같이 즉시 작동하지 않습니다. 마지막으로 성공했을 때 다음 해킹을 추가해야했습니다.
systemd
암호화 된 장치를 설정하는 전체 프로세스를 비참하게 시도하기 때문에 비활성화 /etc/crypttab
하지만 keyscript
큰 실패로 이어지는 것은 무엇인지 알 수 없습니다 . 운 좋게도 데비안에서는 여전히을 선택 해제 할 수 있습니다 systemd
./etc/initramfs-tools/hooks/yubipin
내장 기능이 Yubikey를 initramfs에서 사용할 수 있도록 충분한 지원을 설치하지 않았으므로이 Fixer -Upper 스크립트를 설치하십시오. 이것을 조정해야 할 수도 있습니다.
#!/bin/sh
PREREQ=cryptroot
prereqs()
{
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
# /scripts/local-top/cryptopensc calls pcscd with the wrong path
ln -s ../usr/sbin/pcscd ${DESTDIR}/sbin/pcscd
mkdir -p "${DESTDIR}/usr/lib/x86_64-linux-gnu"
# opensc-tool wants this dynamically, copy_exec doesn't know that
cp -pL /usr/lib/x86_64-linux-gnu/libpcsclite.so.1 "${DESTDIR}/usr/lib/x86_64-linux-gnu/libpcsclite.so.1"
mkdir -p "${DESTDIR}/lib/x86_64-linux-gnu"
# without this, pcscd aborts with a pthread_cancel error
cp -pL /lib/x86_64-linux-gnu/libgcc_s.so.1 "${DESTDIR}/lib/x86_64-linux-gnu/libgcc_s.so.1"
# this gets copied as a dangling symlink, fix it
rm "${DESTDIR}/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist"
cp -pL /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist "${DESTDIR}/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist"
# pcscd needs this to open the reader once it has found it
cp -pL /lib/x86_64-linux-gnu/libusb-1.0.so.0 "${DESTDIR}/lib/x86_64-linux-gnu/libusb-1.0.so.0"
/etc/initramfs-tools/scripts/local-bottom/killpcscd
정리할 다른 스크립트를 설치하십시오 .
#!/bin/sh
set -e
PREREQ=cryptopensc
prereqs()
{
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
# because cryptopensc does not do it properly
killall pcscd
luks 비밀번호를 파일에 간단히 저장할 수 있습니다.
나는 이것을 가정용 컴퓨터에서 사용한다. 루트 파일 시스템은 부팅시 암호 문구로 잠금 해제하는 일반 luks 볼륨에 있습니다. 추가 드라이브에는 생성 된 비밀번호가있는 luks 볼륨이 있습니다.
이 추가 볼륨은 암호화 된 루트 파일 시스템에있는 비밀번호 파일에 의해 잠금 해제됩니다. 루트 파일 시스템이 잠금 해제 된 경우 부팅 중에 자동으로 잠금 해제됩니다.
내 /etc/crypttab
모습은 다음과 같습니다.
crypt-root UUID=c5a2cf25-0aae-457e-874f-fca7ea3d5742 none luks
crypt-data UUID=96d79323-246d-49e0-9149-ec3a4cfc1c1e /etc/crypt-data.key luks
세 번째 필드는 none
루트 파일 시스템 의 키 파일이지만 /etc/crypt-data.key
데이터 파일 시스템 의 키 파일입니다. /etc/crypt-data.key
luks 비밀번호를 포함합니다.
Tm90IHJlYWxseSBteSBwYXNzd29yZC4K
줄 바꿈 또는 기타 공백은 암호의 일부로 사용됩니다! 줄 바꿈없이이 파일을 생성하도록주의하십시오. 또한 엄격한 권한이 있는지 확인하십시오.
-rw------- 1 root root 59 Sep 14 23:57 /etc/crypt-data.key
여러 볼륨에 대해이 접근 방식을 복제 할 수 있어야합니다 (별개의 비밀번호 또는 하나의 공유 비밀번호를 사용하여 선택).
/etc/crypttab
. 더 명확하게하기 위해 약간의 텍스트를 추가했습니다.