次回システムを再起動したときに、LUKSで暗号化されたルートファイルパーティションとスワップパーティションを復号化する非インタラクティブな方法を探しています。これに加えて、再起動後にパスワードを元に戻す方法が必要です。これにより、再起動後に再度パスワード(または新しいパスワード)が必要になります。
システムはLVMを使用します。
システムでパスワードを入力したり、別のシステムを使用してロックを解除したりする必要はありません。一度だけロックを解除する必要があります。
暗号化されたパスワードを持っているので、ハードドライブに平文で保存してください。私はこの段階でセキュリティに関心がありません。
カスタムpreseedおよびキックスタートファイルを使用したUbuntuサーバーインストールに基づくUbuntuをデプロイするためのフローがあり、キックスタートは最初の再起動(および最初の再起動のみ)後に実行されるサービスをインストールしてから再起動します。このフローでLUKSディスク暗号化を実装しようとしていますが、非対話のままにする必要があるため、パスワードなしで初めて再起動できるようにする必要があります。
インストール中に設定されるパスワードは一時的なものであり、最初の再起動後に実行されるサービスによって変更されるため、最初のパスワードはクリアテキストで保存できます。
私はかなりのグーグルを使ってこれを試してみましたが、ほとんどのことはinitramfsファイルを交換するソリューションに向けられています。
これを使用してシステムをリモートでロック解除する方法を説明する複数のリソースを見つけましたが、対話なしでそれを行う必要があります。そのようなリソースの1つを次に示します。 https://hamy.io/post/0005/remote-unlocking-of-luks-encrypted-root-in-ubuntu-debian/
私が見つけたソリューションに最も近いものは、おそらくVPSソリューションに必要なものを達成する方法であるこのリソースですが、説明のない単なるコマンドの束であり、どのように適応: https://dradisframework.com/pro/support/guides/customization/auto-unlock-luks-encrypted-drive.html
ArchLinuxのこのリソースも見つけました https://wiki.archlinux.org/index.php/Dm-crypt/System_configuration#cryptkey 、カーネルパラメーターを追加しようとしましたが、運が良ければどちらか。 LUKSがこれらのカーネルパラメーターをサポートしていないためかどうかはわかりません。
解決策はかなり単純なようで、 パーティションを自動復号化するようにLVMとLUKSを設定する方法?
私の/ bootパーティションは/ dev/sda1
解読したいLVMボリュームは/ dev/sda3
私はrootでしたが、すべてのコマンドにSudoを追加していない場合。
パスワード付きのキーファイルを作成することから始めます(擬似乱数を生成します)
dd if=/dev/urandom of=/boot/keyfile bs=1024 count=4
次に、rootに読み取り許可を設定し、他の人には何も設定しません
chmod 0400 /boot/keyfile
次に、キーファイルをロック解除キーとして追加します
cryptsetup -v luksAddKey /dev/sda3 /boot/keyfile
(暗号化パスワードを入力するように求められます)
/ bootパーティションのuuidを見つけます(これはルートである必要はありません)
ls -l /dev/disk/by-uuid/
これがどのように見えるかの例です(別のマシンからこれを取得したため、実際の出力ではありません)
test@test:~$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Jan 15 03:36 025c66a2-c683-42c5-b17c-322c2188fe3f -> ../../sda2
lrwxrwxrwx 1 root root 10 Jan 15 03:36 9e7a7336-3b81-4bbe-9f1a-d43415df1ccb -> ../../sda1
次に、お気に入りのエディターで/ etc/crypttabを編集します
nano /etc/crypttab
コンテンツは次のようになります(これも別のマシンのものです)
sda3_crypt UUID=025c66a2-c683-42c5-b17c-322c2188fe3f none luks,discard
やりたいことは、noneを/ dev/disk/by-uuid/[/ bootパーティションのuuid]に置き換えますかおよびdiscardをkeyscript =/lib/cryptsetup/scripts/passdevに置き換えたい
結果は次のようになります
sda3_crypt UUID=025c66a2-c683-42c5-b17c-322c2188fe3f /dev/disk/by-uuid/9e7a7336-3b81-4bbe-9f1a-d43415df1ccb luks,keyscript=/lib/cryptsetup/scripts/passdev
ファイルを保存し、initramfsの更新に進みます
update-initramfs -u
これで、再起動できます。
reboot
もう一度削除するには(必要に応じて)
最初に、システムへのキーが2つしかないことを確認します(元のキーファイルと新しいキーファイル)
cryptsetup luksDump /dev/sda3 | grep BLED
これは次のような出力を生成します
Key Slot 0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
キースロット1のキー(キーファイル)を削除するには
cryptsetup luksKillSlot /dev/sda3 1
次に、暗号化パスワード(キーファイル内のパスワードではなく、元のパスワード)を入力するように求められます
次に、実際のキーファイルを削除します
rm /boot/keyfile
Initramfsを再度更新します
update-initramfs -u
これで、再起動するとパスワードの再入力が求められます。できました。
reboot