¿Cómo deshabilitar los dispositivos USB basados en la identificación del proveedor en el entorno Linux?
11
Quiero deshabilitar los dispositivos usb basados en la identificación del proveedor en el entorno Linux. Quiero permitir solo dispositivos USB específicos, según la identificación del proveedor.
Tengo un proveedor específico: ID de dispositivo para el que quiero deshabilitar cdc_acm. Desde entonces he hecho esto en una pregunta separada .
mirabilos
Respuestas:
10
Puede crear una regla udev que deshabilite los dispositivos de manera predeterminada, pero habilita algunos por ID de proveedor. Cree un archivo /etc/udev/rules.d/01-usblockdown.rulesque contenga una regla para deshabilitar dispositivos:
ACTION=="add", SUBSYSTEMS=="usb", RUN+="/bin/sh -c 'for host in /sys/bus/usb/devices/usb*; do echo 0 > $host/authorized_default; done'"
Y luego las reglas para habilitar los dispositivos que desea permitir (puede usar ATTR{idVendor}para obtener la ID del proveedor):
es suficiente el comando anterior o tenemos que hacer cualquier disparador udevadm para obtener el efecto de esto.
Subbarao
hola Stephane, ¿tenemos que agregar ambas reglas para permitir pendrive específico?
Subbarao
@subbarao Sí, debe agregar ambas reglas, la primera bloquea cualquier cosa por defecto, la segunda permite ciertos dispositivos.
DBX12
Esto funciona cuando se conecta, digamos un teclado, una vez que se inicia el sistema. Pero si el teclado está conectado y usted reinicia, el teclado funciona cuando el sistema operativo se reinicia. Al desconectar el teclado y volver a enchufarlo, el teclado no funciona como se esperaba. ¿Hay algún área de nivel más bajo que esta regla se pueda ejecutar antes de activar los dispositivos de arranque?
ScottN
3
(Esto podría haber sido mejor como comentario, pero me faltan los puntos, así que lo expandí en una respuesta)
Vine aquí buscando cómo permitir todos los dispositivos usb, excepto deshabilitar uno específico por proveedor e identificación del producto. Cómo deshabilitar un dispositivo de sonido usb con udev lo responde para el ejemplo 0d8c: 000c.
Hay una discrepancia entre la respuesta y un comentario a continuación con RUN=vs. RUN+=, probé la primera y funcionó bien.
Esperaba que dmesg o lusb informaran de manera diferente, pero ambos muestran que el dispositivo no autorizado se enumeró como antes, pero parece que otros procesos / módulos que se habrían lanzado automáticamente no se están ejecutando, que fue el efecto deseado. cat /sys/bus/usb/devices/1-2.2.1.1.4/authorized(el 1-2.2 ... por ejemplo, que se puede encontrar en dmesg) muestra que el 0 se colocó en el lugar correcto.
No sé si hubo algunos cambios intermedios en udev, pero hoy en día los atributos se nombran ATTRS(plural) y no ATTRcuando consulto dispositivos udevadm.
Respuestas:
Puede crear una regla udev que deshabilite los dispositivos de manera predeterminada, pero habilita algunos por ID de proveedor. Cree un archivo
/etc/udev/rules.d/01-usblockdown.rules
que contenga una regla para deshabilitar dispositivos:Y luego las reglas para habilitar los dispositivos que desea permitir (puede usar
ATTR{idVendor}
para obtener la ID del proveedor):Consulte "Bloqueo de Linux con UDEV" para obtener más información.
fuente
(Esto podría haber sido mejor como comentario, pero me faltan los puntos, así que lo expandí en una respuesta)
Vine aquí buscando cómo permitir todos los dispositivos usb, excepto deshabilitar uno específico por proveedor e identificación del producto. Cómo deshabilitar un dispositivo de sonido usb con udev lo responde para el ejemplo 0d8c: 000c.
Crear
/etc/udev/rules.d/disable-usb-device.rules
:Hay una discrepancia entre la respuesta y un comentario a continuación con
RUN=
vs.RUN+=
, probé la primera y funcionó bien.Esperaba que dmesg o lusb informaran de manera diferente, pero ambos muestran que el dispositivo no autorizado se enumeró como antes, pero parece que otros procesos / módulos que se habrían lanzado automáticamente no se están ejecutando, que fue el efecto deseado.
cat /sys/bus/usb/devices/1-2.2.1.1.4/authorized
(el 1-2.2 ... por ejemplo, que se puede encontrar en dmesg) muestra que el 0 se colocó en el lugar correcto.fuente
ATTRS
(plural) y noATTR
cuando consulto dispositivosudevadm
.