Universal 2nd Factor
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
Chromium/Chrome
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 キーのボタンをクリックして、鍵を確認します。
複数の鍵を所有している場合は、それらを追加してください
$ pamu2fcfg -o pam://hostname -i pam://hostname -n >> ~/.config/Yubico/u2f_keys
パスワードなしの sudo
/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 キーを使用するという設定が可能です。
その他の認証方法
上で説明したように、他のサービスに対しても 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
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