はじめに
基本的にウェブブラウザはセキュリティが理由でFlatpak版を使っている。(但し、verifiedなパッケージのみ)
ところが、ホスト版ウェブブラウザで使えていた物理キー(Google Titan Key)がFlatpak版ウェブブラウザだと使えない。パスワードマネージャーでなんとかなる場合もあるが、ここは物理キーが使えるように頑張ってみる。
動作環境
- OS: NixOS (Niri - wayland compositor)
- Browser: Brave (Flatpak版)
- Security Key: Google Titan Security Key v2 (
18d1:9470)
ステップ1:ホストOS(NixOS)側の「門」を開ける
まず、OSが「このUSBデバイスは、ログインしているユーザーが触っていいよ」と認識してくれないと始まらない。
NixOSの場合は、udev ルールに書く必要がある。
# configuration.nix
services.udev.extraRules = ''
# Google Titan Security Key v2 用の設定
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="18d1|096e", ATTRS{idProduct}=="9470|5026|0858|085b", TAG+="uaccess"
'';
idVendorとidProduct 実機の lsusb で確認することができる。私の環境ではidVendor=="18d1" で idProduct=="9470"であった。
このあとnixos-rebuild switchを実行。
ステップ2:Flatpakのサンドボックスに穴をあける
Flatpak側からTitanキーのようなHIDデバイスを認識させるには、必要な権限を与える必要があるのでFlatpak側の設定を行う。設定と言ってもコマンドラインオプションの指定である。flatsealでも設定可能だが、複数のプロファイルを使っている場合でプロファイルごとに設定を行いたい場合は、コマンドラインオプションを指定するしかない。
必要な権限
--device=all: これを入れないと、キーの通信路である/dev/hidrawが見えない。--filesystem=/run/udev:ro: これがないと、Braveがデバイスの詳細情報をOSに問い合わせることができない。
ステップ3:Flatpak版braveを起動
ここで最大の注意点。他のプロファイルを含め、すべてのBraveを完全に終了させておくこと。これをしていないと、古い権限のままのBraveが立ち上がってしまい、いつまでも設定が反映されない。
起動コマンド
flatpak run \
--device=all \
--filesystem=/run/udev:ro \
com.brave.Browser \
--profile-directory="Default"
ステップ4:動作確認
この状態で、WebAuthnのテストサイト(WebAuthn.io)などで適当にユーザ名を入力後、Registerを押すと、PINの入力を求められる。PIN入力後、Titanキーに触れると無事に登録される。その後、Authenticateを押すと、再びPINの入力を求められるので、同様に入力、Titanキーに触れると無事に認証されることを確認する。
まとめ
- udevルールでOS側の権限(
uaccess)をセットする。 - Flatpakの引数で
device=allと/run/udevを開放する。 - 動作確認のためのブラウザの全終了を忘れない。