ThinkFinger
関連記事
ThinkFinger は旧式の IBM/Lenovo ThinkPad に搭載されていた SGS Thomson Microelectronics 製の指紋リーダーのドライバーです。
ThinkWiki には ThinkPad に搭載されている 様々な指紋リーダーのリスト があります。新しい機種では別のリーダーを使っているため ThinkFinger では動作させることができません。
目次
インストール
公式リポジトリから thinkfinger をインストールしてください。
設定
TF-Tool
ThinkFinger をテストするには tf-tool を使います。tf-tool は USB デバイスに直接アクセスするため、root で実行する必要があります。tf-tool --acquire
を実行すると test.bir
が生成されるので tf-tool --verify
で正しく認証できているか確認してください。tf-tool --add-user <username>
で (pam での認証に必要な) /etc/pam_thinkfinger/username.bir
にあなたの指紋を取得・保存します。
Pam
PAM は Sun によって開発された Pluggable Authentication Module です。
/etc/pam.d/login
ログイン時に指紋をつかって認証したい時は /etc/pam.d/login
ファイルを以下のように変更してください:
#%PAM-1.0 auth sufficient pam_thinkfinger.so auth required pam_unix.so use_first_pass nullok_secure account required pam_unix.so password required pam_unix.so session required pam_unix.so
/etc/pam.d/su
このファイルを変更することで指紋で su
コマンドの認証ができます:
#%PAM-1.0 auth sufficient pam_rootok.so auth sufficient pam_thinkfinger.so auth required pam_unix.so nullok_secure try_first_pass account required pam_unix.so session required pam_unix.so
/etc/pam.d/sudo
このファイルを変更することで指紋で sudo
コマンドの認証ができます:
#%PAM-1.0 auth sufficient pam_thinkfinger.so auth required pam_unix.so nullok_secure try_first_pass auth required pam_nologin.so
/etc/pam.d/xscreensaver
XScreensaver は多少厄介です。まず、/etc/pam.d/xscreensaver
ファイルを以下のように設定してください:
auth sufficient pam_thinkfinger.so auth required pam_unix_auth.so try_first_pass
ただし、これだけでは xscreensaver が /dev/misc/uinput
や /dev/bus/usb*
を読み書きできないため上手く動作しません。新しいグループに読み書き権限を与える udev ルールを設定する必要があります。
まず、新しいグループを作ります。ここでは "fingerprint" を使います:
# groupadd fingerprint
Add the user you want to be able to unlock xscreensaver with the fingerprint reader to the group:
# gpasswd -a <user> fingerprint
Don't forget to logout and login again!
Search for "uinput" and "bus/usb" in your udev rules directory :
$ grep -in uinput /etc/udev/rules.d/* /etc/udev/rules.d/udev.rules:222:KERNEL=="uinput", NAME="misc/%k", SYMLINK+="%k" /etc/udev/rules.d/udev.rules:263:KERNEL=="uinput", NAME="input/%k"
$ grep -in "bus/usb" /etc/udev/rules.d/* /etc/udev/rules.d/udev.rules:318:SUBSYSTEM=="usb_device", ACTION=="add", PROGRAM="/bin/sh -c 'K=%k; K=$${K#usbdev};printf bus/usb/%%03i/%%03i $${K%%%%.*} $${K#*.}'", NAME="%c", MODE="0664" /etc/udev/rules.d/udev.rules:320:SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", MODE="0664"
Now copy the previous lines (222, 318 and 320 from /etc/udev/rules.d/udev.rules) to a new udev rules file. I suggest /etc/udev/rules.d/99my.rules
KERNEL=="uinput", NAME="misc/%k", SYMLINK+="%k", MODE="0660", GROUP="fingerprint" SUBSYSTEM=="usb_device", ACTION=="add", PROGRAM="/bin/sh -c 'K=%k; K=$${K#usbdev};printf bus/usb/%%03i/%%03i $${K%%%%.*} $${K#*.}'", NAME="%c", MODE="0664", GROUP="fingerprint" SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", MODE="0664", GROUP="fingerprint"
The difference between the rules in /etc/udev/rules.d/99my.rules and those in /etc/udev/rules.d/udev.rules should only be the addition of MODE="0664", GROUP="fingerprint" or MODE="0660", GROUP="fingerprint" at the end of the lines.
After this you must actually give your user permissions to access his own fingerprint file, this can be done as in the following:
# chown $USERNAME:root /etc/pam_thinkfinger/$USERNAME.bir # chmod 400 /etc/pam_thinkfinger/$USERNAME.bir # chmod o+x /etc/pam_thinkfinger
Yes that last one is opening up a directory for execution to everyone so if you are super paranoid you might consider that a security flaw, just putting the warning out there.
The last part is about xscreensaver. If you check xscreensaver file, you will see it is setuid to root :
$ ls -l /usr/bin/xscreensaver -rwsr-sr-x 1 root root 217K aoû 2 20:47 /usr/bin/xscreensaver
Because of this, xscreensaver wont be able to unlock with the fingerprint reader. You need to remove the setuid root with :
# chmod -s /usr/bin/xscreensaver $ ls -l /usr/bin/xscreensaver -rwxr-xr-x 1 root root 217K aoû 2 20:47 /usr/bin/xscreensaver
That's it!
/etc/pam.d/gdm
[I am not an expert in PAMs but this works, This section may need corrections]
/etc/pam.d/login や /etc/pam.d/su と同じように /etc/pam.d/gdm
を編集します:
ファイルの先頭に以下を追加:
auth sufficient pam_thinkfinger.so
以下の行を:
auth required pam_unix.so
次のように変更:
auth required pam_unix.so use_first_pass nullok_secure
/etc/pam.d/xdm
/etc/pam.d/xdm
を以下のように編集してください:
#%PAM-1.0 auth sufficient pam_thinkfinger.so auth required pam_unix.so use_first_pass nullok_secure auth required pam_nologin.so auth required pam_env.so account required pam_unix.so password required pam_unix.so session required pam_unix.so session required pam_limits.so
SLiM
To have thinkfinger support for the SLiM Login Manager you need to activate PAM support:
Get the package source of the slim package from ABS and change the "make" line in the PKGBUILD:
make USE_PAM=1 || return 1
Rebuild the package and install it.
Then create a file /etc/pam.d/slim:
#%PAM-1.0 auth sufficient pam_thinkfinger.so auth requisite pam_nologin.so auth required pam_env.so auth required pam_unix.so account required pam_unix.so session required pam_limits.so session required pam_unix.so password required pam_unix.so
Now restart slim and swipe your finger.
他の指紋リーダーソフトウェア
別の指紋リーダーソフトウェアとして Fprint が存在し、新しい ThinkPad の指紋リーダーを使うことができる場合があります。
参照
- http://www.thinkwiki.org/wiki/Talk:How_to_enable_the_fingerprint_reader
- http://thinkfinger.sourceforge.net/
- https://bbs.archlinux.org/viewtopic.php?id=36134
- http://www.thinkwiki.org/wiki/How_to_enable_the_fingerprint_reader_with_ThinkFinger
- http://www.thinkwiki.org/index.php?title=Installing_Ubuntu_6.06_on_a_ThinkPad_T43#Fingerprint_Reader