FreeBSD On ThinkPad X60
Finger Print |
ThinkPad X60 内蔵の指紋認証を利用する。
ThinkPad X60 に搭載されている指紋認証デバイスは、 FreeBSD から ugen0 として認識されるので使ってみる。
こちらのペイジに詳しい事が書いてあるので、 この通りにすれば基本的に使える様になる筈である。
指紋認証デバイスのドライバは FreeBSD 用のものが バイナリ配布ながら提供されているので、 ドライバ、及び生体認証に必要な PAM モジュールを ports からインストールする。
まず生体認証情報を格納するためのデータベースが 正しくインストールされたかを確認する。
次に指紋認証デバイスのドライバが正しくインストールされたかを確認する。
こののパッチを適用すると -i オプションにより、 指紋認証のリトライ回数を指定可能となる。
リトライ回数は /etc/pam.d/system 内の pam_bsdbioapi.so に対する引数で -iにより指定する。
ThinkPad X60 に搭載されている指紋認証デバイスは、 FreeBSD から ugen0 として認識されるので使ってみる。
こちらのペイジに詳しい事が書いてあるので、 この通りにすれば基本的に使える様になる筈である。
ugen0: STMicroelectronics Biometric Coprocessor, rev 1.00/0.01, addr 2実際は普通にパスワード入力した方が楽で早かったりする……
ソフトウェアのインストール
指紋認証による認証は PAM 経由で利用する。指紋認証デバイスのドライバは FreeBSD 用のものが バイナリ配布ながら提供されているので、 ドライバ、及び生体認証に必要な PAM モジュールを ports からインストールする。
# cd /usr/ports/security/bsp_upektfmess # make install clean # cd /usr/ports/security/pam_bsdbioapi # make install clean
設定
生体認証用の PAM モジュールは認証情報を格納するためのデータベースを- filebacked database
- MySQL database
- Plain text database
まず生体認証情報を格納するためのデータベースが 正しくインストールされたかを確認する。
# bbdm -l birdb Installed BIRDB modules filedb Filebacked database (b-tree) plain Plain text fileここで filedb が表示されればデータベースとして filedb が利用可能。
次に指紋認証デバイスのドライバが正しくインストールされたかを確認する。
# bbdm -l bsp UUID {ffffffff-ffff-ffff-ffff-ffffffffffff} Example Vendor libbioapi_dummy100.so (BioAPI v1.1 Dummy BSP) UUID {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} BioAPI Consortium libpwbsp.so (BioAPI Password BSP) UUID {YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY} UPEK, Inc. libtfmessbsp.so (TouchChip TFM/ESS Fingerprint BSP)一番下に表示されたのが指紋認証ユニットなので、 表示された UUID を指定して指紋を登録する。
# bbdm -b "{YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY}" -m filedb -c ユーザID enrollment start Put finger [指紋登録1回目] Image processing Put finger 2nd time [指紋検証2回目] Image processing Put finger 3rd time [指紋検証3回目] Image processing Scanned good image Operation succeeded Please verify record Verification start Put finger [指紋検証] Image processing Scanned good image Operation succeeded Record for ``ユーザID'' created successfully指紋の登録を3回、検証用に1回の合計4回指紋を読込ませると登録完了。
PAM の登録
/etc/pam.d/system ファイルに生体認証モジュールを追加する。auth sufficient /usr/local/lib/pam_bsdbioapi.so {YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY} filedb auth required pam_unix.so no_warn try_first_pass nullok最下段の直上に pam_bsdbioapi.so のエントリを追加する。 sufficient と指定する事により指紋認証でダメな場合でも、 通常通りパスワード認証にてログインできるよう設定する。
トラブルシューティング
bbdm を実行すると、カーネルがエラーメッセージを吐いてしまう。All threads purged from ugen0.1 All threads purged from ugen0.2 All threads purged from ugen0.3 :既知の問題の様なので このペイジ を参考にして /usr/src/sys/kern/kern_conf.c に以下のパッチを適用する。
--- /usr/src/sys/kern/kern_conf.c Thu Oct 6 11:17:41 2005 +++ kern/kern_conf.c Thu May 4 19:59:30 2006 @@ -660,14 +660,15 @@ csw = dev->si_devsw; dev->si_devsw = NULL; /* already NULL for SI_ALIAS */ - while (csw != NULL && csw->d_purge != NULL && dev->si_threadcount) { - printf("Purging %lu threads from %s\n", - dev->si_threadcount, devtoname(dev)); - csw->d_purge(dev); - msleep(csw, &devmtx, PRIBIO, "devprg", hz/10); - } - if (csw != NULL && csw->d_purge != NULL) + if (csw != NULL && csw->d_purge != NULL && dev->si_threadcount) { + while (dev->si_threadcount) { + printf("Purging %lu threads from %s\n", + dev->si_threadcount, devtoname(dev)); + csw->d_purge(dev); + msleep(csw, &devmtx, PRIBIO, "devprg", hz/10); + } printf("All threads purged from %s\n", devtoname(dev)); + } dev->si_drv1 = 0; dev->si_drv2 = 0;次に login プロセスが setusercontext(3)の呼出しで Segmentation Violation を発生しエラーとなってしまうが、 libutil を static link して/usr/bin/login を コンパイルし置き換える事で解決した。
# cd /usr/src/usr.bin/login # cc login.c login_fbtab.c /usr/lib/libutil.a -lbsm -lpam -o login # chflags noschg /usr/bin/login # cp login /usr/bin # chflags chg /usr/bin/login果たしてこの解決方法が正しいのかは不明であるが、 とりあえず指紋認証によりログインできているので良しとする。
微調整
指紋認証の認識レベルを /etc/tfmessbsp.cfg ファイルで指定できる。 認識レベルの指定は security-level パラメタで指定するが、 1 が一番誤差を許容し、5が一番誤差を許容しない。security-level="1"ただし、認識レベルをあげる(=数値を小さくする)と、 認証処理に時間がかかってしまう様だ。
リトライ回数設定
指紋認証は1度失敗すると通常のパスワード入力になってしまうので、 指紋入力のリトライ回数を指定できる パッチを作ってみた。こののパッチを適用すると -i オプションにより、 指紋認証のリトライ回数を指定可能となる。
リトライ回数は /etc/pam.d/system 内の pam_bsdbioapi.so に対する引数で -iにより指定する。
auth sufficient /usr/local/lib/pam_bsdbioapi.so {YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY} filedb -i 3
Copyright © 2007-2010 Mitzyuki IMAIZUMI,
All Rights Reserved.
Last Update: 14 Apr. 2010