LoginSignup
0
0

NixOS マシンに Yubikey でログインする (FIDO U2F)

Last updated at Posted at 2023-08-17

背景

マシンにログインするのに毎回パスワードを打つのが面倒。
簡単なパスワードにするのも嫌。

手持ちの Yubikey を使ってログインできたら便利そうだと思い調べてみたところ、案外簡単そうだったので設定してみた。

(2023/09/06 追記) security.pam.u2f.cue = true とすることで sudo 時にプロンプトが出ることがわかったので追加した。毎回何も表示されない画面を見て数秒佇んでいたので助かった。

構成

  • NixOS マシン
  • Yubikey 5 NFC
  • 参考:NixOS Wiki

OTP を使う方法と FIDO U2F を使う方法があるらしい。

OTP の方法は Yubikey 向けのパッケージを使うもので、 FIDO U2F の方法は FIDO U2F に対応する認証方法の一つとして Yubikey を使う形。
より一般的な方がいい気がするので U2F の方で設定を行う。

手順

Wiki に書いてあるとおりに進める。

1. マッピングファイルの生成

Yubikey を挿入して以下コマンドを実行する。

nix-shell -p pam_u2f
mkdir -p ~/.config/Yubico
pamu2fcfg > ~/.config/Yubico/u2f_keys

3つ目のコマンドを実行すると PIN を聞かれるので入力する。
筆者の場合はすでに設定済みだったが、もしかすると Yubikey Manager を使って設定しないといけないかもしれない。

PIN を入力したあと、Yubikey のボタンをタッチするのを忘れないように。

2. システム設定の編集

vim /etc/nixos/configuration.nix

以下をどこかに追記。

/etc/nixos/configuration.nix
security.pam.services = {
  login.u2fAuth = true;
  sudo.u2fAuth = true;
};
security.pam.u2f.cue = true;
sudo nixos-rebuild switch

3. 動作確認

nix-shell -p pamtester
pamtester login <username> authenticate
pamtester sudo <username> authenticate

Yubikey をタッチして pamtester: successfully authenticated と表示されれば成功。

一応これで動作確認できているが、 Super+L でロックしたあとのログインや、 sudo が成功することも確認した。

4. (追記) Yubikey を抜いた時に自動でログアウトする

(2023/08/17 追記)
このままでは、 Yubikey を差しっぱのままログアウトする懸念がある。
注意する、だけではうまくいくとは思えないので、仕組みでどうにかしたい。

そこで、 Yubikey を抜くことをトリガーとしてログアウト(画面ロック)することにした。
画面ロックの習慣はあるので、キーボードショートカットの代わりに Yubikey を抜く習慣をつければうまくいくはず。

YubiKeyをLinuxの「鍵」にする のページを参考にさせていただき、 udev を使って実現できそうなことがわかった。

udev を使って USB デバイスの抜き差しイベントをフックし、デバイスが対象の Yubikey かつイベントが抜きだった場合に画面ロックをするような設定をする。

  • 1, Yubikey の ID を調べる
    • udevadm monitor --environment --udev | grep -E 'ID_VENDOR_ID|ID_MODEL_ID の結果で出てきた ID を控える
    • 筆者 (Yubikey 5 NFC) の場合は ID_VENDOR_ID=1050, ID_MODEL_ID=0407 だった
  • 2, configuration.nix に udev のルールを追加する
/etc/nixos/configuration.nix
services.udev.extraRules = ''
  ACTION=="remove", ENV{ID_VENDOR_ID}=="1050", ENV{ID_MODEL_ID}=="0407", RUN+="${pkgs.systemd}/bin/loginctl lock-sessions"
'';
  • 31, nixos-rebuild switch
  • 4, 動作確認
    • Yubikey を抜くと画面がロックされることを確認する

まとめ

詰まることもなくとても簡単にできて驚いた。

ただ、 PIN なしでログインできるのは不安なので今後どうにかしたい。
Mac で設定した際には U2F ではなく PIV? という機能を使ったが、 Smart Card mode というのがそれに当たるのかもしれない。
Wiki に詳しい情報がないので一旦このまま使い、なにかわかったら別の記事を作ろうと思う。

(2023/08/17 追記)
NixOS 以外の Linux 情報を探しても、 PIN によるログインは見当たらなかった。
ログアウトのために Yubikey を抜くような設定を追加したので、習慣がつくように頑張る。

  1. コードブロックを挟むと順序付き箇条書きが 1. からにリセットされるのはどうにかできないものか……。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0