web-dev-qa-db-fra.com

Configurez udev pour modifier les autorisations sur le périphérique USB HID?

J'ai une balance USB, une clé USB HID. Actuellement, lorsqu'il est branché, les autorisations permettent uniquement au superutilisateur d'y accéder. Comment puis-je configurer udev pour permettre à quiconque d'accéder à ce périphérique? J'ai les identifiants de fournisseur et de produit, mais je voudrais plutôt les faire correspondre en fonction du type HID.

Pour le moment, je ne parviens pas à trouver une règle existante applicable à ce problème (je me suis écrié pour "hidraw" dans /lib/udev/rules.d et /etc/udev/rules.d, entre autres).

20
erjiang

Normalement, ceci est fait en ajoutant à /etc/udev/rules.d un fichier peut-être nommé 50-usb-scale.conf avec un contenu comme celui-ci:

SUBSYSTEM=="usb", ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2", MODE="0666"

HEX1 et HEX2 sont remplacés par le fournisseur et l'ID du produit, respectivement.

Pour faire correspondre le type d'interface à la place, vous pouvez essayer de remplacer ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2" par une correspondance pour bInterfaceClass, étant 03 (HID):

SUBSYSTEM=="usb", ATTR{bInterfaceClass}=="03", MODE="0666"

Mais soyez prévenus, cela attrapera aussi les souris et les claviers.

19
Kees Cook

Juste pour le résumé:

Vous pouvez filtrer pour:

  • idVendor
  • idProduct
  • en série

Et utilise:

== Comparez pour l'égalité.

! = Compare l'inégalité.

= Attribuer une valeur à une clé. Les touches représentant une liste sont réinitialisées et seule cette valeur unique est attribuée.

+ = Ajouter la valeur à une clé contenant une liste d'entrées.

: = Assigne une valeur à une clé finalement; interdire toute modification ultérieure.

Vous pouvez donner à un périphérique spécifique un nouveau chemin spécifique dans/dev/...
Exemple:

KERNEL=="hiddev*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", ATTRS{serial}=="1234567", GROUP="cdrom", OWNER="user28", MODE="0640", SYMLINK+="myhid"

Résulte en:

Vous pouvez accéder au périphérique via "/ dev/hiddevx" ou via "/ dev/myhid" facilement, chaque utilisateur du groupe "cdrom" peut le lire depuis le périphérique. Le propriétaire 'utilisateur28' peut lire et écrire.

ou le plus simple:

KERNEL=="hiddev*", ATTRS{idVendor}=="16c0", MODE="0666"

Résultats en: Chaque utilisateur peut accéder à chaque périphérique à partir du fournisseur 0x16c0.

Pour plus de détails, voir: Docs

6
rundekugel

Au cas où vous auriez besoin de changer (comme moi) ttyACM0 permissions, voici mes paramètres:

KERNEL=="ttyACM0", MODE="0777"

Il a échoué lorsque j'ai tenté de spécifier le fournisseur et l'ID du produit. Je ne suis pas sûr pourquoi.

5
Rodo

Ubuntu 18.04 mise à jour/clarification:

La réponse de Kees Cook est proche, mais deux modifications sont nécessaires pour fonctionner en 18.04 (la version actuelle et une seule sur laquelle j'ai testé ceci).

  1. Trouvez votre idVendor et idProduct avec lsusb.
    • Ce seront les 2 valeurs hexadécimales après "ID", séparées par deux points. J'ajoute un scanner. lsusb m'a donné:
      Bus 001 périphérique 011: ID 04b8: 014a Seiko Epson Corp. 
  2. En tant que root, ajoutez un fichier à / etc/udev/rules.d
    • Quelque chose comme 50-usb-epsonscanner.rules
    • L'extension doit être ".rules"
  3. Dans ce fichier, ajoutez:
    SOUS-SYSTEME == "usb", ATTRS {idVendor} == "04b8", ATTR {idProduct} == "014a", MODE = "0666"
    Mais avec vos valeurs hex idVendor et idProduct.
    • Notez que c'est "ATTRS" pas "ATTR".
  4. Re-connectez-vous. Pas besoin de redémarrer.
2
gatohaus

Si c'est un appareil HIDRAW, vous devez

chmod 0666 /dev/hidrawX

où X est le numéro de périphérique caché, par exemple hidraw0. tu peux faire

ls /dev/hid*

pour voir une liste :) Ou tout simplement faire

Sudo chmod 0666 /dev/hidraw*

définir pour tous les appareils hidraw, probablement pas recommandé.

2
Muriuki David