在统信uos中可通过udev规则结合用户组隔离实现单用户usb存储禁用:先建usb-restricted组并添加目标用户;再编写匹配usb存储接口类的udev规则,依赖env{id_usb_interfaces}和group判断;接着重载规则并触发;最后叠加polkit策略或acl限制udisks2挂载权限,确保仅目标用户无法使用usb存储设备。

在统信UOS中限制特定用户使用USB存储设备,需绕过全局禁用方案,转而利用udev规则结合用户会话环境变量实现权限隔离——因为内核层和sysfs层的管控均为系统级,无法区分用户身份。
通过udev规则+用户组隔离实现单用户禁用
该方法不修改内核模块或启动参数,仅对目标用户生效,保留其他用户及系统服务对USB设备的正常访问能力。
第一步:创建专用用户组并添加目标用户
执行命令:sudo groupadd usb-restricted → sudo usermod -aG usb-restricted username(将username替换为实际用户名)
第二步:编写带用户组判断的udev规则
运行sudo nano /etc/udev/rules.d/98-usb-user-restrict.rules,写入以下内容:
SUBSYSTEM=="usb", ATTR{idVendor}=="*", ATTR{idProduct}=="*", ENV{ID_USB_INTERFACES}=="*:080650:*", PROGRAM="/bin/sh -c 'id -nG | grep -qw usb-restricted'", RESULT=="1", RUN+="/bin/sh -c 'echo 0 > /sys$devpath/authorized'"
第三步:重载规则并触发生效
执行sudo udevadm control --reload-rules → sudo udevadm trigger --subsystem-match=usb
第四步:验证用户隔离效果
切换至目标用户(su - username),插入U盘;同时保持root或其他普通用户会话,另插一个U盘。前者应无设备节点生成(lsblk无新增sdb类设备),后者仍可识别。注意:此规则依赖ID_USB_INTERFACES匹配USB存储接口类(08/06/50),比单纯匹配bDeviceClass更精准,避免误禁HID设备。
配合udisks2策略文件强化限制
仅靠udev规则可能被具备sudo权限的用户绕过,需叠加桌面环境级防护,防止用户手动挂载已识别的块设备。
方法一:禁用目标用户的udisks2自动挂载权限
创建策略文件:sudo nano /etc/polkit-1/rules.d/50-usb-mount-restrict.rules
写入:
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.udisks2.filesystem-mount" &&
subject.isInGroup("usb-restricted")) {
return polkit.Result.NO;
}
});
方法二:阻止目标用户调用udisksctl命令
执行sudo setfacl -m u:username:--- /usr/bin/udisksctl,直接移除其执行权限。
【注意】此操作不可逆,除非用sudo setfacl -x u:username /usr/bin/udisksctl恢复,且需确保该用户无其他提权路径(如sudo权限)。
验证与故障排查
插入U盘后,在目标用户终端执行:dmesg | tail -20 | grep -i "usb\|storage",确认无usb-storage驱动绑定日志;再运行ls /media/$USER/,目录应为空。
若U盘仍被挂载,检查是否遗漏了udisks2策略文件中的括号闭合或大小写错误;若lsblk可见设备但无法访问,说明udev规则生效但udisks2策略未生效,需重启polkitd服务:sudo systemctl restart polkit。
拔掉U盘后,执行sudo udevadm trigger --subsystem-match=usb,确保规则对后续接入设备持续有效。











