add set-up-sudo-with-howdy-on-fedora-34-for-faical-authenticating
This commit is contained in:
parent
6e3ea83374
commit
99f0329ad9
2 changed files with 105 additions and 0 deletions
|
@ -0,0 +1,105 @@
|
|||
---
|
||||
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 弄 Howdy:sudo 老是让人输密码着实令人烦躁,但是我又不想取消所有认证,正好 Howdy 的需求很低(只需要一个摄像头)。
|
||||
|
||||
我机器上使用的发行版是 Fedora 34,64 位。
|
||||
|
||||
|
||||
## 安装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 的验证了。
|
Binary file not shown.
After Width: | Height: | Size: 78 KiB |
Loading…
Reference in a new issue