Isso deve ser possível usando as regras udev , mas provavelmente não é fácil e exigirá alguma experimentação. É possível acidentalmente fazer coisas ruins, como bloquear o mouse e o teclado, de trabalhar e exigir restauração com um pendrive ao vivo. Eu não testei esses comandos, ignore o emptor.
Crie um novo arquivo com um número de baixa prioridade, por exemplo, /lib/udev/rules.d/20-block-usb.rules com o conteúdo:
BUS=="usb", PROGRAM="/bin/filter_usb.sh %s{idVendor} %s{idProduct}", RESULT!="allow", OPTIONS+="ignore_device"
Quando um dispositivo USB é inserido, /bin/filter_usb.sh deve ser chamado com os IDs vendor e product do dispositivo como argumentos e, a menos que ocorra allow , o dispositivo deve ser ignorado, por exemplo:
#!/bin/sh
vendor=$1
product=$2
if [ "$vendor" = "0123" ]; then
if [ "$product" = "4567" ]; then
echo allow
fi
fi
Provavelmente você vai querer analisar udevtest para experimentar regras e, conforme observado, é necessário certificar-se de que seu mouse, teclado, etc. estejam na lista de permissões. Você pode querer restringir a regra de bloqueio apenas a dispositivos de bloqueio USB adicionando SUBSYSTEM=="block", antes de PROGRAM na regra original.