blog/source/_posts/set-up-sudo-with-howdy-on-fedora-34-for-faical-authenticating.md
2021-08-21 18:56:54 +08:00

108 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 在Fedora 34上通过Howdy为sudo增加人脸识别认证
date: 2021-07-10 22:34:29
tags:
- Linux记
- 生命很短
- logbook
---
今天晚上折腾了一个小时,终于把 Howdy 折腾出来了,写篇博文作笔记以备查。
[Howdy](https://github.com/boltgolt/howdy) 是一个为 Linux 提供 Windows Hello 风格验证的软件,它作为一个 PAM 模块为其它软件提供人脸验证服务。不像 Windows Hello 需要认证过的IR摄像头 Howdy 基本上只要是个摄像头都可以使用。当然,如果没有 IR ,低光环境下的识别率就很拼摄像头的素质了。
这篇博文主要内容是给 sudo 弄 Howdysudo 老是让人输密码着实令人烦躁,但是我又不想取消所有认证,正好 Howdy 的需求很低(只需要一个摄像头)。
<!--more-->
我机器上使用的发行版是 Fedora 3464 位。
## 安装Howdy
只需要跟随 Howdy 项目的 README 里的步骤就可以安装 Howdy 了:
````shell
sudo dnf copr enable luya/howdy
sudo dnf install howdy
````
然后就按照 README 上面的说法执行 `sudo howdy add` 添加面孔,然后就看见显示 `pip3 show dlib` 之类的错误信息,意思是找不到 dlib 。这个 copr 仓库里的包没有把 dlib 作为依赖,得自己安装。
可以用 `sudo dnf install python-dlib` 安装dlib。也可以用pip安装 `sudo pip install dlib` ,但是编译的时候肯定会卡几分钟,并且大概会占用 2-3GB 左右的内存。
接下来再次运行 `sudo howdy add` ,它会抱怨摄像头路径还没配置好:
````
[sudo] password for ***:
Adding face model for the user ***
Enter a label for this new model [Initial model] (max 24 characters):
Camera path is not configured correctly, please edit the 'device_path' config value.
Exception ignored in: <function VideoCapture.__del__ at 0x7f855eeb1b80>
Traceback (most recent call last):
File "/usr/lib64/security/howdy/recorders/video_capture.py", line 55, in __del__
self.internal.release()
AttributeError: 'VideoCapture' object has no attribute 'internal'
````
运行 `sudo howdy config` 来打开配置,默认情况下会使用 GNU nano 作为编辑器。找到 `device_path = ` 这一行我们要设置的就是这个值。但是怎么知道是哪个路径呢我用的是VLC里面的"Open Capture Device...":将"Capture mode"设为"Video camera",在"Video device name"的下拉菜单里面的选项选择一个,点"Play"。一个一个地尝试不同的选项,哪个有画面就是哪个路径。在我的机器上,这个路径是 `/dev/video0` ,最后就是 `device_path = /dev/video0`
{% img /img/set-up-sudo-with-howdy-on-fedora-34-for-faical-authenticating/vlc-open-capture-device.png "图片里的最后一个选项Open Capture Device...,点击之后会打开一个窗口"%}
配置好之后运行 `sudo howdy add`增 加面孔,这下能够顺利增加了!增加完面孔可以用 `sudo howdy test` 打开测试窗口进行测试。
## 配置PAM
PAM ,或者叫 Pluggable Authentication Module ,是一个中心化的身份验证服务。[这里有一篇对PAM的介绍](https://www.redhat.com/sysadmin/pluggable-authentication-modules-pam)。
参考 [Arch Wiki上的Howdy词条](https://wiki.archlinux.org/title/Howdy),要配置 sudo 的验证时行为,只需要修改 `/etc/pam.d/sudo` ,在原先的第二行前面再加一行:
````
auth sufficient pam_python.so /lib64/security/howdy/pam.py
````
这里用`/lib64`替换了 Arch Wiki 词条上的`/lib`,是因为提供给 Fedora 的这个包把这些文件安装到`/lib64`而不是`/lib`,这个地方各个发行版可能都有不同的规则。
PAM 的配置在修改后会自动应用。现在我们可以试试使用`sudo -i`看看有没有调用人脸识别:
````
[sudo] password for ***:
````
事情变得奇妙了起来……Howdy 并没有被调用。这说明 PAM 配置哪里出了问题,读一读跟 PAM 有关的日志:
````
sudo journalctl -g pam -r
````
然后发现了奇妙的错误:
````
PAM adding faulty module: /lib/security/pam_python.so
PAM unable to dlopen(/lib/security/pam_python.so): /lib/security/pam_python.so: cannot open shared object file: No such file or directory
````
原来是找不到指定的 pam_python.so 这个 PAM 模块(用来调用 Howdy 的 pam.py Howdy 提供的 pam.py 是一个 Python 文件)。
还好 [luya/howdy Copr仓库](https://copr.fedorainfracloud.org/coprs/luya/howdy/) 下的评论给我找到了一个简单的出路:根据 [RPM Sphere网站] 上的流程安装了 RPM Fusion 和 RPM Sphere 这两个第三方软件源之后,可以在 RPM Sphere 这个软件源上找到`pam_python`这个包:
````
sudo dnf install pam_python
````
然后就可以愉悦地使用了!
````
sudo -i
````
## 使用pamtester测试
[Pamtester](http://pamtester.sourceforge.net/) 可以测试 PAM 的指定验证服务,这样要检查 Howdy 是否生效或者单纯享受人脸识别(大雾)就很简单啦。
````
sudo dnf install pamtester
````
在这篇文章的例子里只需要(用要验证的用户的用户名代替`<用户名>`
````
pamtester sudo <用户名> authenticate
````
就可以触发 PAM 的验证了。