序言#
この数日、気まぐれで WSL2 の設定を始め、その中の一つが WSL2 で YubiKey を使用することです。
ちょうどこの期間にいくつかの奇妙な問題に遭遇し、いくつかの落とし穴にはまったので、ついでに記事を書いて記録しておきます。
前提条件#
- 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です。