百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

【信创】Linux系统如何配置USB存储禁用及例外 | 统信 | 麒麟 | 方德

ahcoder 2025-03-11 12:31 21 浏览

原文链接:【信创】Linux系统如何配置USB存储禁用及例外 | 统信 | 麒麟 | 方德

Hello,大家好啊!今天给大家带来一篇关于如何在Linux系统中配置USB存储禁用及例外的文章。禁用USB存储可以有效防止未经授权的人员从系统中复制数据或注入恶意软件,但有时也需要为特定的设备设置例外,使得某些USB设备依然可以使用。本文将介绍如何禁用USB存储设备,同时为特定设备设置例外规则。欢迎大家分享转发,点个关注和在看吧!

USB存储禁用与例外的需求场景

在企业环境中,禁用USB存储设备是为了提高系统的安全性,防止数据泄露或恶意软件的引入。然而,有些设备,如公司的授权U盘或外接硬盘,可能需要继续使用。因此,系统管理员需要一种方式,既可以全局禁用USB存储设备,又可以允许特定的USB设备继续使用。

1.查看需要例外的USB存储

pdsyw@pdsyw-pc:~/桌面$ lsusb

2.编辑移除USB存储的脚本

pdsyw@pdsyw-pc:~/桌面$ vim setup-usb-autoremove.sh
pdsyw@pdsyw-pc:~/桌面$ cat setup-usb-autoremove.sh
#!/bin/bash
# Step 1: 创建自动移除的脚本
cat << 'EOF' | sudo tee
/usr/local/bin/remove-usb.sh > /dev/null

#!/bin/bash
# 提取传递的设备节点
device_path="/sys$DEVPATH"
# 查找设备的 idVendor 和 idProduct 文件
while [[ ! -f "$device_path/idVendor" && "$device_path" != "/" ]]; do
device_path=$(dirname "$device_path")
done
# 如果找到了 idVendor 和 idProduct,继续处理
if [[ -f "$device_path/idVendor" && -f "$device_path/idProduct" ]]; then
device_vendor=$(cat $device_path/idVendor)
device_product=$(cat $device_path/idProduct)
# 允许的 USB 设备(替换为你指定的设备信息)
allowed_vendor="2bdf" # 示例: SanDisk厂商ID
allowed_product="0777" # 示例: SanDisk产品ID
# 检查是否为允许的 USB 设备
if [[ "$device_vendor" == "$allowed_vendor" && "$device_product" == "$allowed_product" ]]; then
echo "Allowed USB device detected: Vendor=$device_vendor, Product=$device_product"
else
echo "Non-allowed USB device detected: Vendor=$device_vendor, Product=$device_product. Removing..."
# 查找设备并解除绑定
if [ -e "$device_path/driver/unbind" ]; then
basename $device_path | tee $device_path/driver/unbind
fi
fi
fi
EOF
# 赋予脚本可执行权限
sudo chmod +x
/usr/local/bin/remove-usb.sh

# Step 2: 创建 udev 规则
cat << 'EOF' | sudo tee
/etc/udev/rules.d/99-usb-autoremove.rules > /dev/null

ACTION=="add", SUBSYSTEMS=="usb", ATTR{bInterfaceClass}=="08", RUN+="
/usr/local/bin/remove-usb.sh"

EOF
# Step 3: 重载 udev 规则
sudo udevadm control --reload-rules
pdsyw@pdsyw-pc:~/桌面$

这个脚本的目的是自动移除不被允许的 USB 存储设备,只允许特定的设备连接。以下是脚本中每一行的详细解释:

Step 1: 创建自动移除的脚本
cat << 'EOF' | sudo tee
/usr/local/bin/remove-usb.sh > /dev/null

#!/bin/bash
# 提取传递的设备节点
device_path="/sys$DEVPATH"

这里使用 $DEVPATH 环境变量来获取触发该脚本的 USB 设备路径,/sys 是 Linux 的 sysfs 文件系统,存放着系统硬件信息。

# 查找设备的 idVendor 和 idProduct 文件
while [[ ! -f "$device_path/idVendor" && "$device_path" != "/" ]]; do
device_path=$(dirname "$device_path")
done

这个循环从设备节点开始,逐层向上查找包含 idVendor 和 idProduct 文件的目录,这些文件分别存储着 USB 设备的厂商 ID 和产品 ID。

# 如果找到了 idVendor 和 idProduct,继续处理
if [[ -f "$device_path/idVendor" && -f "$device_path/idProduct" ]]; then
device_vendor=$(cat $device_path/idVendor)
device_product=$(cat $device_path/idProduct)
# 允许的 USB 设备(替换为你指定的设备信息)
allowed_vendor="2bdf" # 示例: SanDisk厂商ID
allowed_product="0777" # 示例: SanDisk产品ID
# 检查是否为允许的 USB 设备
if [[ "$device_vendor" == "$allowed_vendor" && "$device_product" == "$allowed_product" ]]; then
echo "Allowed USB device detected: Vendor=$device_vendor, Product=$device_product"
else
echo "Non-allowed USB device detected: Vendor=$device_vendor, Product=$device_product. Removing..."
# 查找设备并解除绑定
if [ -e "$device_path/driver/unbind" ]; then
basename $device_path | tee $device_path/driver/unbind
fi
fi
fi
EOF

当找到 idVendor 和 idProduct 文件时,继续后续的设备检查操作。读取 idVendor 和 idProduct 文件中的内容,分别获取设备的厂商 ID 和产品 ID。定义允许的 USB 设备厂商 ID 和产品 ID。可以根据需求替换为你想要允许的设备的具体信息。判断该设备是否为允许的设备。如果设备的厂商 ID 和产品 ID 匹配,则输出 "Allowed USB device detected",否则将其判定为不允许的设备并解除设备绑定(通过向 unbind 文件写入设备名称),从而移除设备。

Step 2: 创建 udev 规则
cat << 'EOF' | sudo tee
/etc/udev/rules.d/99-usb-autoremove.rules > /dev/null

ACTION=="add", SUBSYSTEMS=="usb", ATTR{bInterfaceClass}=="08", RUN+="
/usr/local/bin/remove-usb.sh"

这是 udev 规则的具体内容:

ACTION=="add":该规则在检测到设备添加时执行。

SUBSYSTEMS=="usb":限定规则只针对 USB 设备。

ATTR{bInterfaceClass}=="08":这个属性类代表大容量存储设备(如 USB 闪存、硬盘等)。

RUN+="/usr/local/bin/remove-usb.sh":当条件满足时,运行 /usr/local/bin/remove-usb.sh 脚本。

Step 3: 重载 udev 规则
sudo udevadm control --reload-rules

使用 udevadm 工具重新加载 udev 规则,以便新添加的规则生效。

3.编辑移除上述操作的脚本

pdsyw@pdsyw-pc:~/桌面$ vim setup-usb-autoadd.sh
pdsyw@pdsyw-pc:~/桌面$ cat setup-usb-autoadd.sh
#!/bin/bash
# Step 1: 移除脚本
rm -rf
/usr/local/bin/remove-usb.sh

# Step 2: 移除 udev 规则
rm -rf
/etc/udev/rules.d/99-usb-autoremove.rules

# Step 3: 重载 udev 规则
sudo udevadm control --reload-rules
pdsyw@pdsyw-pc:~/桌面$

4.测试移除USB存储的命令

pdsyw@pdsyw-pc:~/桌面$ sudo bash setup-usb-autoremove.sh

5.插入例外U盘可以识别

6.插入非例外U盘安全中心放行

7.文件管理器不可识别

8.测试移除USB存储禁用脚本

pdsyw@pdsyw-pc:~/桌面$ sudo bash setup-usb-autoadd.sh

9.例外USB存储识别正常

10.非例外USB存储识别正常

通过本文的介绍,您已经学会了如何在Linux系统上禁用所有USB存储设备,并为特定的设备设置例外规则。通过udev规则,您可以有效地管理USB存储设备的使用权限,既能确保系统的安全性,又能为必要的设备提供灵活的使用权限。如果您觉得这篇文章有用,请分享和转发,同时别忘了点个关注和在看,以便未来获取更多实用的技术信息和教程。感谢大家的阅读,我们下次再见!

相关推荐

ARM64内核内存布局图(ARM64内核内存布局图解)

ARM64架构处理器采用48位物理寻址机制,最大可以寻找到256TB的物理地址空间。对于目前的应用来说已经足够了,不需要扩展到64位的物理地址寻址。虚拟地址也同样最大支持48位支持,所以在处理器的架构...

ARM64 linux 调试串口通信(ARM64 linux 调试串口通信实验报告)

ARM64linux调试串口通信随着国产机普及很多工作也转移到了新平台上,以前调试设备用的笔记本电脑也换成新国产ARM64架构的了。本文以绿联CM204USB-A转RJ45Console调试线...

Gentoo Linux 终止对 Itanium IA-64 体系的支持

GentooLinux是最后几个继续维护Itanium(IA-64)架构构建的Linux发行版之一,但现在这些已停产的英特尔处理器正在逐步淘汰。由于Linux6.7内核放弃了对Itan...

如何检查 Linux 系统是 32 位还是 64 位?这9个命令查的又快又准!

在Linux系统中,位数(bit)通常指的是CPU架构的位宽,即CPU一次能够处理的数据量。32位系统和64位系统在内存寻址能力、计算性能和软件支持上存在显著差异:「32位系统」:...

调出好画面!带你玩转飞凌嵌入式AM62x开发板的显示接口

来源:飞凌嵌入式官网“显示”是嵌入式开发板最为重要的功能之一,能够支持更多种类、更高规格的显示接口,意味着它能够应对的使用场景也更加广泛。每一款嵌入式开发板在出厂前都会做屏幕调试,但在客户的实际项目开...

带你玩转AM62x开发板的显示接口——LVDS的显示和修改方式

此前小编已为大家介绍过OK6254-C开发板的RGB显示和修改方式,今天将继续为大家介绍OK6254-C开发板的LVDS显示和修改方式。话不多说,我们进入正题。1、LVDS接口规格飞凌嵌入式OK62...

AM335x继任者?AM6254性能解析(am2361p)

飞凌嵌入式FET6254-C核心板基于TISitaraTMAM62x系列工业级处理器设计开发,采用ARMCortex-A53架构,主频最高可达1.4GHz;并集成了丰富的接口,可广泛应用于的工...

如何在 Linux 发行版中安装微信和 QQ?

很多人因为工作沟通的原因需要用到微信和QQ,那么如何在Linux发行版中安装微信和QQ呢?以下是一些尝试的解决方法。QQ上一个版本的QQLinux版还是在2009年,而在现在,基于N...

MySQL:物理备份工具XBK(mysql 备份方案)

XBK的优缺点:XBK(PerconaXtraBackup)优点:1.免费2.热备:备份期间不阻塞innodb和XtraDB表,但会阻塞Myisam表3.物理备份:备份恢复快XBK缺点:1.不支持远...

AMD锐龙9 9950X CPU AIDA64跑分曝光:比7950X最高快45%

IT之家6月26日消息,Anandtech论坛网友igor_kavinski本周一发布帖子,分享了AMD旗舰锐龙99950X处理器的AIDA64基准测试跑分,与当前基于Z...

qemu linux内核(5.10.209)开发环境搭建

版本信息宿主机:ubuntu20.04.6LTS(FocalFossa)虚拟机:ubuntu20.04.6LTS(FocalFossa)安装宿主机的步骤省略,和一般的在vmware中安...

iPhone 7成刷机神器,成功运行乌班图、Linux、安卓

在智能机刚开始流行的时候,很多手机发烧友都喜欢刷机,当时民间大神们制作了特别多优化的ROM。后来随着手机硬件的逐步提升,以及厂商们对系统的大力优化,让大家对于刷机的兴趣也越来越少。不知道大家还记得这部...

12 款最佳免费开源 Linux 渲染器 | 火狐浏览器 130.0 版本更新

12款最佳免费开源Linux渲染器Linux的一大优势在于其拥有丰富的开源软件,可以满足艺术家、摄影师、动画师和设计师的需求。凭借价格低廉的硬件、免费的软件以及少量的才能和灵感,任何人都可以创...

Linux中xargs 命令详解与实用场景

xargs是Linux系统中常用的命令行工具之一,它能够从标准输入构造参数列表并传递给其他命令使用,是处理批量数据操作时的重要利器。一、xargs的基本语法xargs[OPTION]...[C...

Linux 磁盘扩容(非LVM)方式(linux扩容lvm磁盘容量)

今天接到一个客户的需求,CentOS的/分区容量太小了,OA系统所有的数据都在这下面,由于当时前同事给客户安装系统时采用了标准分区,而不是LVM逻辑卷,所以不支持在线扩容。df-hT查看磁盘使...