最近、認証情報を整理してファイルにベタ書きしているデータを撲滅し1passwordに寄せたら、やたら1passwordの認証が要求される様になってしまったのでYubikeyをポチった。
予定通りLinuxでも無事設定できたのでまとめておく。
ちなみに、今回買ったのはこれ。
国内代理店は完売してるので直接yubicoのサイトから買った。
Type-CにしたのはノートPCとかタブレットとかでも利用するなら将来的にこっちの方がいいかなと。自宅で利用する場合はAの方がいいんだけどアダプタ噛ませば済むので。
Yubikeyの管理
yubikey-managerをインストールする。
ykman infoでファームウェアバージョンなどを確認できて、ykman configで不要な機能を無効化したりできる。
重要なのはPINの設定でYubikey NFCは指紋認識とかはできないのでPINを設定しておかないと鍵を持っていかれた時にヤバイことになる。FIDOで利用するPINの設定は以下のコマンドで行う。
ykman fido access change-pin --new-pin $PINCODE
初期時点ではPINが設定されていないのでこれでPINが登録される。ちなみにPINの変更回数は上限があるらしい。
Linuxの認証
Linuxの認証はPAMというモジュール群によって行われている。 Yubikeyの販売元であるYubicoがOSSとして開発しているpam-u2fを利用すればFIDO2認証がPAMで利用できる様になる。
pam-u2fをインストールして以下のコマンドで接続しているYubikeyに対応した鍵情報ファイルを生成してくれる。 デフォルトのファイル配置場所は~/.config/Yubico/u2f_keysになるのでそこにファイルを出力する。
pamu2fcfg -o pam://$HOSTNAME -i pam://$HOSTNAME > ~/.config/Yubico/u2f_keys
後はPAMの設定ファイルを弄るだけで良い。しかしPAMの設定を間違えて設定を壊すと一切ログインできなくなったりするので、設定が正しいかはしっかり検証した方がいい。
自分は以下の様に設定した。
ログイン
/etc/pam.d/system-local-login
auth sufficient pam_u2f.so origin=pam://<hostname> appid=pam://<hostname> cue openasuser pinverification=1 auth include system-login account include system-login password include system-login session include system-login
sufficientでpam_u2fを登録することで、Yubikeyの認証が終わった時点でログインを可能にしている。2要素認証をしたい場合はrequriedにすれば良い。
cueを有効にすることでYubikeyへのタッチを要求するプロンプトを出す。pinverificationを有効にすることで認証時にPINを必須にする。
hostnameは各自の環境に読み替えて欲しい。
この設定で起動時のログインもhyprlockなどのスクリーンロックも同じ設定を参照するのでYubikeyだけで認証可能になる。パスワード入力の所にPINを入力してからデバイスに触れれば良い。
sudo
/etc/pam.d/sudo
auth sufficient pam_u2f.so origin=pam://<hostname> appid=pam://<hostname> cue openasuser auth substack system-auth account substack system-auth session substack system-auth
こっちは既にログイン後なのでPIN認証もなしでYubikeyが接続されているなら触れるだけで認証可能にしている。
1password (polkit)
1passwordのロック解除はシステム認証サービスを使ってロック解除を有効にすると、polkitを経由してロック解除を行う様になる。
これも、一旦マスターパスワードでロック解除した後しか使えないのでPIN認証は不要にした。
/etc/pam.d/polkit-1
auth sufficient pam_u2f.so origin=pam://<hostname> appid=pam://<hostname> cue openasuser auth include system-auth account include system-auth password include system-auth session include system-auth
ちなみに、polkit向けのpam設定のデフォルトは/usr/lib/pam.d/polkit-1にあるので、そこからコピーしてから変更した。
1password-cliで必要になる際にYubikeyに触れるだけで済む様になったので大分楽になった。
SSHの鍵をFIDO対応させることもできるのだが、一旦後回しでいいかなと今は変更していない。
という訳で、LinuxでもYubikeyは簡単に使えるし便利なので安心してポチって良い。
実際のところFIDO以外の認証は余り利用しない気はするが、Yubikey自体は結構色々できるので気になったらArchWikiを参照してみると良い。 GPG鍵の管理をYubikeyに任せるのは良さそうだと思ったが、今のところコミット署名にしか使ってないので別にそんなに気を遣わなくてもいいかなーという感じ。