Only use Mass Storage devices on a selected USB port - how?
Solution 1:
It seems to work for me in Ubuntu 14.04 with 2 flash keys & android phone as storage and usb network adapter & webcam as other type. (I couldn't test placing a usb hub)
-
Check USB port (which is a parent device for the plugged device)
$ udevadm info --name=/dev/sdc --attribute-walk looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0': KERNELS=="2-1.2:1.0" SUBSYSTEMS=="usb" DRIVERS=="usb-storage" ATTRS{bInterfaceClass}=="08" ATTRS{bInterfaceSubClass}=="06" ATTRS{bInterfaceProtocol}=="50" ATTRS{bNumEndpoints}=="02" ATTRS{supports_autosuspend}=="1" ATTRS{bAlternateSetting}==" 0" ATTRS{bInterfaceNumber}=="00"
-
Create udev rule, matching usb port kernel name without
usb-storage
driver/etc/udev/rules.d/90-remove-non-storage.rules
Allow any device that have storage as 1st interface (Composite devices allowed)
KERNELS=="2-1.2:1.0", DRIVERS!="usb-storage", RUN+="/bin/sh -c 'echo 1 > /sys/bus/usb/drivers/hub/2-1\:1.0/port2/device/remove'"
Block any device that have a non storage interface (Composite devices denied)
Actually, Phone gets mounted as modem to
/dev/ttyACM0
as KERNELS=="2-1.2:1.1". This will not let phones (composite devices) to be mount only simple storage devices will.KERNELS=="2-1.2:1.[0-9]*", DRIVERS!="usb-storage", RUN+="/bin/sh -c 'echo 1 > /sys/bus/usb/drivers/hub/2-1\:1.0/port2/device/remove'"
Block only interfaces that are not storage (Composite devices allowed as storage only)
After some search about a way to disable only non allowed interfaces. Driver unbinding seems to work. My phone could only be used as storage, It does not create
/dev/ttyACM0
.KERNELS=="2-1.2:1.[0-9]*", DRIVERS!="usb-storage", RUN+="/bin/sh -c 'echo -n %k >/sys%p/driver/unbind'"
-
Reload udev rules
udevadm control --reload-rules
References:
- udev - Linux dynamic device management
- Chapter 13. Dynamic Kernel Device: Management with udev
- disable specific PCI device at boot
- Manual driver binding and unbinding
- sysfs descriptions & how to use