Debian Trixie + LightDMでマイナンバーカードログイン環境を構築する

はじめに
Debian 13 (Trixie) のデスクトップ環境で、ディスプレイマネージャーであるLightDMを使い、ICカード(マイナンバーカード)によるPKCS#11認証でログインする環境を構築した際の備忘録です。
SDDMへの乗り換えも検討しましたが、最終的にLightDMのままPAMの設定を調整することで目的を達成できました。
環境
- OS: Debian 13 (Trixie)
- デスクトップ環境: KDE Plasma 6
- ディスプレイマネージャー: LightDM
- ICカードリーダー: ICカード リーダーライター CLOUD2700-NTTCom CLOUD2700
- ICカード: マイナンバーカード

1. 必要なパッケージのインストール
まず、スマートカードを扱うための基本的なツールとPAMモジュールをインストールします。
sudo apt update
sudo apt install opensc pcscd libpam-pkcs11
-
pcscd
: スマートカードリーダーと通信するためのデーモン -
opensc
: PKCS#11/PKCS#15に対応したツールとライブラリ -
libpam-pkcs11
: PAMでPKCS#11認証を利用するためのモジュール
インストール後、ICカードリーダーをシステムに認識させるためのサービス(デーモン)を起動し、システム起動時に自動で立ち上がるように設定します。
sudo systemctl enable --now pcscd.service
pcscd
サービスが起動していることを確認します。
sudo systemctl status pcscd
2. ICカードリーダーとカードの認識確認
ICカードリーダーをPCに接続し、マイナンバーカードを挿入します。
opensc-tool
コマンドでカードが正しく認識されているか確認します。
# カードリーダーの一覧を表示
opensc-tool --list-readers
# カードの情報を表示(JPKI利用者証明用電子証明書などが見えればOK)
opensc-tool --name
ここでエラーが出る場合は、カードリーダーのドライバーや pcscd
の状態を見直します。

3. ログイン認証用の証明書の保存
ログイン時に照合するための公開鍵証明書をカードから取り出し、ホームディレクトリに保存します。
mkdir ~/.eid
chmod 0700 ~/.eid
pkcs15-tool --read-certificate 1 > ~/.eid/authorized_certificates
chmod 0600 ~/.eid/authorized_certificates
※ pkcs15-tool --read-certificate 1
の1は opensc-tool --list-readers
で出てきたカード番号なんじゃないかなと思いますので注意。デフォルトは0かな。

common-auth
)
4. PAMの設定 (認証の心臓部であるPAMの設定を行います。
# 設定を行う前に、必ずバックアップを取ります
sudo cp /etc/pam.d/common-auth /etc/pam.d/common-auth.bak
sudo nano /etc/pam.d/common-auth
/etc/pam.d/common-auth
の編集内容
pam_unix.so
の行の前に、pam_p11.so opensc-pkcs11.so
の行を sufficient
として追加します。これにより、ICカード認証が成功すれば、後続のパスワード認証(pam_unix.so
)はスキップされます。
(※複数の多要素認証を追加できるか試しましたが、今のところ1つしか追加できなかった。)
# /etc/pam.d/common-auth
# here are the per-package modules (the "Primary" block)
+ auth sufficient pam_p11.so opensc-pkcs11.so
auth [success=1 default=ignore] pam_unix.so nullok try_first_pass
# here's the fallback if no module succeeded
auth requisite pam_deny.so
今回の環境では、libpam-pkcs11
のデフォルト設定でマイナンバーカードを認識できたため、/etc/pam_pkcs11/pam_pkcs11.conf
の編集は不要でした。環境によっては、このファイルでカードリーダーのドライバー (opensc-pkcs11.so
など) を明示的に指定する必要があります。
5. 動作確認
システムを再起動し、LightDMのログイン画面が表示されるのを待ちます。
- ICカードを挿入すると、
pam_pkcs11
がカードを検知します。 - パスワード入力欄に、利用者証明用電子証明書のPIN(数字4桁)を入力します。
- 正しいPINを入力すると、ログインが完了します。
ログイン画面に「ICカードを挿入してください」のようなメッセージが表示されないため、最初は少し戸惑うかもしれません。これについてはデフォルトのgreeterがカスタマイズできるといいのですが時間がなく断念。
6. 重要:設定に失敗してログインできなくなった場合
PAMの設定ミスにより一切ログインできなくなった場合は、リカバリーモードを使ってシステムを修復します。
- PCを再起動し、GRUBメニューが表示されたら「Advanced options for Debian」を選択します。
- メニューから末尾に「(recovery mode)」と書かれた項目を選択して起動します。
- リカバリーメニューが表示されたら、「root Drop to root shell prompt」を選択し、Enterキーを押します。
- ルート権限のシェルが起動します。通常はディスクはマウントできていると思うので、 バックアップしておいた設定ファイルで元に戻します。
cp /etc/pam.d/common-auth.bak /etc/pam.d/common-auth
-
reboot
コマンドでPCを再起動すれば、元のログイン状態に戻ります。
同様に、リカバリモードを使用して dpkg-reconfigure <sddm/lightdm>
とか指定すれば、ディスプレイマネージャも切り替えできます。

PINコードでログインできて便利