📇

Podmanコンテナでpcsc_toolsを動かす

2022/06/06に公開

まえがき

  • めちゃくちゃハマったので方法をメモしておく。

前提

  • USB接続のsmartcardリーダー
  • podman (dockerの場合は多分こんな苦労をしなくても動く)

理屈

  • Smartcardリーダーはデバイスとして /dev 以下にわかりやすい名前でマップされない
  • /dev/bus/usb 以下にデバイスファイルとしてマップされる。(例: /dev/bus/usb/001/009)
  • デバイスファイルのパスは、USBの接続した場所等で変わる。
  • デバイスファイルの権限は crw-rw-r-- 1 root root なのでrootユーザーしか書き込みができない。

how to

  • デバイスファイルの権限を変更すれば良い。そのためには udevルールを書く必要がある
  • udevルールは nn-xxxxxxxxx.rules というファイル名にする。nnは読み込み順、xxxxは任意
  • udevルールは /etc/udev/rules.d/ に置く必要がある
  • 追加・更新後は、とりあえず sudo udevadm control --reload しておく。(自動的に反映されるらしい)

udevルールファイルの例

以下は、Gemaltのリーダーの場合の例。
以下の例では、カードリーダーを video グループのユーザーにも使えるようにしている。

SUBSYSTEM=="usb", ATTRS{idVendor}=="08e6", ATTRS{idProduct}=="3437", GROUP="video", MODE="0660"

idVendor, idProductは lsusb コマンドで調べることができる
例えば、以下の例だと、 idVendor=05fc idProduct=0231 である。

Bus 003 Device 004: ID 05fc:0231 Harman JBL Pebbles

確認

ls -l /dev/bus/usb

/dev/bus/usb/001:
total 0
crw-rw-r-- 1 root root  189,  0 Jun  6 18:17 001
crw-rw-r-- 1 root root  189,  1 Jun  6 18:17 002
crw-rw-r-- 1 root root  189,  2 Jun  6 18:17 003
crw-rw-r-- 1 root root  189,  3 Jun  6 18:17 004
crw-rw-r-- 1 root root  189, 18 Jun  6 18:17 019
crw-rw---- 1 root video 189, 19 Jun  6 18:17 020   <==== 所有グループが video になった

Discussion