回答:
これを行う最良の方法の1つは、暗号化キーを搭載したスマートカードを使用して、暗号化されたブロックデバイスのキーのロックを解除することです。パスフレーズ(ツールでは「PIN」と呼ばれますが、実際にはパスフレーズです)を1回入力するだけで、その後キャッシュされます。これには、暗号化されたデータを、持っているもの(秘密鍵を抽出できないスマートカード自体)と知っているもの(パスフレーズ)で保護するという利点があります。
次の/etc/crypttab
ようにフォーマットします。
mapper-name /dev/disk/raw-device /var/lib/filename-containing-encrypted-key \
luks,keyscript=/lib/cryptsetup/scripts/decrypt_opensc
Debianおよび派生物では、initramfs-toolsはキースクリプトに気付き、スマートカードにアクセスするために必要なすべてのツールとデーモンをinitramfsに自動的にコピーします。
スマートカードのセットアップとキーの作成(および暗号化)に関する情報は、にあります/usr/share/doc/cryptsetup/README.opensc.gz
。
この目的のために、Yubibike 4またはYubikey NEOを使用できます。
実装に関する注意事項:この機能には荒いエッジがあり、明らかにそのままでは機能しないのでYMMV 最後に成功したとき、次のハックを追加する必要がありました。
systemd
暗号化されたデバイスをセットアップするプロセス全体を壊滅的に引き継ごうとしますが、大きなFAILにつながる/etc/crypttab
ものについては何も知らないため、無効にしkeyscript
ます。幸いなことに、Debianでは、まだオプトアウトできますsystemd
。/etc/initramfs-tools/hooks/yubipin
ビルトイン機能では、initramfsからYubikeyを使用できるようにするための十分なサポートがインストールされていなかったため、この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
3番目のフィールドは、none
ルートファイルシステム用のキーファイルですが/etc/crypt-data.key
、データファイルシステム用です。/etc/crypt-data.key
luksパスワードが含まれています:
Tm90IHJlYWxseSBteSBwYXNzd29yZC4K
改行または他の空白がパスワードの一部として使用されることに注意してください!末尾の改行なしでこのファイルを生成するように注意してください。また、厳密な権限があることを確認してください。
-rw------- 1 root root 59 Sep 14 23:57 /etc/crypt-data.key
複数のボリュームに対してこのアプローチを複製できる必要があります(個別のパスワードまたは1つの共有パスワードを選択)。
/etc/crypttab
です。それを明確にするために、少し余分なテキストを追加しました。