ThinkFinger

出自 ArchWiki

ThinkFinger 是用于老式 IBM/Lenovo ThinkPad 中 SGS Thomson Microelectronics 指纹读取器的驱动程序。

ThinkWiki 有一个ThinkPad 中各种指纹读取器的列表。使用不同读取器的新型号可能无法与 ThinkFinger 配合使用。

安装

安装 thinkfingerAUR 软件包。

配置

需要加载 uinput 模块。

TF-Tool

使用 tf-tool 测试 ThinkFinger。您必须以 root 身份运行此命令,因为需要直接访问 USB 设备。运行 tf-tool --acquire 以在 /etc/pam_thinkfinger/test.bir 生成文件,并运行 tf-tool --verify 以查看它是否能正确识别您。tf-tool --add-user <username> 获取您的指纹并将其存储在 /etc/pam_thinkfinger/<username>.bir 中,这是使用 PAM 进行身份验证所必需的。

PAM

参见 PAM

/etc/pam.d/login

如果您想使用指纹在登录时进行身份验证,请更改 /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 命令

/etc/pam.d/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
提示: 不要忘记执行 tf-tool --add-user root 以使用此功能。

/etc/pam.d/sudo

更改此文件以使用指纹滑动确认 sudo 命令

/etc/pam.d/su
#%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

此文章或章节的真实准确性存疑。

原因: 修改 /usr/bin/ 中的文件不是一个好主意,因为这些更改会在更新时被覆盖(在 Talk:ThinkFinger 中讨论)

XScreensaver 有点棘手。首先,使用包含以下内容的文件 /etc/pam.d/xscreensaver 配置 PAM

/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

将您想要能够使用指纹读取器解锁 Xscreensaver 的用户添加到该组

# gpasswd -a <user> fingerprint

注销并重新登录以使更改生效。

接下来,在您的 udev 规则目录中搜索 uinputbus/usb

$ 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"

将您在上一步中使用 grep 找到的行复制到新的 udev 规则文件

/etc/udev/rules.d/99fingerprint.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"

/etc/udev/rules.d/99fingreprint.rules 中的规则与 /etc/udev/rules.d/udev.rules 中的规则之间的区别应该仅在于在行尾添加了 MODE="0664", GROUP="fingerprint"MODE="0660", GROUP="fingerprint"

添加自定义 udev 规则后,您应该授予您的用户访问他们自己的指纹文件的权限

$ chown $USERNAME:root /etc/pam_thinkfinger/$USERNAME.bir
$ chmod 400 /etc/pam_thinkfinger/$USERNAME.bir
$ chmod o+x /etc/pam_thinkfinger
注意: 最后一个命令正在为所有人开放目录的执行权限,请注意这可能带来的安全隐患。

最后一步,您需要删除 /usr/bin/xscreensaver 的 root setuid,否则 Xscreensaver 将无法使用指纹读取器解锁

# chmod -s /usr/bin/xscreensaver

/etc/pam.d/gdm

编辑 /etc/pam.d/gdm 并在顶部添加以下行

/etc/pam.d/gdm
auth		sufficient 	pam_thinkfinger.so

然后修改 auth required pam_unix.so 使其看起来像这样

/etc/pam.d/gdm
auth		required	pam_unix.so use_first_pass nullok_secure

/etc/pam.d/xdm

编辑 /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

/etc/pam.d/slim

追加 以下内容到 /etc/pam.d/slim

/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

现在重启 SLiM,您可以使用指纹识别器登录。

其他指纹读取器软件

Fprint 是一款替代指纹读取器软件,可用于某些较新的 ThinkPad 指纹读取器。

参见