5.2. 排除与 PC/SC 和 polkit 相关的问题
安装 pcsc-lite
软件包并启动 pcscd
守护进程后自动强制的 polkit 策略,即使用户没有与智能卡直接交互也会在用户会话中要求身份验证。在 GNOME 中,您可以看到以下错误信息:
Authentication is required to access the PC/SC daemon
请注意,当安装与智能卡相关的其他软件包(如 opensc
)时,系统会将 pcsc-lite
软件包作为依赖项安装。
如果您的场景不需要与智能卡进行任何交互,并且您希望阻止 PC/SC 守护进程的授权请求,您可以删除 pcsc-lite
软件包。尽可能保持所需软件包的最小安装是良好的安全实践。
如果您使用智能卡,请通过检查 /usr/share/polkit-1/actions/org.debian.pcsc-lite.policy
中系统提供的策略中的规则来进行故障排除。您可以将自定义规则文件添加到 /etc/polkit-1/rules.d/
目录中的策略中,例如 03-allow-pcscd.rules
。请注意,规则文件使用 JavaScript 语法,策略文件采用 XML 格式。
要了解系统显示的授权请求,请检查 Journal 日志,例如:
$ journalctl -b | grep pcsc
...
Process 3087 (user: 1001) is NOT authorized for action: access_pcsc
...
前面的日志条目表示用户没有被授权根据策略执行操作。您可以通过在 /etc/polkit-1/rules.d/
中添加相应的规则来解决此拒绝。
您还可以搜索与 polkitd
单元相关的日志条目,例如:
$ journalctl -u polkit
...
polkitd[NNN]: Error compiling script /etc/polkit-1/rules.d/00-debug-pcscd.rules
...
polkitd[NNN]: Operator of unix-session:c2 FAILED to authenticate to gain authorization for action org.debian.pcsc-lite.access_pcsc for unix-process:4800:14441 [/usr/libexec/gsd-smartcard] (owned by unix-user:group)
...
在前面的输出中,第一个条目表示规则文件中包含一些语法错误。第二个条目表示用户未能获得对 pcscd
的访问权限。
您还可以通过一个简短的脚本列出使用 PC/SC 协议的所有应用程序。创建一个可执行文件,如 pcsc-apps.sh
,然后插入以下代码:
#!/bin/bash cd /proc for p in [0-9]* do if grep libpcsclite.so.1.0.0 $p/maps &> /dev/null then echo -n "process: " cat $p/cmdline echo " ($p)" fi done
以 root
身份运行脚本:
# ./pcsc-apps.sh
process: /usr/libexec/gsd-smartcard (3048)
enable-sync --auto-ssl-client-auth --enable-crashpad (4828)
...
其它资源
-
journalctl
,polkit(8)
,polkitd(8)
和pcscd(8)
手册页。