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


載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。