nyaruta

nyaruta

文章都是 mx-space 同步来的 如果有渲染问题请移步 lar.moe

在 WSL2 中使用 YubiKey

序言#

这几天心血来潮开始整 WSL2 其中有一项就是在 WSL2 中使用 YubiKey

恰好这段时间也遇到了一些奇怪的问题,踩了不少坑,就顺手写篇文章记录下吧

Note

本文以 Arch Linux 作为目标系统编写

Windows 侧解决方案基于 usbipd-win

前提条件#

  • 已安装 ArchWSL
  • 有一个 YubiKey

连接#

Windows 侧#

安装 usbipd-win

winget install --interactive --exact dorssel.usbipd-win

连接 YubiKey 后执行

usbipd list

此时的输出应该类似于

Connected:
BUSID  VID:PID    DEVICE                                                        STATE
1-6    1050:0407  USB 输入设备, Microsoft Usbccid Smartcard Reader (WUDF)       Not shared
1-7    17ef:6019  USB 输入设备                                                  Not shared
1-8    1a2c:20c0  USB 输入设备                                                  Not shared

记住 VID:PID 之后有用

接下来执行

usbipd bind --busid=<BUSID>

绑定设备

之后启动 WSL 并在 Windows 侧运行

usbipd attach --wsl --busid=<BUSID>

附加 YubiKey 到 WSL

Linux 侧#

安装必需依赖

sudo pacman -S usbip usbutils

此时执行 lsusb

如果输出中包含 YubiKey 字样 恭喜你已经成功将 YubiKey 连接到 WSL 了

配置#

安装 yubikey-manager 并启动 pcscd.service

sudo pacman -S yubikey-manager pcsclite pcsc-tools
sudo systemctl enable --now pcscd.service

执行 ykman info 命令 不出意外应该是出意外了 提示 No Yubikey detected

并且 GPG 也无法读取到 Key

这时我们需要配置一些 udev 规则

首先 我们需要新建一个名为 scard 的用户组 并把自己的用户添加进去

sudo groupadd scard
sudo usermod -aG scard $whoami

重启 WSL 并添加以下文件

``` TEXT filename="/etc/udev/rules.d/10-security-key.rules" KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="users", ATTRS{idVendor}=="2581", ATTRS{idProduct}=="f1d0" ``` ```TEXT filename="/etc/udev/rules.d/71-gnupg-ccid.rules" ACTION=="add", SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="1050", ENV{ID_MODEL_ID}=="0116|0111", MODE="660", GROUP="scard" ``` 这里的 VENDOR 和 MODEL 需要根据自己的设备进行修改

还记得之前我们记下来的 VID

它们就分别对应了 VENDOR 和 MODEL

使用 sudo udevadm trigger 重载 udev 规则

这时你会发现 ykman info 已经可以使用 但是 GPG 仍然无法读取到 Key

这是由于 Polkit 限制了本地客户端的权限 所以我们还需要添加一个 Polkit 规则

polkit.addRule(function(action, subject) {
    if (action.id == "org.debian.pcsc-lite.access_card" &&
        subject.isInGroup("wheel")) {
        return polkit.Result.YES;
    }
});
polkit.addRule(function(action, subject) {
    if (action.id == "org.debian.pcsc-lite.access_pcsc" &&
        subject.isInGroup("wheel")) {
        return polkit.Result.YES;
    }
});

Important

使用上述规则前请确保您的用户位于 wheel 用户组中 否则规则将不会工作

然后重启 polkit.service

sudo systemctl restart polkit.service

此时 GPG 应当正常工作

后记#

不得不说这玩意是真麻烦 耗了我半天时间找解决方法 累死我了

此文由 Mix Space 同步更新至 xLog
原始链接为 https://lar.moe/posts/tech/using-yubikey-in-wsl2


加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。