Yubikeyを買ったのでLinuxのログインや1passwordのロック解除が出来るようにしてみた

最近、認証情報を整理してファイルにベタ書きしているデータを撲滅し1passwordに寄せたら、やたら1passwordの認証が要求される様になってしまったのでYubikeyをポチった。

予定通りLinuxでも無事設定できたのでまとめておく。

ちなみに、今回買ったのはこれ。

www.yubico.com

国内代理店は完売してるので直接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に任せるのは良さそうだと思ったが、今のところコミット署名にしか使ってないので別にそんなに気を遣わなくてもいいかなーという感じ。