Closed5

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

hangedmanhangedman

はじめに

Debian 13 (Trixie) のデスクトップ環境で、ディスプレイマネージャーであるLightDMを使い、ICカード(マイナンバーカード)によるPKCS#11認証でログインする環境を構築した際の備忘録です。

SDDMへの乗り換えも検討しましたが、最終的にLightDMのままPAMの設定を調整することで目的を達成できました。

環境

  • OS: Debian 13 (Trixie)
  • デスクトップ環境: KDE Plasma 6
  • ディスプレイマネージャー: LightDM
  • ICカードリーダー: ICカード リーダーライター CLOUD2700-NTTCom CLOUD2700
  • ICカード: マイナンバーカード

参考:Arch Linuxでマイナンバーカードでのログイン認証をしてみる

hangedmanhangedman

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 の状態を見直します。

hangedmanhangedman

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かな。

hangedmanhangedman

4. PAMの設定 (common-auth)

認証の心臓部である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のログイン画面が表示されるのを待ちます。

  1. ICカードを挿入すると、pam_pkcs11 がカードを検知します。
  2. パスワード入力欄に、利用者証明用電子証明書のPIN(数字4桁)を入力します。
  3. 正しいPINを入力すると、ログインが完了します。

ログイン画面に「ICカードを挿入してください」のようなメッセージが表示されないため、最初は少し戸惑うかもしれません。これについてはデフォルトのgreeterがカスタマイズできるといいのですが時間がなく断念。

6. 重要:設定に失敗してログインできなくなった場合

PAMの設定ミスにより一切ログインできなくなった場合は、リカバリーモードを使ってシステムを修復します。

  1. PCを再起動し、GRUBメニューが表示されたら「Advanced options for Debian」を選択します。
  2. メニューから末尾に「(recovery mode)」と書かれた項目を選択して起動します。
  3. リカバリーメニューが表示されたら、「root Drop to root shell prompt」を選択し、Enterキーを押します。
  4. ルート権限のシェルが起動します。通常はディスクはマウントできていると思うので、 バックアップしておいた設定ファイルで元に戻します。
    cp /etc/pam.d/common-auth.bak /etc/pam.d/common-auth
    
  5. reboot コマンドでPCを再起動すれば、元のログイン状態に戻ります。

同様に、リカバリモードを使用して dpkg-reconfigure <sddm/lightdm> とか指定すれば、ディスプレイマネージャも切り替えできます。

このスクラップは18日前にクローズされました