GNU/Linux >> Linux の 問題 >  >> Linux

10 Linux cryptsetup LUKS キー管理の例 (LUKS 暗号化キーを追加、削除、変更、リセットする方法)

LUKS は Linux のディスク暗号化です。

初めて LUKS でパーティションを暗号化するとき (または OS インストール中にディスクの暗号化オプションを選択するとき)、LUKS パーティションを開くときに使用されるパスワードを指定する必要があります。

ただし、その後は、システムを再起動するまで、パスワードを入力する必要なく、何度でもパーティションをマウントおよびアンマウントできます。

次の 2 つのシナリオを想像してください:

<オール>
  • LUKS パスワードを忘れました。または、LUKS 暗号化を使用してマウントされたパーティションを持つ誰かからシステムを継承しました。このための LUKS パスワードがありません。システムを再起動すると、LUKS キーがないため、問題が発生します。
  • セキュリティ コンプライアンスの目的で、LUKS 暗号化パスワードを頻繁に変更する必要があります。この場合、マウントされたパーティションを中断せずに LUKS キーをローテーションする必要があります。
  • このチュートリアルでは、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 パーティションから現在の暗号化キーを抽出します
  • 上記で抽出した暗号化キーを使用して、新しい LUKS キーを作成します
  • この例では、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 で暗号化されたパーティションにアクセスできます。


    Linux
    1. Linuxでグループにユーザーを追加またはグループから削除する方法

    2. Linuxでシェルを変更する方法

    3. 7 Linux chkconfig コマンドの例 – サービスの追加、削除、表示、変更

    1. Linux スレッド同期に C Mutex ロックの例を使用する方法

    2. 5 Linux Touch コマンドの例 (ファイルのタイムスタンプを変更する方法)

    3. Linux で ip コマンドの例を使用して複数のルートを追加する方法

    1. Linuxでユーザーパスワードを変更、削除、または無効にする方法

    2. Linux でのパッケージ管理のための 15 の aptitude コマンドの例

    3. Linux で「パスワードなし」の ssh ログイン用に SSH キーをセットアップする方法