Whitelist or render inoperative any USB device to secure your personal belongings.
Disable the particular USB device
I will disable the cheap Samsung tablet, so it won’t mount when connected.
Display USB devices before the mentioned device is connected.
$ lsusb
Bus 001 Device 002: ID 8087:8001 Intel Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 002 Device 093: ID 0bda:5682 Realtek Semiconductor Corp. Bus 002 Device 003: ID 8087:0a2a Intel Corp. Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Display USB devices after the device is connected.
$ lsusb
Bus 001 Device 002: ID 8087:8001 Intel Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 002 Device 093: ID 0bda:5682 Realtek Semiconductor Corp. Bus 002 Device 003: ID 8087:0a2a Intel Corp. Bus 002 Device 029: ID 04e8:6860 Samsung Electronics Co., Ltd Galaxy (MTP) Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
The mentioned device can be identified by vendor id 0x04e8
Samsung Electronics Co., Ltd and product id 0x6860
Galaxy (MTP).
Identify the device path to display more useful udev information.
$ idVendor="04e8"; idProduct="6860"; \ find -L /sys/bus/usb/devices/ -maxdepth 2 -name idVendor -exec grep -l $idVendor {} \; | \ while read line; do \ location=$(dirname $line); \ grep -q $idProduct $location/idProduct; if [ "$?" -eq "0" ]; then \ echo $location; fi done
/sys/bus/usb/devices/2-2
Use the device path to display udev information.
$ udevadm info -a -p /sys/bus/usb/devices/2-2
Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/devices/pci0000:00/0000:00:14.0/usb2/2-2': KERNEL=="2-2" SUBSYSTEM=="usb" DRIVER=="usb" ATTR{authorized}=="0" ATTR{avoid_reset_quirk}=="0" ATTR{bConfigurationValue}=="" ATTR{bDeviceClass}=="00" ATTR{bDeviceProtocol}=="01" ATTR{bDeviceSubClass}=="00" ATTR{bMaxPacketSize0}=="64" ATTR{bMaxPower}=="" ATTR{bNumConfigurations}=="1" ATTR{bNumInterfaces}=="" ATTR{bcdDevice}=="0400" ATTR{bmAttributes}=="" ATTR{busnum}=="2" ATTR{configuration}=="" ATTR{devnum}=="29" ATTR{devpath}=="2" ATTR{idProduct}=="6860" ATTR{idVendor}=="04e8" ATTR{ltm_capable}=="no" ATTR{manufacturer}=="SAMSUNG" ATTR{maxchild}=="0" ATTR{product}=="SAMSUNG_Android" ATTR{quirks}=="0x0" ATTR{removable}=="removable" ATTR{serial}=="3801a4eaab8a3400" ATTR{speed}=="480" ATTR{urbnum}=="32" ATTR{version}==" 2.00" looking at parent device '/devices/pci0000:00/0000:00:14.0/usb2': KERNELS=="usb2" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{authorized}=="1" ATTRS{authorized_default}=="1" ATTRS{avoid_reset_quirk}=="0" ATTRS{bConfigurationValue}=="1" ATTRS{bDeviceClass}=="09" ATTRS{bDeviceProtocol}=="01" ATTRS{bDeviceSubClass}=="00" ATTRS{bMaxPacketSize0}=="64" ATTRS{bMaxPower}=="0mA" ATTRS{bNumConfigurations}=="1" ATTRS{bNumInterfaces}==" 1" ATTRS{bcdDevice}=="0411" ATTRS{bmAttributes}=="e0" ATTRS{busnum}=="2" ATTRS{configuration}=="" ATTRS{devnum}=="1" ATTRS{devpath}=="0" ATTRS{idProduct}=="0002" ATTRS{idVendor}=="1d6b" ATTRS{interface_authorized_default}=="1" ATTRS{ltm_capable}=="no" ATTRS{manufacturer}=="Linux 4.11.0-13-generic xhci-hcd" ATTRS{maxchild}=="11" ATTRS{product}=="xHCI Host Controller" ATTRS{quirks}=="0x0" ATTRS{removable}=="unknown" ATTRS{serial}=="0000:00:14.0" ATTRS{speed}=="480" ATTRS{urbnum}=="8014" ATTRS{version}==" 2.00" looking at parent device '/devices/pci0000:00/0000:00:14.0': KERNELS=="0000:00:14.0" SUBSYSTEMS=="pci" DRIVERS=="xhci_hcd" ATTRS{broken_parity_status}=="0" ATTRS{class}=="0x0c0330" ATTRS{consistent_dma_mask_bits}=="64" ATTRS{d3cold_allowed}=="1" ATTRS{device}=="0x9cb1" ATTRS{dma_mask_bits}=="64" ATTRS{driver_override}=="(null)" ATTRS{enable}=="1" ATTRS{irq}=="44" ATTRS{local_cpulist}=="0-3" ATTRS{local_cpus}=="f" ATTRS{msi_bus}=="1" ATTRS{numa_node}=="-1" ATTRS{revision}=="0x03" ATTRS{subsystem_device}=="0x0665" ATTRS{subsystem_vendor}=="0x1028" ATTRS{vendor}=="0x8086" looking at parent device '/devices/pci0000:00': KERNELS=="pci0000:00" SUBSYSTEMS=="" DRIVERS==""
Create an exact udev rule to de-authorize this device early on.
$ cat << EOF | sudo tee /etc/udev/rules.d/01-disable-samsung.rules SUBSYSTEM=="usb", ACTION=="add", ATTR{removable}=="removable", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", ATTR{authorized}="0" EOF
This device will be unusable next time it is connected to the computer.
Whitelist USB devices
Display USB devices.
$ lsusb
lsusb Bus 001 Device 002: ID 8087:8001 Intel Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 002 Device 093: ID 0bda:5682 Realtek Semiconductor Corp. Bus 002 Device 003: ID 8087:0a2a Intel Corp. Bus 002 Device 012: ID 045e:0745 Microsoft Corp. Nano Transceiver v1.0 for Bluetooth Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Authorize these USB devices and their children, but only if the device as a parent is not a hub.
$ cat << EOF | sudo tee /etc/udev/rules.d/01-usb-whitelist.rules ACTION != "add", GOTO = "usblist_rules_end" SUBSYSTEM == "usb", GOTO = "usblist_usb_rules" GOTO="usblist_rules_end" LABEL="usblist_usb_rules" # Bus 001 Device 002: ID 8087:8001 Intel Corp. ATTR{idVendor} == "8087", ATTR{idProduct} == "8001", GOTO = "usblist_rules_end" ATTRS{idVendor} == "8087", ATTRS{idProduct} == "8001", ATTRS{bDeviceClass} != "09", GOTO = "usblist_rules_end" # Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub ATTR{idVendor} == "1d6b", ATTR{idProduct} == "0002", GOTO = "usblist_rules_end" ATTRS{idVendor} == "1d6b", ATTRS{idProduct} == "0002", ATTRS{bDeviceClass} != "09", GOTO = "usblist_rules_end" # Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub ATTR{idVendor} == "1d6b", ATTR{idProduct} == "0003", GOTO = "usblist_rules_end" ATTRS{idVendor} == "1d6b", ATTRS{idProduct} == "0003", ATTRS{bDeviceClass} != "09", GOTO = "usblist_rules_end" # Bus 002 Device 093: ID 0bda:5682 Realtek Semiconductor Corp. ATTR{idVendor} == "0bda", ATTR{idProduct} == "5682", GOTO = "usblist_rules_end" ATTRS{idVendor} == "0bda", ATTRS{idProduct} == "5682", ATTRS{bDeviceClass} != "09", GOTO = "usblist_rules_end" # Bus 002 Device 003: ID 8087:0a2a Intel Corp. ATTR{idVendor} == "8087", ATTR{idProduct} == "0a2a", GOTO = "usblist_rules_end" ATTRS{idVendor} == "8087", ATTRS{idProduct} == "0a2a", ATTRS{bDeviceClass} != "09", GOTO = "usblist_rules_end" # Bus 002 Device 012: ID 045e:0745 Microsoft Corp. Nano Transceiver v1.0 for Bluetooth ATTR{idVendor} == "045e", ATTR{idProduct} == "0745", GOTO = "usblist_rules_end" ATTRS{idVendor} == "045e", ATTRS{idProduct} == "0745", ATTRS{bDeviceClass} != "09", GOTO = "usblist_rules_end" # Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub ATTR{idVendor} == "1d6b", ATTR{idProduct} == "0002", GOTO = "usblist_rules_end" ATTRS{idVendor} == "1d6b", ATTRS{idProduct} == "0002", ATTRS{bDeviceClass} != "09", GOTO = "usblist_rules_end" # Other USB devices - de-authorize ATTR{authorized}="0" LABEL="usblist_rules_end" EOF
References
Authorizing (or not) your USB devices to connect to the system