在 RPi CM3 上只允许某些 USB 设备的可靠方法是什么?

问题描述

我们有一个带有 CM3 的定制板,并在集线器上使用 USB 端口 + 以太网部件以及 wifi 芯片。我只想在 USB 端口上允许这两个设备。这是一个无头设备,我只能访问网络。
---方法一--- 我已经尝试使用“/etc/modprobe.d/raspi-blacklist.conf”将其他类型的设备列入黑名单,因为这看起来很简单,但似乎从未奏效。即使“usb_storage”也不会禁止存储设备。这似乎不起作用,或者我需要激活更改而不是重新启动。

---方法2--- 所以我尝试了以下一些信息的 udev 规则:

https://wiki.gentoo.org/wiki/Allow_only_known_usb_devices

http://www.irongeek.com/i.php?page=security/plug-and-prey-malicious-usb-devices#3.2_Locking_down_Linux_using_UDEV

我使用“udevadm info -a -p /sys/bus/usb/devices/(specific device)”来查找我设备上的信息,并且必须在 Linux Hub 上启用这些设备,我正在使用的集线器,以及另外两个设备。

这里是我的“/etc/udev/rules.d/01-usblockdown.rules”的内容

# Skip not USB
SUBSYstem!="usb",GOTO="usb_end"
# Skip remove actions
ACTION=="remove",GOTO="usb_end"

# Linux Foundation
# USB1 root hub
SUBSYstemS=="usb",ACTION=="add",ATTR{product}=="DWC OTG Controller",\
  ATTR{idvendor}=="1d6b",ATTR{idProduct}=="0002",ATTR{bDeviceClass}=="09",ATTR{authorized}="1",GOTO="usb_end"

# 1-1 root hub
SUBSYstemS=="usb",\
  ATTRS{idvendor}=="1d6b",ATTR{idProduct}=="9514",GOTO="usb_end"

# Ethernet
SUBSYstemS=="usb",ATTR{bcdDevice}=="0200",\
  ATTR{idvendor}=="0424",ATTR{idProduct}=="ec00",GOTO="usb_end"

# wifi
SUBSYstemS=="usb",ATTR{bcdDevice}=="0000",\
  ATTR{idvendor}=="0bda",ATTR{idProduct}=="8179",GOTO="usb_end"

# specifically disable storage for testing
SUBSYstemS=="usb",ATTR{product}=="Mass storage",ATTR(authorized)="0",GOTO="usb_end"

# disable all other USB devices
SUBSYstemS=="usb",ATTR{authorized}="0"

LABEL="usb_end"

我用“udevadm test /sys/bus/usb/devices/(specific device)”测试这个,它似乎工作。但是在重新启动时,一切都被授权,即使是专门试图阻止的 USB 存储。如果我在文件前面使用 "SUBSYstemS=="usb",ATTR{authorized}="0"" 则所有内容都会被阻止,我将永久失去与它的网络连接。

---方法3--- 如果我让 systemd/service 在网络设备之后简单地运行“echo 0 >/sys/bus/usb/devices/usb1/authorized_default”,这可以禁止任何新的 USB 设备在启动后插入时运行,但仍允许在网络之前插入的设备。

有没有更简单的方法可以做到这一点,或者我目前可以使用的方法之一缺少什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...