はじめに
PAM モジュールをあさってたら pam_p11 というプロジェクトを見つけました。
スマートカードを使った認証ができそうです。
古い Yubikey Neo の使い道がなくて困ってたのですが、Yubikey Neo はスマートカードに対応しています。
Yubikey Neo を使うのであれば、スマートカードへのアクセスには PIN 入力が必要になります。
そして、本来の主機能の U2F, タッチによる認証は、pam_u2f で対応できます。
つまり、pam_p11 と pam_u2f を両方通過させるようにすれば、
- Yubikey Neo を差す(または差さっている)
- PIN を入力する
- タッチする
という、気分だけなら FIDO2 を味わうことができます。
なお本記事は、履歴コマンドからなんとなくこれだったっけ?というのを選んでならべてるので、間違ってるかもしれません。-h や man, AI で良く確かめてください。
スマートカード使うための準備
まずスマートカードを Linux で扱うには PCSC Lite だかが必要です。
Arch wiki
や AI に、その辺は聞いてください。
Yubikey の PIV (スマートカード) の設定
ykman で全部できます。
Yubico 本家のガイド
# 鍵作成&署名
# 署名ってのが何か良くわかっていない
ykman piv keys generate --algorithm ECCP256 9a pubkey.pem
ykman piv certificates generate --subject "CN=yubico" 9a pubkey.pem
# PIN の変更
# ユーザーと管理者
ykman piv access change-puk
ykman piv access change-pin
# 管理キーの変更
# 管理キーが何か分かっていない
# もともと乱数みたいな 16進が入ってると思うが、なんとなく変えてみた。必要性は知らない
> ykman piv access change-management-key -g
SSH のキーチェーンに登録
ssh-keygen -D /usr/lib/opensc-pkcs11.so >> ~/.ssh/authorized_keys
pam.d の書き方
pam_u2f は有名だし
Arch wiki
に書いてあるとおりにやればいいので省きます。
なんか pam_p11 のバグなのか仕様なのか、その pam のセッションの中で一回でも失敗してるとトークンを探しにいきません。なので、pam_p11 は先頭に書くか、そこまでに失敗してたら die するような使い方に限定できます。
残念ながら、新しい Yubikey から優先的に認証を終らせるみたいなことはできないです。
# なんか 1回でも失敗してると、 pam_p11 がトークン見にいかない。
# こういう絶対に成功するはずのないパスワード、
# 成功するやつは /etc/shadow を破ったとしか思えんやつ、
# で待ち構えておふざけするということはできない。
#auth [success=die default=ignore] pam_unix.so
# 直前を成功させても無駄
#auth [success=ok default=ignore] pam_permit.so
auth [success=ok default=die] /usr/lib/security/pam_p11.so /usr/lib/opensc-pkcs11.so
auth [success=done default=die] pam_u2f.so origin=hogehoge appid=hagahaga cue
pamtester で練習しながら書くといいです。こんな感じで古い Yubikey Neo でも FIDO2 気分が味わえます。
> pamtester orep11 jiro authenticate
yubicoでログイン:
Please touch the FIDO authenticator.
pamtester: successfully authenticated
まとめ
メリット
- 古い NEO でも FIDO2 気分が味わえる。
デメリット
- 自分システムにしか使えない