NFCカードでLinuxにログインしてみた
💡 なぜ作ったのか
- パスワード入力が面倒だった
- 以前スマホにプッシュ通知を飛ばしてログインするものを作ったが不安定だった
- 新しいデバイスを触ってみたかった
- Linux対応のNFCカードリーダーが市販されていた
- RC-S300/S1
🛠 やったこと
1. UIDを読み取るプログラムの作成
-
libnfc
を使ってNFCカードのUIDを取得 - RC-S300/S1にカードをかざすだけでUIDを表示
2. ユーザーとの紐付け処理
-
username[\t]UID
の形式でペアを記録したファイルを作成 - 起動時にこのファイルを読み込み、照合するスクリプトを作成
- コマンドライン引数でユーザー名を指定し、カードのIDがリストにあった場合はユーザー名が与えられたものと一致するかを確認するシンプルな仕様
3. PAMモジュールを実装
- Cで簡単な認証用のPAMを作成
- UID照合プログラムを呼び出すだけの構造
- 成功すればログインを許可、失敗すれば拒否
4. PAMの設定と動作確認
-
/etc/pam.d/common-auth
を編集 - 実際にカードをかざしてログインできることを確認
⚠ 気づいたこと・注意点
- スマホやマイナンバーカードは毎回違うUIDを返す
- 認証用には使えない
- FeliCa Lite-Sなど、UIDが固定のカードが必要
- UIDは暗号化されていない
- セキュリティは自己責任
- 単体での厳重な用途には不向き
- リーダーのLinux対応は機種によって異なる
- 購入前に調べることを推奨
🎉 まとめ
- カードをかざすだけでログインできるのは快適
- 自作のログイン体験としては大満足
- 次はチャレンジレスポンスや署名認証にも挑戦したい
📎 付録
それでは良いLinuxライフを