yubikey bio を完全にマスターした
2時に寝て遅くまで飲んでいたせいか、やや吐き気もしながら朝起きてだらだらして11時ぐらいに起きた。
1password のロック解除を yubikey で行う⌗
先日購入して触っていた yubikey bio の設定 の続き。1password のロック解除を指紋認証で行いたかったが、1password の 8.10.4 のアプリではロック解除をシステム認証で行おうとするとエラーが発生していた (バグってた) 。5月の頭に 8.10.6 がリリースされていてシステム認証のバグが直っていることに気付いた。1password のアプリケーションがどうやって linux のシステム認証を使っているかは次の1文に書いてある。
システム認証は、Linux のユーザーアカウントに組み込まれたアクセス制御機構を使用します。これは polkit と PAM (Pluggable Authentication Modules) という2つの Linux 標準に依存しています。この2つを組み合わせることで、安全な認証サービスを提供します
https://support.1password.com/system-authentication-linux/#about-system-authentication-security
私は polkit を使ったことがなくて初見でよく分かっていないが、どうやら polkit から pam を介して認証しているようにみえる。pam.d 配下の設定を調べてみると /etc/pam.d/polkit-1
がある。前回の設定で pam.d の設定とテストの方法を理解していた。ここまでくれば Module Arguments のドキュメントをみながらオプションを設定するだけ。1Password のロック解除をYubiKeyでやる の記事で origin/appid にホスト名を指定しているが、最新のモジュールだと指定しないときはデフォルトでホスト名が使われるようにみえる。
- origin: FIDO 認証手順の party ID を設定する、値が指定されない場合は識別子
pam://$HOSTNAME
が使用される - appid: FIDO 認証手順の application ID を設定する、値を指定しない場合は origin で使用されたものと同じ値が使用される (origin も指定しない場合は
pam://$HOSTNAME
) - nouserok: 認証しようとするユーザーが
authfile
内に存在しない場合やauthfile
が欠落/不正確な場合でも、認証の試行を成功させるように設定する - cue: タッチすることを促すメッセージを表示するように設定する
これらを踏まえて u2f で認証が成功したらそれ以降の処理をスキップするように次の設定を先頭に追加する。
$ sudo vi /etc/pam.d/polkit-1
auth sufficient pam_u2f.so nouserok cue
...
cue を指定したことでパスワードプロンプトを表示せず、デバイスをタッチするように促される。よい感じ。
$ pamtester polkit-1 t2y authenticate
Please touch the device.
pamtester: successfully authenticated
これで pam の polkit の設定が正しいことを検証できる。この後に 1password のアプリケーションでロック解除するときに u2f を使って指紋認証できた。めっちゃ便利。