银河麒麟系统禁用未注册USB移动存储需构建VID/PID/iSerial三重白名单机制:先用lsusb实测获取目标设备硬件指纹,再通过udev规则精确放行已知设备、拦截其余所有U盘及移动硬盘,最后重载规则并验证生效。

在银河麒麟系统中禁用未注册的USB移动存储介质,需绕过图形界面的粗粒度开关,直接在内核与设备管理层建立注册白名单机制——仅允许已知VID/PID或序列号的设备通过,其余U盘、移动硬盘一律在设备节点生成前被丢弃。
提取目标设备硬件指纹
插入一台你打算“注册”的U盘(即允许使用的设备),打开终端执行:
lsusb -v -s $(lsusb | grep "Mass Storage" | head -n1 | awk '{print $2":"$4}' | sed 's/://') | grep -E "(idVendor|idProduct|iSerial)"
这一步必须用真实设备实测获取,不能抄示例值。若输出中不含iSerial字段,说明该U盘未固化序列号,后续无法用于严格注册,需换用带唯一序列号的加密UKey或企业级移动硬盘。
记录三行结果,格式类似:
idVendor=0781
idProduct=5567
iSerial=2009081200012345
配置udev白名单规则
方法一:按VID+PID+iSerial三重匹配(最严)
执行:sudo nano /etc/udev/rules.d/99-usb-whitelist.rules
写入以下内容(注意引号为英文半角,等号前后无空格,每行末尾无空格):
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0781", ATTRS{idProduct}=="5567", ATTRS{iSerial}=="2009081200012345", ENV{UDISKS_IGNORE}="0"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}!="0781", ATTRS{idProduct}!="5567", ATTRS{iSerial}!="2009081200012345", RUN+="/bin/sh -c 'echo 0 > /sys$DEVPATH/authorized'"
方法二:仅按VID+PID匹配(兼容无序列号设备)
若上一步未获取到iSerial,改用此规则:
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0781", ATTRS{idProduct}=="5567", ENV{UDISKS_IGNORE}="0"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="*", ATTRS{idProduct}=="*", ENV{UDISKS_IGNORE}!="0", RUN+="/bin/sh -c 'echo 0 > /sys$DEVPATH/authorized'"
【关键】两行规则顺序不可颠倒,否则白名单失效
启用并验证规则
第一步:重载udev规则
执行:sudo udevadm control --reload-rules
第二步:触发现有USB设备重新评估
执行:sudo udevadm trigger --subsystem-match=usb
第三步:拔插测试
插入刚注册的U盘→应正常识别并挂载;插入任意其他U盘→dmesg | tail -10 中出现 "authorized=0" 日志,且 lsblk 不显示新 sdX 设备
若未生效,检查 /lib/udev/rules.d/60-persistent-storage.rules 是否存在冲突规则——该文件默认启用U盘自动挂载,必须注释掉其中含 "usb" 和 "sd" 的行,否则白名单形同虚设。

















