Debian ベースのディストリビューション:
Debian と Ubuntu には、パスワード キャッシュ スクリプト decrypt_keyctl が付属しています。 cryptsetup を使用 パッケージ。
decrypt_keyctl スクリプトは、複数の暗号化された LUKS ターゲットに同じパスワードを提供するため、何度も入力する手間が省けます。 crypttab で有効にできます keyscript=decrypt_keyctl
で オプション。 keyfile フィールドに同じ識別子を持つターゲットには、同じパスワードが使用されます。 .起動時に各識別子のパスワードが 1 回要求されます。
例 crypttab :
<target> <source> <keyfile> <options>
part1_crypt /dev/disk/... crypt_disks luks,keyscript=decrypt_keyctl
part2_crypt /dev/disk/... crypt_disks luks,keyscript=decrypt_keyctl
decrypt_keyctl
スクリプトは keyutils
に依存します パッケージ (推奨されるだけであり、必ずしもインストールされるとは限りません)。
cryptab を更新した後 変更を適用するには、initramfs も更新する必要があります。 update-initramfs -u
を使用 .
decrypt_keyctl の完全な readme は /usr/share/doc/cryptsetup/README.keyctl
にあります
残念ながら、これは現在、バグにより、systemd init を使用する Debian システムでは機能しません。 (他の init システムは影響を受けないはずです)。このバグにより、systemd からパスワードの入力を 2 回求められ、ssh 経由でリモートでロックを解除できなくなります。 Debian crypttab man ページ 回避策として initramfs
を使用することをお勧めします ブートの initramfs 段階で処理を強制するオプション。このバグを回避するには、Debian の /etc/crypttab の例
<target> <source> <keyfile> <options>
part1_crypt /dev/disk/... crypt_disks luks,initramfs,keyscript=decrypt_keyctl
part2_crypt /dev/disk/... crypt_disks luks,initramfs,keyscript=decrypt_keyctl
decrypt_keyctl を提供しないディストリビューション スクリプト:
decrypt_keyctrl の場合 ディストリビューションで提供されていない場合、暗号化されたルート ファイル システムのキーファイルを使用してデバイスのロックを解除できます。これは、他の暗号化されたデバイスよりも先に、ルート ファイル システムのロックを解除してマウントできる場合です。
LUKS は複数のキースロットをサポートしています。これにより、キー ファイルが利用できない場合や紛失した場合に、パスワードを使用してデバイスのロックを解除することができます。
<オール>ランダム データを使用してキーを生成し、そのアクセス許可を所有者読み取り専用に設定して、漏洩を回避します。キー ファイルは、最初にロック解除されるルート パーティションにある必要があることに注意してください。
dd if=/dev/urandom of=<path to key file> bs=1024 count=1
chmod u=rw,g=,o= <path to key file>
キーを LUKS デバイスに追加します
cryptsetup luksAddKey <path to encrypted device> <path to key file>
crypttab を構成する キーファイルを使用します。デバイスは crypttab にリストされているのと同じ順序でロック解除されるため、最初の行はルート デバイスである必要があります。 .鍵ファイルには絶対パスを使用してください。
<target> <source> <keyfile> <options>
root_crypt /dev/disk/... none luks
part1_crypt /dev/disk/... <path to key file> luks
別のオプションは、 /lib/cryptsetup/scripts/decrypt_derived
を使用することです これは、Debian/Ubuntu の cryptsetup の一部でもあります。
キーをキャッシュする代わりに、1 つのディスクのボリューム キーを 2 番目のディスクの追加パスワードとして使用します。これには、2 番目 (および 3 番目など) の暗号化されたディスクに 2 番目のパスワードを追加する必要がありますが、LUKS はそれをサポートしています。したがって、このソリューションは、複数の暗号化されたディスクが同じパスワードを使用していない場合にも機能します。
sda6crypt から sda5 にキーを追加する例:
sda5 の追加パスワードとして sda6crypt のボリューム キーを追加:
mkfifo fifo
/lib/cryptsetup/scripts/decrypt_derived sda6crypt > fifo &
cryptsetup luksAddKey /dev/sda5 fifo
rm fifo
/etc/crypttab
で sda5crypt が自動的にロック解除されるように設定します
ls -la /dev/disk/by-uuid/ | grep sda5
echo "sda5crypt UUID=<uuid> sda6crypt luks,initramfs,keyscript=/lib/cryptsetup/scripts/decrypt_derived" >> /etc/crypttab
これは名前付きパイプ (fifo
) を使用してキーを渡し、ボリューム キーをディスク上の一時ファイルに保存する必要がないようにします。
keyscript
オプションは crypttab
の場合のみ機能します は Debian のオリジナルの cryptsetup ツールによって処理されますが、systemd の再実装では現在サポートされていません。システムが systemd (ほとんどのシステム) を使用している場合、initramfs
が必要です。 systemd が起動する前に、cryptsetup ツールによって initrd で強制的に処理を行うオプション。
https://unix.stackexchange.com/a/32551/50793 に基づく
@sebasth が上記で参照したバグを考慮して、debian での回避策を次に示します。
私のセットアップは少し異なります。暗号化されたルート パーティションと多数の RAID ディスクがあります。私にとっては、initramfs オプションを crypttab に追加する必要がありました:
<target> <source> <keyfile> <options>
part1_crypt /dev/disk/... crypt_disks plain,cipher=aes-xts-plain64,keyscript=decrypt_keyctl,initramfs
part2_crypt /dev/disk/... crypt_disks plain,cipher=aes-xts-plain64,keyscript=decrypt_keyctl,initramfs
これは update-initramfs に、これらの crypttab エントリを initramfs にマウントしたいことを伝えます。実行して crypttab を確認しました
cryptdisks_start part1_crypt
cryptdisks_start part2_crypt
私の RAID ディスクはプレーンな dm-crypt であることに注意してください。これは、systemd キースクリプトのバグを回避する luks キーファイル メソッドを使用できないことを意味していました。プレーン dm-crypt の場合、パスフレーズをプレーンテキストで保存する必要があります。
update-initramfs
より前に、keyutils パッケージをインストールし、暗号化されたディスクをマウントする必要があります。 実行されます。そうしないと、エラーがスローされます。 initramfs をビルドするときに、次の行を探す必要がありました:
update-initramfs -u -v | grep 'keyctl'
次の 2 つのファイルが表示されました:
/bin/keyctl
cryptkeyctl
initramfs に追加されています。
最後に、上記のバグに対処するために、systemd による crypttab の処理を無効にする必要がありました。systemd は crypttab の keyscript オプションをサポートしていません。このために、カーネルオプションを追加しました
GRUB_CMDLINE_LINUX_DEFAULT="quiet luks.crypttab=no"
/etc/default/grub に移動して update-grub
を実行しました . systemd は crypttab を無視するようになり、すべての暗号化されたパーティションが initramfs に読み込まれます。
暗号化されたルート パーティションがあるため、cryptroot はキーをキャッシュしていないようです。つまり、パスワードを 2 回入力する必要があります。 1 つはルート パーティション用、もう 1 つは RAID アレイ用です。