comment désactiver les périphériques USB en fonction de l'ID du fournisseur dans l'environnement Linux?

11

Je souhaite désactiver les périphériques USB en fonction de l'ID du fournisseur dans l'environnement Linux. Je souhaite autoriser uniquement des périphériques USB spécifiques, en fonction de l'ID du fournisseur.

subbarao
la source
Comment bloquer le lecteur USB / PEN sous Linux (kali linux) grprajapat.blogspot.in/2014/09/…
J'ai un fournisseur spécifique: l'ID de l'appareil pour lequel je veux désactiver cdc_acm. J'ai depuis transformé cela en une question distincte .
mirabilos

Réponses:

10

Vous pouvez créer une règle udev qui désactive les périphériques par défaut, mais en active certains par ID de fournisseur. Créez un fichier /etc/udev/rules.d/01-usblockdown.rulescontenant une règle pour désactiver les appareils:

ACTION=="add", SUBSYSTEMS=="usb", RUN+="/bin/sh -c 'for host in /sys/bus/usb/devices/usb*; do echo 0 > $host/authorized_default; done'"

Et puis des règles pour activer les appareils que vous souhaitez autoriser (vous pouvez utiliser ATTR{idVendor}pour obtenir l'ID du fournisseur):

ACTION=="add", ATTR{idVendor}=="0000" RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"

Voir "Verrouiller Linux à l'aide d'UDEV" pour plus d'informations.

Michael Mrozek
la source
est la commande ci-dessus est suffisante ou nous devons faire n'importe quel déclencheur udevadm pour obtenir l'effet de cela.
subbarao
salut Stéphane, nous devons ajouter les deux règles pour permettre une clé USB spécifique?
subbarao
@subbarao Oui, vous devez ajouter les deux règles, le premier bloque n'importe quoi par défaut, le second autorise certains appareils.
DBX12
Cela fonctionne lorsque vous vous connectez, par exemple un clavier, une fois le système démarré. Mais si le clavier est connecté et que vous redémarrez, le clavier fonctionne lors du redémarrage du système d'exploitation. Débrancher le clavier puis rebrancher, le clavier ne fonctionne pas comme prévu. Existe-t-il une zone de niveau inférieur où cette règle peut être exécutée avant l'activation des périphériques de démarrage?
ScottN
3

(Cela aurait pu être mieux en tant que commentaire, mais je manque de points, alors développez-le en réponse)

Je suis venu ici chercher comment autoriser tous les périphériques USB, sauf en désactiver un spécifique par fournisseur et identifiant de produit. Comment désactiver un périphérique audio USB avec udev y répond pour l'exemple 0d8c: 000c.

Créer /etc/udev/rules.d/disable-usb-device.rules:

ACTION=="add", ATTR{idVendor}=="0d8c", ATTR{idProduct}=="000c", RUN="/bin/sh -c 'echo 0 >/sys/\$devpath/authorized'"

Il y a une différence entre la réponse et un commentaire ci-dessous avec RUN=vs RUN+=, j'ai essayé la première et cela a bien fonctionné.

Je m'attendais à ce que dmesg ou lusb rapporte différemment, mais ils montrent tous les deux que le périphérique non autorisé est énuméré comme auparavant, mais d'autres processus / modules qui auraient été lancés automatiquement ne semblent pas fonctionner, ce qui était l'effet souhaité. cat /sys/bus/usb/devices/1-2.2.1.1.4/authorized(le 1-2.2 ... par exemple qui peut être trouvé dans dmesg) montre que le 0 a été mis au bon endroit.

Lucas W
la source
Je ne sais pas s'il y a eu des changements entre les deux dans udev, mais de nos jours les attributs sont nommés ATTRS(pluriel) et pas ATTRquand je demande des périphériques avec udevadm.
Baptiste Mille-Mathias