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

単一のパスフレーズを使用して、起動時に複数の暗号化ディスクのロックを解除する

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 アレイ用です。


    Linux
    1. Sedコマンドで一度に複数のパターンを使用する

    2. Linux – USBスティックの最初のパーティションの前にスペースをLuksキーとして使用しますか?

    3. 暗号化された Kali インストールを Nuke する方法

    1. ブート パーティションのサイズ変更

    2. 単一のファイルを複数の場所にscpします

    3. 複数のマシンで同じ SSH 秘密鍵を使用する

    1. Linuxで暗号化されたファイルボルトを作成する

    2. 公開鍵と秘密鍵のペアを使用したパスワードなしのSSH

    3. fsck を使用して LUKS 暗号化ディスクをチェックおよび修復しますか?