10.9. PKCS #11 ピンを使用して LUKS 暗号化ボリュームのロック解除を設定する
PKCS #11 と互換性のあるデバイス (スマートカードまたはハードウェアセキュリティーモジュール (HSM)) を使用して、LUKS で暗号化されたボリュームのロック解除を設定できます。
Clevis PKCS #11 ピンを使用して暗号化されたボリュームを自動的にロック解除するには、/etc/crypttab
ファイルの変更も必要です。この変更により、コンソールでユーザーにプロンプトを表示する代わりに、AF_UNIX
ソケットを使用して、ボリュームのロックを解除するためのキーフレーズを待機するように systemd
マネージャーを設定します。
Clevis PKCS #11 のユニットファイルは、ディスクのロック解除に関する情報を送受信するためのソケットを /run/systemd/clevis-pkcs11.sock
ファイル内に設定します。Clevis PKCS #11 ピンによってロック解除されるディスクの場合は、ソケットファイルをキーファイルとして設定する必要があります。
前提条件
- PKCS #11 デバイスがすでに設定されており、アクセス可能である。
-
clevis-pin-pkcs11
パッケージがインストールされている。 -
clevis luks bind
コマンド用に、LUKS パスワードの空きスロットが少なくとも 1 つある。
手順
PBD 用 LUKS 暗号化ボリュームを特定します。次の例では、ブロックデバイスは /dev/sda2 と呼ばれています。
lsblk
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 12G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 11G 0 part └─luks-40e20552-2ade-4954-9d56-565aa7994fb6 253:0 0 11G 0 crypt ├─rhel-root 253:0 0 9.8G 0 lvm / └─rhel-swap 253:1 0 1.2G 0 lvm [SWAP]
Copy to Clipboard Copied! ボリュームのロック解除に使用する PKCS #11 デバイスの URI を特定します。次に例を示します。
pkcs11-tool -L | grep uri
$ pkcs11-tool -L | grep uri uri : pkcs11:model=PKCS%2315%20emulated;manufacturer=piv_II;serial=42facd1f749ece7f;token=clevis uri : pkcs11:model=PKCS%2315%20emulated;manufacturer=OpenPGP%20project;serial=000f06080f4f;token=OpenPGP%20card%20%28User%20PIN%29
Copy to Clipboard Copied! clevis luks bind
コマンドを使用してボリュームを PKCS #11 デバイスにバインドします。次に例を示します。clevis luks bind -d /dev/sda2 pkcs11 '{"uri":"pkcs11:model=PKCS%2315%20emulated;manufacturer=OpenPGP%20project;serial=000f06080f4f;token=OpenPGP%20card%20%28User%20PIN%29;id=%03;object=Authentication%20key;type=public"}'
# clevis luks bind -d /dev/sda2 pkcs11 '{"uri":"pkcs11:model=PKCS%2315%20emulated;manufacturer=OpenPGP%20project;serial=000f06080f4f;token=OpenPGP%20card%20%28User%20PIN%29;id=%03;object=Authentication%20key;type=public"}' … Do you wish to initialize /dev/sda2? [yn] y Enter existing LUKS password:
Copy to Clipboard Copied! このコマンドは、次の手順を実行します。
- LUKS マスター鍵と同じエントロピーを使用して、新しい鍵を作成します。
- Clevis で新しい鍵を暗号化します。
- LUKS2 ヘッダートークンに Clevis JWE オブジェクトを保存するか、デフォルト以外の LUKS1 ヘッダーが使用されている場合は LUKSMeta を使用します。
- LUKS を使用する新しい鍵を有効にします。
オプション: 使用するモジュールを指定する必要がある場合は、module-path URI パラメーターを追加します。
clevis luks bind -d /dev/sda2 pkcs11 '{"uri":"pkcs11:module-path=/usr/lib64/libykcs11.so.2";model=PKCS%2315%20emulated;manufacturer=OpenPGP%20project;serial=000f06080f4f;token=OpenPGP%20card%20%28User%20PIN%29;id=%03;object=Authentication%20key;type=public}'
# clevis luks bind -d /dev/sda2 pkcs11 '{"uri":"pkcs11:module-path=/usr/lib64/libykcs11.so.2";model=PKCS%2315%20emulated;manufacturer=OpenPGP%20project;serial=000f06080f4f;token=OpenPGP%20card%20%28User%20PIN%29;id=%03;object=Authentication%20key;type=public}'
Copy to Clipboard Copied! clevis-luks-pkcs11-askpass.socket
ユニットを有効にします。systemctl enable --now clevis-luks-pkcs11-askpass.socket
# systemctl enable --now clevis-luks-pkcs11-askpass.socket
Copy to Clipboard Copied! テキストエディターで
/etc/crypttab
ファイルを開き、PKCS #11 ピンでロックを解除する LUKS 暗号化ボリュームを含む行を特定します。次に例を示します。luks-6e38d5e1-7f83-43cc-819a-7416bcbf9f84 UUID=6e38d5e1-7f83-43cc-819a-7416bcbf9f84 - -
luks-6e38d5e1-7f83-43cc-819a-7416bcbf9f84 UUID=6e38d5e1-7f83-43cc-819a-7416bcbf9f84 - -
Copy to Clipboard Copied! ダッシュを
/run/systemd/clevis-pkcs11.sock
ファイルパスとkeyfile-timeout
オプションに置き換えます。luks-6e38d5e1-7f83-43cc-819a-7416bcbf9f84 UUID=6e38d5e1-7f83-43cc-819a-7416bcbf9f84 /run/systemd/clevis-pkcs11.sock keyfile-timeout=30s
luks-6e38d5e1-7f83-43cc-819a-7416bcbf9f84 UUID=6e38d5e1-7f83-43cc-819a-7416bcbf9f84 /run/systemd/clevis-pkcs11.sock keyfile-timeout=30s
Copy to Clipboard Copied! keyfile-timeout
オプションは、ロック解除エラーが発生し、システムがコンソールからパスフレーズを手動で入力する必要がある場合に、次の処理に移行する仕組みを提供します。- 変更を保存し、エディターを終了します。
システムの起動プロセスの初期段階で、ルートファイルシステムのロックを解除するために必要なディスクバインディングを処理するには、インストール済みのシステムで
dracut
ツールを使用します。dracut -fv --regenerate-all
# dracut -fv --regenerate-all
Copy to Clipboard Copied! システムを再起動します。
次回のブートプロセス中に、PKCS #11 デバイス PIN の入力が要求されます。正しい PIN を入力した場合にのみ、対応する設定済みの暗号化ディスクが復号化されます。
検証
ブートプロセスを手動でテストする代わりに、次のコマンドを使用してテキストメッセージを暗号化および復号化できます。
echo "top secret" | clevis encrypt pkcs11 '{"uri":"pkcs11:module-path=/usr/lib64/libykcs11.so.2?pin-value=<PIN>"}' | clevis decrypt
# echo "top secret" | clevis encrypt pkcs11 '{"uri":"pkcs11:module-path=/usr/lib64/libykcs11.so.2?pin-value=<PIN>"}' | clevis decrypt
Copy to Clipboard Copied! <PIN>
は PIN 値に置き換えます。メッセージを復号化するには、この PIN 値を入力する必要があります。Clevis JWE オブジェクトが LUKS ヘッダーに正常に配置されていることを確認するには、
clevis luks list
コマンドを使用します。次に例を示します。clevis luks list -d /dev/sda2
# clevis luks list -d /dev/sda2 1: pkcs11 '{"uri": "pkcs11:model=PKCS%2315%20emulated;manufacturer=piv_II; serial=0a35ba26b062b9c5;token=clevis;id=%02;object=Encryption%20Key? module-path=/usr/lib64/libykcs11.so.2"}'
Copy to Clipboard Copied!