LUKS は Linux のディスク暗号化です。
初めて LUKS でパーティションを暗号化するとき (または OS インストール中にディスクの暗号化オプションを選択するとき)、LUKS パーティションを開くときに使用されるパスワードを指定する必要があります。
ただし、その後は、システムを再起動するまで、パスワードを入力する必要なく、何度でもパーティションをマウントおよびアンマウントできます。
次の 2 つのシナリオを想像してください:
このチュートリアルでは、LUKS キー管理について知っておく必要があるすべてのことについて説明します。
1. 8 つの LUKS キー スロット
LUKS では、単一の暗号化されたパーティションに対して、8 つの異なるキーを持つことができます。
8 つの異なるキーのいずれかを使用して、暗号化されたパーティションを開くことができます。
1 つのパーティションにキーを 1 つだけ持つことも、8 つの異なるキーすべてを割り当てることもできます。
これらのキーは、パーティションの LUKS キー スロットに格納されます。したがって、パーティションには 8 つのキー スロットがあります。
すべてのキー スロットを表示するには、以下に示すように cryptsetup luksDump を使用します。この例では、2 つのスロットのみを使用しています。
# cryptsetup luksDump /dev/sdb1 | grep Slot 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
上記では:
- /dev/sdb1 は LUKS で暗号化されたパーティションです。
- キー スロット番号は 0 から始まります。8 つのスロットがあるため、キー スロット番号は 0 から 7 までです。
- ENABLED は、この特定のスロットにキーが割り当てられていることを示します
- ここには LUKS キーを持つ 2 つのスロットがあります。したがって、/dev/sdb1 LUKS 暗号化パーティションには 2 つのキーが割り当てられます。
2.新しい LUKS キーを追加
新しい LUKS パスフレーズ (LUKS キー) を /dev/sdb1 LUKS 暗号化パーティションに追加するには、以下に示すように cryptsetup luksAddKey コマンドを使用します。
# cryptsetup luksAddKey /dev/sdb1 Enter any passphrase: Enter new passphrase for key slot: Verify passphrase:
上記では:
- 「任意のパスフレーズを入力してください:」と表示されたら、/dev/sdb1 の既存のパスワードのいずれかを入力する必要があります。上で見たように、これにはすでにスロット 0 とスロット 1 からの 2 つのパスワードがあります。最初にこれらのパスワードのいずれかを入力する必要があります。
- 既存のパスワードを入力したら、新しい LUKS キーを割り当てることができます。
新しい LUKS キーを追加すると、次の利用可能なスロットに追加されます。すでに 2 つの既存のキーがあるため、新しいキーは、次に使用可能なスロットであるスロット #2 に追加されました。
したがって、Slot#0 から 2 は「ENABLED」と表示されます。 /dev/sdba1 には 3 つの LUKS キーがあります。
# cryptsetup luksDump /dev/sdb1 | grep Slot Key Slot 0: ENABLED Key Slot 1: ENABLED Key Slot 2: ENABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
3.新しい LUKS キーを特定のスロットに追加
LUKS が新しいキーを次に利用可能なスロットに追加する代わりに、新しいキーを特定のスロットに追加することもできます。
これには、以下に示すように、cryptsetup luksAddKey で -S オプションを使用します。
この例では、新しい LUKS キーを Slot#5 に追加しています。新しいパスフレーズを次のように割り当てました:PasswordforSlot5
# cryptsetup luksAddKey /dev/sdb1 -S 5
以下に示すように、スロット #5 は「ENABLED」と表示されていますが、スロット #3 と #4 はまだ DISABLED 状態です。
# cryptsetup luksDump /dev/sdb1 | grep Slot Key Slot 0: ENABLED Key Slot 1: ENABLED Key Slot 2: ENABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: ENABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
この段階で、4 つの LUKS キーが /dev/sdb1 暗号化パーティションに割り当てられています。
4.既存の LUKS キーを削除
LUKS パーティションから既存のキーを削除するには、以下に示すように cryptsetup luksRemoveKey を使用します。
この例では、消去したいパスワード (キー) を入力するだけです。
LUKS キーをスロットから削除/消去/削除します。スロット番号を指定する必要はありません。代わりに、削除するキーを指定してください!
この例では、「削除する LUKS パスフレーズを入力してください:」というプロンプトが表示されたら、前の例で作成したキーを入力しました:PasswordforSlot5
# cryptsetup luksRemoveKey /dev/sdb1 Enter LUKS passphrase to be deleted:
次の luksDump の出力からわかるように、Slot#5 のキーは消去されています。
# cryptsetup luksDump /dev/sdb1 | grep Slot Key Slot 0: ENABLED Key Slot 1: ENABLED Key Slot 2: ENABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
5. luksKillSlot を使用して LUKS キーを削除します
特定のスロットのキーを持っていないが、単に削除したい場合は、以下に示すように cryptsetup luksKillSlot コマンドを使用して削除できます。
この例では、LUKS スロット #2 からキーを削除しています。
このためには、いずれかのスロットの LUKS キーを入力する必要があります。これは、スロット #2 からキーを削除する前の検証のみです。
# cryptsetup luksKillSlot /dev/sdb1 2 Enter any remaining LUKS passphrase:
次の luksDump の出力からわかるように、Slot#2 のキーは消去されています。
# cryptsetup luksDump /dev/sdb1 | grep Slot 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
6.ファイルから新しい LUKS キーを追加
以下に示すように、既に持っているキーファイルに基づいて新しい LUKS キーを追加することもできます。
# cryptsetup luksAddKey /dev/sdb1 masterkeyfile Enter any passphrase:
上記では:
- masterkeyfile には、追加する新しい LUKS キーが含まれています。これはバイナリ ファイルである必要があります。
- 「任意のパスフレーズを入力してください:」というプロンプトが表示されたら、/dev/sdb1 パーティションの既存の LUKS キーのいずれかを入力します。
- 上記のように、masterkeyfile から取得したため、新しい LUKS キーを求めるプロンプトは表示されませんでした。
次の luksDump 出力からわかるように、masterkeyfile からのこの新しいキーはスロット #2 に追加されます
# cryptsetup luksDump /dev/sdb1 | grep Slot Key Slot 0: ENABLED Key Slot 1: ENABLED Key Slot 2: ENABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
7.忘れた LUKS キーをリセット – 既存のキーを取得
サーバーを再起動し、暗号化された LUKS パーティションをマウントできない場合は、LUKS パスワードを忘れてしまったので、運が悪く、リセットできます。
ただし、暗号化された LUKS パーティションが既に開いていて、システムを再起動しておらず、すでにマウントされているパーティションの LUKS パスワードを忘れた場合 (少なくとも、最後の再起動以降に LUKS を 1 回開いたことがある場合)、次のことができます。新しい LUKS キーを割り当てます。
この「LUKS パスワードを忘れた」シナリオでは、次の 2 つの手順を実行できます。
<オール>この例では、LUKS で暗号化されたパーティションである /home1 パーティションがマウントされていますが、このためのパスワードがありません。
# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 127G 44G 76G 37% / /dev/mapper/home1 93G 188M 88G 1% /home1
ボリューム名は、上記の df コマンド出力の 1 列目の「/dev/mapper/」の後にあるものです。したがって、この例では、ボリューム名は「home1」です。
次の dmsetup table –showkeys は、システムにマウントされているすべてのパーティションの暗号化されたキーを表示します。
# dmsetup table --showkeys home1: 0 197259264 crypt aes-cbc-essiv:sha256 607f482870c795a9b1e307ffbfc6643eaa219e9ef8c6773de02cd298c8fcda3c 0 8:17 4096
「aes-cbc-essiv:sha256」の後のフィールドは、暗号化されたパスワードです。暗号化された LUKS キーを取得し、ファイルに保存します。
# vi existinglukskey.txt 607f482870c795a9b1e307ffbfc6643eaa219e9ef8c6773de02cd298c8fcda3c
8.忘れたLUKSキーをリセット – バイナリキーファイルを作成
ここで、この既存のキーをテキスト ファイルからバイナリ ファイルに変換する必要があります。以下に示すように xxd コマンドを使用します。
# xxd -r -p existinglukskey.txt existinglukskey.bin
上記では:
- -r オプションはリバース用です。これにより、hexdump がバイナリに変換されます。
- -p オプションは追記用です。これは、Postscript 連続 hexdump スタイルを示します。
- 既存の lukskey.txt 入力ファイル
- 既存の lukskey.bin 出力ファイル。これにより、既存の暗号化された LUKS パスワードがバイナリ ファイルに含まれるようになります。
9.忘れた LUKS キーをリセット – 新しいキーを追加
最後に、バイナリ ファイルに抽出した既存の LUKS キーを使用して、新しい LUKS キーを追加します。
# cryptsetup luksAddKey /dev/sdb1 --master-key-file <(cat existinglukskey.bin) Enter new passphrase for key slot: Verify passphrase:
上記では:
- –master-key-file ここでバイナリ ファイルを指定します。既存の lukskey.txt は使用しないでください。代わりに、上で作成した既存の lukskey.bin を使用してください。
- 上記のように、luksAddKey は既存の LUKS パスワードを要求しませんでした。バイナリ ファイルから取得したからです。
- 「Enter new passphrase for key slot:」というプロンプトが表示されたら、新しい LUKS パスワードを入力します。ただし、今回はこれを忘れないでください。
繰り返しますが、これを覚えておいてください:システムを再起動した後に LUKS パスワードを忘れた場合、リセットできないため、Luks を使用できなくなります。
10. LUKS マスターキーのダンプ
MasterKey をダンプして、安全な場所に保管することもできます。以下に示すように、luksDump とともに –dump-master-key オプションを使用します。
# cryptsetup luksDump --dump-master-key /dev/sdb1 Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: LUKS header information for /dev/sdb1 Cipher name: aes Cipher mode: cbc-essiv:sha256 Payload offset: 4096 UUID: 146d639a-757c-4bcb-aee6-8fe815345104 MK bits: 256 MK dump: 60 7f 48 28 70 c7 95 a9 b1 e3 07 ff bf c6 64 3e aa 21 9e 9e f8 c6 77 3d e0 2c d2 98 c8 fc da 3c
LUKS ヘッダー ダンプは安全な場所に保管する必要があることに注意してください。マスター キー ダンプを使用して、誰かが LUKS で暗号化されたパーティションにアクセスできます。