解决linux howdy无法保存snapshots

问题

howdy是linux上的一款人脸识别解锁软件,对标windows hello。

我在archlinux上使用了差不多两年了,但始终遇到一个问题:配置文件中的snapshots选项有时无法起作用。该选项用于在认证成功或失败时保存照片。更进一步的实验发现,用于kde解锁锁屏时snapshots无效,但用于polkit、systemd时则有效。

原因

我通过直接修改和debug /usr下的howdy python文件发现了原因。

snapshots的保存路径默认是/var/log/howdy/snapshots,但写入权限只有root才有。而howdy的保存程序的运行主体又与被验证程序有关,例如kde解锁时是以用户身份来保存的,而polkit时则是以root身份来保存的,故造成了kde解锁时无法保存snapshots的问题。

解决

我的解决思路是修改保存路径,该路径必须在编译howdy前设置,因此必须下载git型的软件包,然后更改构建命令,具体操作如下。

首先安装软件包,同时修改其PKGBUILD(如果你已经安装了的话,就删除之前编译好的包,然后直接修改吧):

paru -S howdy-beta-git --fm nvim

如果你是用的yay的话则是:

yay -S howdy-beta-git --editmenu

然后在build()中添加修改命令:

build() {
    # 使用 sed 正则表达式替换 log_path 选项中的 value 值
    sed -E -i "s/(option\('log_path'.*value: ')[^']*('.*)/\1\/home\/<USER>\/.local\/share\/howdy\2/" $srcdir/howdy/meson.options

    arch-meson $srcdir/howdy build -Dinstall_pam_config=true -Ddlib_data_dir="/etc/howdy/dlib-data"
    meson compile -C build
}

记得把上面的<USER>换成你的用户名,之后就是正常编译安装,然后就可以在/etc/howdy/config.ini中设置snapshots的相关选项了。

最后为了让PKGBUILD的更改在以后的包更新时保留,你可以用git添加变更。在AUR下载的目录中,例如~/.cache/paru/clone/howdy-beta-git下运行:

git add PKGBUILD
git commit -m 'chore: change log path'

安全性

howdy-archwiki中有提到,snapshot可能会引入安全漏洞。例如,如果你设置了capture_successful = true,那么得到用户权限的攻击者能够访问你解锁成功的画像,并进而用howdy来得到更多的权限。

不过我是只设置了capture_failed = true,这样就不会保存成功解锁的面部图像,相对比较安全。你也可以定期清除保存图像,或是通过自动化命令来完成这一点。

snapshots的另一个好处在于,如果有攻击者尝试访问我的电脑但识别失败,我们还可以及时发现攻击者是谁。