因此,我们正在努力在这里建立一个环境,在我们的 Linux 笔记本电脑上进行安全存储设置,这样我们的 Linux 笔记本电脑只能连接特定的 USB 驱动器:金士顿 DataTraveler 2.0。供应商:模型代码是这样的(来自lsusb
):Bus 003 Device 003: ID 0951:1665 Kingston Technology
我一直在努力使这些规则生效,但在 12.04 环境中这些规则不起作用。(请注意,我已经用#
前缀行进行了评论,但它们不在 udev 文件中):
# If a device is NOT a Kingston drive, ignore it.
SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}!="0951", OPTIONS+="ignore_device"
# If a device is a Kingston drive, but is NOT the model we have, ignore it.
SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}=="0951", ATTRS{idProduct}!="1665", OPTIONS+="ignore_device"
# If a device is a Kingston drive and is the model we have, then run a script
SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}=="0951", ATTRS{idProduct}=="1665", RUN+="/lib/udev/syslog-authorized-device-connected.sh"
我遇到的问题是这些规则都不起作用,我什至不知道这是否是正确的方法。
想法?
我以前遇到过同样的问题 non effective
ignore_device
。我不明白为什么我总是选择其他解决方案。好吧,
ignore_device
从 udev 版本 148 中删除了。请参阅发行说明或变更日志如果您注意到,所有建议使用它的主题都是旧的(~ 2009)。
一个快速的替代方法是使用:
ENV{UDISKS_PRESENTATION_HIDE}="1"
(Ubuntu 12.04)。对于包含udisks2
使用的版本 (>=12.10):ENV{UDISKS_IGNORE}="1"
.参考资料: Archlinux Wiki:Udisks
其他解决方案使用 SYSFS。要么
device/authorized
(如 solsTiCe 所述),device/remove
要么driver/unbind
. 请参阅仅在选定的 USB 端口上使用大容量存储设备 - 如何?困难在于如何拒绝除一个品牌/型号之外的所有存储。所以规则匹配条件应该过滤单个设备节点,不多也不少(没有子设备或父设备)。这就是为什么我添加
KERNELS=="[1-9]*-[0-9]*"
好吧,UDisks 只隐藏了安装挂钩。使用 SYSFS 驱动程序解除绑定可能会更好。
参考: udev rule with few parent device attributes
所以,我有点解决了这个问题,这是一件很痛苦的事情。
我重新检查了规则中的限制,并更改了功能。显然,12.04 不支持该
ignore_device
选项。因此,我即兴编写了一个卸载脚本。由于这些系统上只有一个可用的 USB 端口,我们最终得到以下结果,我知道这可能会破坏其他东西:/etc/udev/rules.d/100-restrict-usb-devices.rules
/lib/udev/unmount.sh
- 只是一个脚本,首先检查当前存在的设备,然后检查所有其他驱动器设备并在且仅当脚本运行时卸载。由于所有设备都是sdb
,sdc
, 等,所以有办法让它适用于所有设备。故事的寓意:系统忽略了
ignore_device
12.04 中的选项。必须编写所有内容。:/