WSL Hello Sudo:用于Linux的Windows子系统上Windows Hello的面部识别

2021-03-02 09:27:41

" WSL您好sudo"是Linux PAM模块和随附的Windows CLI应用程序,可在Windows Subsystem for Linux(WSL)上实现Windows Hello的sudo bybiometric登录。该PAM模块允许您通过面部识别,指纹认证以及相关机器本地PIN来对sudo进行身份验证,它可以在WSL和WSL 2中运行。

Linux PAM模块是用Rust编写的,而Windows CLI应用是用C#编写的。请自行承担风险。没有保修。

" WSL您好sudo"实际上根本不修改您的sudo命令。它是一个Linux PAM模块。 PAM,可插入身份验证模块,是UNIX的模块系统,可为诸如sudo或su之类的应用程序提供用户身份验证机制。 " WSL您好sudo"是一种PAM模块,允许应用程序使用Windows Hello。

安装过程非常简单。请从GitHub Release下载最新的发行包并解压缩。在目录中运行install.sh,并按照install.sh的说明进行操作

" WSL您好sudo"不是sudo的分支,而是PAM模块。因此,请配置/etc/pam.d/sudo使其生效。我强烈建议先设置root的密码,以便在sudo的配置中输入错误时可以通过su切换到该密码。将auth足够的pam_wsl_hello.so添加到/etc/pam.d/sudo的顶行,如以下示例所示

#%PAM-1.0auth足够pam_wsl_hello.sosession必需pam_env.so readenv = 1 user_readenv = 0会话必需pam_env.so readenv = 1 envfile = / etc / default / locale user_readenv = 0 @ include common-auth @ include common-account @ include普通会话非交互

即使您无法通过Windows Hello进行身份验证,sudo也会通过此设置继续进行常规密码身份验证。

其他验证用户身份的应用程序(例如su)也可以通过此模块使用Windows Hello。即使这样,我还是强烈建议您从该模块中释放sudo或su,以防止被锁定

Windows Hello对话框有时会在背景中出现,在某些情况下,它甚至无法通过一些奇怪的错误消息来识别您的脸,这似乎是Windows API的错误。在这种情况下,重新启动Windows几次可能会解决该问题。

也许正在发生一些错误。不幸的是,sudo抑制了来自PAM模块的错误消息。要调试WSL Hello sudo,请使其对su而不是sudo有效。 su显示来自PAM模块的错误消息,因此您可以查看发生了什么。

供您参考,su的设置将类似于下面的示例。我将仅显示相关的两行。

" WSL Hello sudo"的Linux PAM模块。用Rust编写,Windows CLI应用程序用C#编写。因此,需要cargo和Visual Studio来构建它。

在构建“ WSL Hello sudo”之前,请将MSBuild.exe的路径添加到WSL(而不是Windows)上bash的PATH环境变量中。如果使用Visual Studio GUI构建Windows CLI应用程序,则可以忽略它。在我的环境中,MSBuild位于/ mnt / c / Program Files(x86)/ Microsoft Visual Studio / 2019 / Community / MSBuild / Current / Bin /

无论您使用的是bash还是Windows,存储库都必须位于Windows文件系统中,否则MSBuild.exe将无法正常工作。

Windows Hello在其TPM硬件中为每个Windows用户维护RSA密钥对,并通过使用私钥对给定的内容签名来告诉认证成功。 包含小型Windows CLI应用程序,这些应用程序返回公钥和给定内容的签名。另一方面," WSL Hello sudo"的PAM模块。 记住与每个Linux用户相对应的每个Windows用户的公共密钥。因此,PAM模块通过以下过程对给定的Linux用户进行身份验证。 PAM模块由sudo启动,并接收要验证的Linux用户 PAM模块启动配套的Windows应用程序,并通过WSL的互操作桥发送随机值 Windows Hello通过当前Windows用户的私钥对给定的输入进行签名 PAM模块通过与给定Linux用户相对应的Windows用户的公钥来验证签名。