请教一个关于 PAM 的问题

我按照 3v1n0 的教程弄好了 T460s 笔记本上的指纹识别, 也用 validity-sensors-tools 激活了设备。然后现在 fprintd 录入了指纹。这些都正常工作。

并且我通过 pam-config 把指纹加入了 common-auth 中。确切地说我的 /etc/pam.d/common-auth 是

auth    required        pam_env.so
auth    sufficient      pam_fprintd.so
auth    required        pam_unix.so     try_first_pass

这个文件夹的其他配置文件我没有改动。目前登录,解锁,或者终端里打 sudo, su, 以及点一些带有 xdg-su 的图形界面程序图标 (比如 yast) 都可以使用指纹识别了。不过要求输入密码的那个弹窗不会再出现了(这应该是 pam_fprintd.so 在 pam_unix 前面的原因)。

而且终端里打 sudo, su 都只用按一次指纹,但是 不知为什么 xdg-su(我查看了启动器里的 yast 的 desktop 文件中的 Exec 发现命令是 xdg-su -c …)的这种方式启动应用程序,我需要按两次指纹。第一次按完,指示灯闪一下,然后又再次亮起。

然后我用同样的命令在 konsole 里输入进行测试,发现第一次按完指纹之后,终端输出
Don’t need password!!
然后按第二次指纹,才正常启动程序,这是什么原因呢?(需要怎么配置 pam 比较合适)

查了一下关于 pam 的文档。以及 pam stack 不是很明白 xdg-su 为什么会出现这种情况。

猜想 xdg-su 这种使用方式的配置文件是 /etc/pam.d/su ? 这个文件确实有点不一样

#%PAM-1.0
auth     sufficient     pam_rootok.so
auth     include        common-auth
account  sufficient     pam_rootok.so
account  include        common-account
password include        common-password
session  include        common-session
session  optional       pam_xauth.so

排在第一的是 pam_rootok.so, 所以如果是 root 用户了,那么可以直接通过验证。但是接下来还是 include common-auth. 所以不应该有什么差别才对。难道说 xdg-su 这种用法,需要配置的不是 /etc/pam.d/su


另外,我还安装过 fingerprint-gui 但是那个貌似也遇到了一些问题, 无法弹出图形界面的提示按指纹的窗口。只用 pam-fprintd 话也不会有图形界面的提示,但是指纹识别指示灯会亮,到也还 ok 了。

xdg-su 就是个 wrapper,最终还是调用 gnomesu 或 kdesu…

最终都会调用 su 或者 sudo,对应的 pam config 在 /usr/lib/pam.d

谢谢! 不过我的系统上 pam 配置文件在 /etc/pam.d, 里面只有这些文件。

其中 KDE 内容是

#%PAM-1.0
# This service is only used by kcheckpass for unlocking,
# so only auth is really relevant here.
auth     include        common-auth
account  include        common-account
password include        common-password
session  required       pam_loginuid.so
session  include        common-session

也是第一个 include common-auth。 和 sudo 类似

#%PAM-1.0
auth     include        common-auth
account  include        common-account
password include        common-password
session  optional       pam_keyinit.so revoke
session  include        common-session
# session  optional       pam_xauth.so

su 的内容则是

#%PAM-1.0
auth     sufficient     pam_rootok.so
auth     include        common-auth
account  sufficient     pam_rootok.so
account  include        common-account
password include        common-password
session  include        common-session
session  optional       pam_xauth.so

不过终端里打 sudo , 或者 su 都只需要按一次指纹。

盲猜第一次是给 gnomesu 或 kdesu 的,第二次它才真正接管(毕竟你说了只有 xdg-su 这样),你可以试试终端去 kdesu konsole…

kdesu command 的现象和 xdgsu -c command 一样,也是需要两次指纹验证。(奇怪~)

你运行一下 kdesu -d -t konsole 看看吧,这样可以绕过 checkNeedPassword() 还有 debug 输出。我看到有人说 kdesu 是有 daemon 的,会调用两次,第一次就是检查可不可以直接用上次的 password,第二次才是真正的运行程序。

还是一样的情况。不太清楚原因了

不过我留意到一些现象。在重点用 sudo, su 提权的时候,终端会提示 Place your finger on fingerprint reader.

但是在终端执行 kdesu command 的时候并不提示这句,而是指示灯直接亮起。

可能还是因为 kdesu 就是用于 gui 程序的,所以看不到的缘故,或者其他原因。

谢谢啦~