Universal 2nd Factor

提供: ArchWiki
2023年11月1日 (水) 18:14時点におけるKgx (トーク | 投稿記録)による版 (→‎​LUKS を使用した保存データの暗号化: 非ルートパーティションを翻訳して追加)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

Universal 2nd Factor (U2F) はスマートカードと同様のセキュリティ技術に基づいて、専用の USB または NFC デバイスを使用した二要素認証 (2FA) を強化、簡素化するためのオープンスタンダードです。

当初は Google と Yubico が開発し、NXP セミコンダクターズが貢献していましたが、現在は、FIDO アライアンスがホストしています。

U2F および U2F-devices については、Category:Universal 2nd Factor も参照してください。

Web サイトの認証

U2F は、Google、Facebook、Twitter、Github などの主要なサイトでサポートされています。twofactorauth.org または dongleauth.info には他のサイトや設定資料へのリンクがありますのでご確認ください。サポートしている全てのブラウザでは、 libfido2 をインストールするだけでよいでしょう。Yubico はテスト用に demo page を提供しています。

Firefox

Firefox 設定#​Fido U2F 認証

Chromium/Chrome

Chromium 設定#U2F 認証

Arch Linux の認証

YubiKey を開発した Yubico 社は、U2F PAM モジュールを開発しました。U2F PAM モジュールは、ログイン時の二番目の要素として、またはパスワードを完全に置き換えるために使用することができます。

PAM モジュールのインストール

このモジュールは、pam-u2f パッケージの一部です。

鍵の追加

鍵は pamu2fcfg ツールで追加する必要があります:

$ mkdir ~/.config/Yubico
$ pamu2fcfg -o pam://hostname -i pam://hostname > ~/.config/Yubico/u2f_keys

U2F キーのボタンをクリックして、鍵を確認します。

ノート: 異なるネットワークの DHCP などが原因で、システムのホスト名が変更された場合、ログインできなくなります。これを防ぐために、上記のオプションを指定し、hostname を実際のホスト名に置き換えることをお勧めします。

複数の鍵を所有している場合は、それらを追加してください

$ pamu2fcfg -o pam://hostname -i pam://hostname -n >> ~/.config/Yubico/u2f_keys

パスワードなしの sudo

警告: 設定に変更を加える前に、root 権限で別のシェルを開始してください。(例 sudo -s)。このようにすることで、問題が発生した場合に変更を元に戻すことができます。

/etc/pam.d/sudo を開いて、以下を追加

auth            sufficient      pam_u2f.so origin=pam://hostname appid=pam://hostname

1行目の記述します。前述の hostname は必ず書きかえてください。次に、新しいターミナルを起動し、sudo ls と入力します。キーの LED が点滅し、それをクリックするとコマンドが実行されます。

GDM ログイン

/etc/pam.d/gdm-password を開いて追加します。

auth            required      pam_u2f.so nouserok origin=pam://hostname appid=pam://hostname

既存の auth 行の後に追加します。nouserok オプションを使用することで、ユーザーがキーを設定していない場合にルールを失敗させることができることに留意してください。これにより、複数のユーザーが U2F キーを使用している場合でも、そのうちの一部のユーザーのみが U2F キーを使用するという設定が可能です。

ノート: この方法は暗号化されたホームパーティションでは動作しません。なぜなら、ログインプロセスが完了する前に復号化が行われず、u2f_keys ファイルが利用できないからです。この場合、official documentation of pam-u2f で説明されているように、セントラルマッピングファイルを使用してください。

その他の認証方法

上で説明したように、他のサービスに対しても PAM モジュールを有効にします。例えば、Cinnamon のスクリーンセーバーを保護するには、/etc/pam.d/cinnamon-screensaver を編集します。

トラブルシューティング

システムから自分自身をロックアウトしてしまった場合は、リカバリーモードまたは USB ペンドライブから起動します。その後、PAM コンフィグの変更を元に戻して再起動します。

OpenSSH

OpenSSH は 8.2 から FIDO/U2F ハードウェアトークンをネイティブにサポートしています。クライアントとサーバの両方が、ecdsa-sk/ed25519-sk 形式の鍵をサポートしている必要があります。次のコマンドを使用して、セキュリティで裏付けされた鍵ペアを生成します

  • ECDSA 鍵の場合
$ ssh-keygen -t ecdsa-sk
  • Ed25519 鍵の場合
$ ssh-keygen -t ed25519-sk
ノート: Yubikey を使用している場合、ed25519-sk 形式の鍵にはファームウェアバージョン 5.2.3 が必要です。

​LUKS を使用した保存データの暗号化

バージョン248以降、systemd は FIDO2 キーを使って LUKS パーティションのロックを解除できるようになりました。

まず、/etc/crypttab ファイルを設定するか、または、root パーティションのロックを解除したい場合は initramfs をカスタマイズする必要があります。全般的な手順は、TPM チップを使ってロックを解除する場合と同様です。Trusted Platform Module#systemd-cryptenroll を参照してください。

キーを登録するには、systemd-cryptenroll ユーティリティーを使用する必要があります。まず、以下のコマンドを実行して、検出された鍵をリストアップします:

$ systemd-cryptenroll --fido2-device=list

​ 次に、auto 値 (または、複数ある場合は、/dev/hidrawX などの FIDO2 デバイスへのパス) を指定して、LUKS スロットにキーを登録できます。

$ systemd-cryptenroll --fido2-device=/path/to/fido2_device /dev/sdX

非ルートパーティション

非ルートデータパーティションの場合、crypttab は次のようになります。

/etc/crypttab
data /dev/sdX none fido2-device=auto

これは、暗号化されたパーティションが LVM で管理される論理ボリュームである場合にも機能します。

/etc/crypttab
data /dev/vg1/data none fido2-device=auto