Skip to content

Instantly share code, notes, and snippets.

@ju916
Last active January 29, 2021 17:11
Show Gist options
  • Save ju916/8f1267b43edfbd7be5127eb24045546f to your computer and use it in GitHub Desktop.
Save ju916/8f1267b43edfbd7be5127eb24045546f to your computer and use it in GitHub Desktop.
Udev Yubikey rules
# handcrafted file to trigger events on
# removal/insertion of Yubico U2F-Tokens
# place in /etc/udev/rules.d
# Key inserted
ACTION=="add", SUBSYSTEM=="hid", ENV{HID_NAME}=="Yubico Security Key by Yubico", RUN+="/usr/local/bin/device_inserted.sh"
# Key removed
ACTION=="remove", SUBSYSTEM=="hid", ENV{HID_NAME}=="Yubico Security Key by Yubico", RUN+="/usr/local/bin/device_removed.sh"
@borg1622
Copy link

borg1622 commented Jan 29, 2021

Das triggern auf den HID_NAME Yubico Security Key by Yubico hat den Nachteil, dass andere Yubikey-Typen (Neo, 4er, 5er, usw.) nicht erkannt werden.

Ein Yubikey 4 (nano) meldet sich beispielsweise mit:
Yubico Yubikey 4 OTP+U2F+CCID
Der Yubikey NEO mit
Yubico Yubikey NEO OTP+U2F+CCID
Ein Yubikey (2?) nano mit
Yubico Yubico Yubikey II

Vielleicht ist es sinnvoller auf ATTRS{idVendor}=="1050" und Subsystem input zu triggern, sofern die Yubico durchweg die gleiche ID 1050 nutzt. Bei all meinen Yubikeys (2 nano, 4 (nano) und NEO) war die idVendor gleich)
Meine udev-Regel sieht so aus:
ACTION=="remove", SUBSYSTEM=="input", ATTRS{idVendor}=="1050", RUN+="/usr/local/bin/yubikey_removed.sh"

Bei der Nutzung von mehreren Yubikeys (mein Szenario), sollte noch im Script "device_removed" die Seriennummer abgefragt werden. Sonst sperrt das System ja, egal welchen Key man zieht.
Sobald ich eine Lösung dafür habe, kommentiere ich entsprechend die Scrip-Datei.

Ermitteln der VendorID am besten über lsusb
lsusb | grep Yubikey bzw. lsusb | grep -P "(?<=\sID\s)[0-9a-f]+(?=:.*Yubikey)"

Ermitteln der HID-ID am besten über udevadm:
udevadm monitor --udev --subsystem-match=hid --property
(Stick stecken und/oder entfernen)

EDIT: Ich gehe hier davon aus, dass der Yubikey auch als Input-Device bereit steht. Kann sein, dass bei den einfachen U2F-only Yubikeys das nicht der Fall ist, oder? Dann wäre meine Ergänzung nur fur alle Yubikeys außer dem "blauen" U2F-Key gültig.

@borg1622
Copy link

Eine Alternative zum Matching auf HID_NAME könnte noch ein partielles Matching auf HID_ID mit der VendorId 1050 darstellen:
ACTION=="remove", SUBSYSTEM=="hid", ENV{HID_ID}="*:00001050:*", RUN+="/usr/local/bin/device_removed.sh"

Das funktioniert mit meinen Yubikeys und sollte auch mit dem U2F-Key so gehen.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment