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です。


読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。