テクノロジーガイド

IPFire にスマートカード(PC/SC・CCID・OpenSC)を統合する方法

4 min read ネットワーク 更新されました 19 Oct 2025
IPFire にスマートカード(PC/SC・CCID・OpenSC)を統合
IPFire にスマートカード(PC/SC・CCID・OpenSC)を統合

重要: 本ガイドは IPFire の開発(LFS)シェル上での作業を前提としています。実稼働システムに適用する前にテスト環境で検証してください。

概要と目的

この連載記事の続編です。ここではハードウェアトークン(スマートカード)とそのリーダー(CCID 準拠)を IPFire に統合するため、以下のオープンソースツールを IPFire 2.19 向けにコンパイルし、pakfire 形式のアドオンとして配布・インストールする手順を示します。

  • pcsc-lite(PC/SC Smart Card Daemon)
  • CCID(スマートカードリーダー向けドライバ)
  • OpenSC(スマートカード管理/PKCS#11 サポート)

用語定義(一行ずつ簡潔に)

  • PC/SC: スマートカードアクセス用の標準 API。
  • CCID: USB スマートカードリーダー向けプロトコル/ドライバ群。
  • OpenSC: PKCS#11 や PKCS#15 を実装するオープンソースツールセット。

ユースケース例

  • 安全な Web ログイン
  • ワークステーションログオン
  • ファイル暗号化
  • VPN(OpenVPN、L2TP)でのクライアント認証
  • メール暗号化

サポートされるカードベンダー(一部)

  • ASEPCOS
  • FTCOSPK01C
  • OpenPGP Card
  • Cyberflex
  • CardOs
  • STARCOS

重要: ベンダーごとのサポート状況やカードのフォーマット(PKCS#15 互換など)は実機で確認してください。


目次

  • 環境準備
  • 開発シェル(test shell)での前提操作
  • pcsc-lite のビルドとインストール
  • CCID ドライバのビルドと udev ルール
  • OpenSC のビルドとインストール
  • IPFire 用アドオン(pakfire)としてのパッケージ化
  • 実機への配布とインストール
  • トラブルシューティングとチェックリスト
  • 受け入れ基準
  • まとめ

環境準備

開発環境の詳細は前回の記事にありますが、要点は次の通りです。

  • IPFire のソースツリーと LFS ビルド環境を用意する
  • 作業は root または同等の権限で行う
  • 必要なビルドツール(gcc, make, pkg-config 等)を導入しておく

IPFire のテストシェルに入る

IPFire の LFS(build)環境に入り、そこでパッケージの依存関係検証やビルドを行います。ルートディレクトリで次を実行します。

./make shell

IPFireシェルを起動したターミナル画面

ソースパッケージは /usr/src/cache に配置されています。チュートリアルで必要なパッケージはあらかじめ cache に置かれています。

IPFireのソースキャッシュディレクトリを表示

pcsc-lite のソースパッケージが確認できます。

pcsc-lite のソースパッケージ一覧


pcsc-lite のビルド

  1. 事前に必要な開発ライブラリをインストールします。少なくとも libudev-dev が必要です(IPFire の LFS 環境では apt-get を利用した例を記載)。
apt-get install libudev-dev

libudev-dev をインストールするapt出力

  1. ソースを展開して configure を実行します。
tar -xf pcsc-lite-1.8.18.tar.bz2
cd pcsc-lite-1.8.18
./configure

pcsc-lite を展開して ./configure を実行した様子

configure がエラーなく通る例。

configure コマンドがエラーなく終了した出力

  1. make と make install を実行して pcscd をインストールします。
make
make install

pcscd デーモンを make && make install でインストール

インストール成功時に表示される重要なファイルパス(ヘッダやライブラリのインストール先)を控えておきます。これらは CCID の configure 時に参照します。

pcsc-lite のインストールで示される重要パス

pcscd が稼働していることを確認します(テストシェル内)。

テスト環境で pcscd が起動しているプロセス一覧


CCID ドライバのビルド

CCID は USB スマートカードリーダーの汎用ドライバ群です。pcsc-lite を先にインストールしておく必要があります。

  1. cache に配置された ccid パッケージを展開します(例: ccid-1.4.24)。

  2. ./configure を実行すると pcsc-lite を検出できずにエラーとなることがあります。

CCID の ./configure が PCSC 未検出でエラーを出している様子

この場合、pcsc-lite を /usr/local にインストールしたようなケースだとインクルードパスや pkg-config のパスが異なるため、明示的に指定します。

./configure PCSC_CFLAGS=-I/usr/local/include/PCSC

さらに、libpcsclite.pc(pkg-config 用の .pc)が見つからない問題が出る場合は、PKG_CONFIG_PATH をエクスポートします。

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
./configure PCSC_CFLAGS=-I/usr/local/include/PCSC

PKG_CONFIG_PATH をエクスポートするシェルプロンプト

再実行で PCSC 関連ヘッダ・ライブラリが検出されれば configure は成功します。

configure スクリプトを再実行した出力の一部

configure が PCSC を検出して成功した出力

  1. make && make install で CCID ドライバをインストールします。
make
make install

CCID の make && make install を実行している様子

  1. スマートカードリーダーの udev ルールを配置します。多くの CCID パッケージは udev ルールファイル(例: 92_pcscd_ccid.rules)を同梱しています。これを /etc/udev/rules にコピーしてください。
cp 92_pcscd_ccid.rules /etc/udev/rules/

スマートカードリーダー用の udev ルールを /etc/udev/rules にコピー

コピー後、udev を再読み込みまたはシステム再起動して正しく権限・デバイスノードが作成されることを確認します。


OpenSC のビルド(スマートカード管理)

OpenSC は PKCS#11 およびカードファイル構造(PKCS#15)を扱うツール群です。OpenVPN や OpenSSL と連携する際に PKCS#11 を使う場合に重要です。

  1. ソースを展開し、configure を実行して依存関係を確認します。
cd opensc-0.16.0
./configure

OpenSC の configure を実行して依存関係をチェックする様子

configure の出力例。

OpenSC configure の出力例(依存チェック1)

OpenSC configure の出力例(依存チェック2)

  1. make && make install を実行します。
make
make install

OpenSC を make && make install でインストールしている様子

インストール完了の例。

テストシェルに OpenSC が正しくインストールされている出力


IPFire アドオン(pakfire)用のパッケージ化

ここからは、ビルド済みの成果物を IPFire の pakfire アドオンとしてパッケージ化し、他の IPFire システムに配布/インストールできる形式にします。

基本手順のポイント:

  • 各パッケージごとに lfs スクリプト(LFS ビルドスクリプト)を作成する
  • make.sh(ビルド管理スクリプト)に新しいアドオンを追加する
  • ビルド後に生成される rootfiles を config/rootfiles/packages に配置する
  • rootfiles 中の余分な記号(例: +)を削除する
  • src/paks// に install.sh, uninstall.sh, update.sh を配置する

LFS スクリプトをダウンロードして ipfire-2.x の lfs ディレクトリに配置します。

LFS スクリプトをダウンロードして lfs ディレクトリに配置する様子

各パッケージの lfs スクリプト例(画面はそれぞれのファイル内容):

pcsc-lite 用の LFS スクリプトの内容

ccid 用の LFS スクリプトの内容

OpenSC 用の LFS スクリプトの内容

make.sh に新しいアドオンのビルドルールを追加します(差分表示の例)。

make.sh に新しいアドオンを追加した差分表示

ビルドコマンド(各パッケージに対して):

ipfiremake pcsc-lite
ipfiremake ccid
ipfiremake opensc

あるいは LFS スクリプトをまとめて走らせる場合:

./make.sh build

ビルドは 2 回実行する必要があるケースがあります(最初の実行で rootfiles が生成され、次にそれらを config に組み込んで再ビルドする)。

./make.sh build を実行したビルド出力

初回ビルドでは rootfiles が log ディレクトリに作成されるが、config にまだ配置されていないためビルド段階で “rootfiles not found” のメッセージが出ることがあります。

log ディレクトリに生成された rootfiles の一覧

これらを config/rootfiles/packages にコピーし、ファイル名を lfs スクリプト名に合わせて変更します。

cp log/pcsc-lite-1.8.18 config/rootfiles/packages/pcsc-lite
cp log/ccid-1.4.24 config/rootfiles/packages/ccid
cp log/opensc-0.16.0 config/rootfiles/packages/opensc

rootfiles を config/rootfiles/packages にコピーするコマンド出力

rootfiles 内に “+” 記号が入っている場合、pakfire の仕様上それを取り除く必要があります。sed で一括置換します。

sed -i 's/+//g' config/rootfiles/packages/pcsc-lite
sed -i 's/+//g' config/rootfiles/packages/ccid
sed -i 's/+//g' config/rootfiles/packages/opensc

例: pcsc-lite の rootfile(+ が含まれている状態)

pcsc-lite の rootfile(+ 記号あり)

ccid の rootfile(+ 記号あり)

opensc の rootfile(+ 記号あり)

sed 実行例の画面(+ を削除している様子)

実行後、+ が除去されていることを確認します。

rootfiles から + が削除された確認

pakfire 用のディレクトリ構成を整えます。src/paks/ を作成し、src/paks/default からインストール・アンインストール・アップデート用のスクリプトをコピーします。

src/paks/default から各パッケージへ install.sh 等をコピーする様子

再度ビルドを実行します。

./make.sh build

最終的に packages ディレクトリに .ipfire パッケージが生成されます。

ビルドが完了し packages ディレクトリに ipfire パッケージが作成されている


コンパイル済みパッケージの実稼働システムへの配布とインストール

生成された .ipfire パッケージを稼働中の IPFire システムへコピーします。ここでは /opt/pakfire/tmp に配置する例を示します。

生成したパッケージを稼働中の IPFire システム /opt/pakfire/tmp にコピー

コピーされたことを確認します。

パッケージファイルが IPFire システムにコピーされた一覧

パッケージを展開します(中身は install.sh 等が含まれます)。

tar -xvf pcsc-lite-1.8.18-2.ipfire
tar -xvf ccid-1.4.24-2.ipfire
tar -xvf opensc-0.16.0-2.ipfire

pcsc-lite-1.8.18-2.ipfire を tar で展開する様子

ccid-1.4.24-2.ipfire を tar で展開する様子

opensc-0.16.0-2.ipfire を tar で展開する様子

各パッケージの install.sh を実行してインストールします。

./install.sh

各パッケージの ./install.sh を実行している出力

pcsc-lite のインストール成功例。

pcsc-lite が稼働中のシステムにインストールされた確認

CCID ドライバのインストール例。

CCID スマートカードドライバがインストールされた出力

OpenSC のインストール完了画面。

OpenSC ツールが IPFire システムにインストールされた確認


トラブルシューティング(よくある問題と対処)

  1. configure が pcsc-lite を検出しない

    • 対処: PCSC_CFLAGS を明示的に指定し、PKG_CONFIG_PATH に /usr/local/lib/pkgconfig(またはインストール場所)を追加する。
    • 追加確認: libpcsclite.pc が存在するか、pkg-config –modversion libpcsclite で確認。
  2. rootfiles に + が含まれる

    • 対処: sed で + を削除してから再ビルド。
  3. udev ルールが反映されない

    • 対処: /etc/udev/rules/ 配置後に udevadm control –reload && udevadm trigger を実行する。デバイスが正しい権限で作成されているか確認。
  4. pcscd が起動しない/リーダーを認識しない

    • 対処: pcscd をデバッグモードで起動してログを確認(-f -d オプションなど)。USB デバイスが /dev/bus/usb に表示されるか lsusb で確認。
  5. PKCS#11 が期待どおり動作しない(OpenSC 経由)

    • 対処: pkcs11-tool や opensc-tool でカード情報が取得できるか検証。権限(カードへのアクセス)や PIN 周りを確認。

チェックリスト(導入前・導入後)

デベロッパー向け(ビルド準備)

  • IPFire の LFS シェルに入れることを確認
  • 必要なビルドツール(gcc, make, pkg-config)を確認
  • pcsc-lite, ccid, opensc のソースを /usr/src/cache に配置
  • make.sh と lfs スクリプトを更新済み

パッケージ作成者向け

  • rootfiles を config/rootfiles/packages に配置
  • rootfiles の余分な文字を削除
  • src/paks/ に install.sh, uninstall.sh, update.sh を用意
  • packages/.ipfire が生成されることを確認

システム管理者向け(実稼働適用前)

  • テスト環境でカードリーダーの動作確認を完了
  • udev ルールと権限を確認
  • pcscd と pkcs11 モジュールのログ確認
  • ロールバック手順を用意(パッケージの uninstall.sh)

受け入れ基準

  • pcscd が起動し、USB リーダーを検出する
  • pkcs11-tool でカードの情報が取得できる
  • パッケージは packages ディレクトリに .ipfire として生成される
  • install.sh を使って稼働環境に導入できる
  • uninstall.sh で問題なく削除できる

ミニ SOP(開発→パッケージ→配布の簡易手順)

  1. LFS シェルで各ソースをビルドしてインストール(pcsc-lite → ccid → opensc)
  2. 各 rootfile を log から config/rootfiles/packages にコピーし修正
  3. src/paks/ に install/uninstall/update スクリプトを準備
  4. ./make.sh build を実行して .ipfire を生成
  5. /opt/pakfire/tmp にコピーして稼働機で展開、./install.sh を実行

スキャンしやすいトラブル診断フローチャート(Mermaid)

flowchart TD
  A[configure に失敗] --> B{エラーメッセージ}
  B -->|libpcsclite not found| C[PKG_CONFIG_PATH を確認]
  B -->|header not found| D[PCSC_CFLAGS を指定]
  C --> E[export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig]
  D --> F[./configure PCSC_CFLAGS=-I/usr/local/include/PCSC]
  E --> G[再実行 ./configure]
  F --> G
  G --> H{成功?}
  H -->|はい| I[make && make install]
  H -->|いいえ| J[ログを確認して依存を追加]

テストケース(受け入れ試験)

  • ケース 1: pcscd を起動し、lsusb でリーダーが見える → pkcs11-tool でカードを読み取る
  • ケース 2: udev ルールを適用後、カード抜き差しで /dev/ に適切なノードが作成される
  • ケース 3: pakfire パッケージを使ってインストール/アンインストールを行い、状態が復元される

注意事項とベストプラクティス

  • 実稼働 IPFire に直接適用する前に、同一バージョンのテスト環境で十分に検証すること。
  • スマートカードの PIN や鍵管理は厳格に運用し、キーのバックアップ・失効手順を整備すること。
  • 標準の udev ルールで不足するベンダー固有のデバイスは、ベンダー提供の情報を参照して追加ルールを作成する。

まとめ

本稿では IPFire 2.19 の開発環境で pcsc-lite、CCID、OpenSC をビルドし、pakfire 形式で配布する一連の手順を詳述しました。重要なのは依存関係(特に pcsc のヘッダ/pkg-config 情報)を正しく参照させること、rootfiles の整備、udev ルールの配置と動作確認です。導入後は pkcs11 ツール群で動作検証し、カードの種類やベンダーごとの差分に注意してください。

重要: この手順は IPFire のビルドフローと内部構造に依存しています。IPFire の将来のバージョンや各ツールの新しいリリースでは手順が変わる可能性があります。

共有する: X/Twitter Facebook LinkedIn Telegram
著者
編集

類似の素材

Debian 11 に Podman をインストールして使う
コンテナ

Debian 11 に Podman をインストールして使う

Apt-pinning入門:Debianで複数リポジトリを管理
Linux

Apt-pinning入門:Debianで複数リポジトリを管理

OptiScalerでFSR 4を全対応ゲームに導入する方法
ゲーム

OptiScalerでFSR 4を全対応ゲームに導入する方法

Dansguardian と Squid(NTLM)を Debian Etch に導入する方法
ネットワーク

Dansguardian と Squid(NTLM)を Debian Etch に導入する方法

AndroidでSDカードのインストールエラーを修正する方法
トラブルシューティング

AndroidでSDカードのインストールエラーを修正する方法

KNetAttach と KDE の remote:/ でネットワークフォルダーを設定
Linux ネットワーク

KNetAttach と KDE の remote:/ でネットワークフォルダーを設定