原文链接:【信创】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存储设备的使用权限,既能确保系统的安全性,又能为必要的设备提供灵活的使用权限。如果您觉得这篇文章有用,请分享和转发,同时别忘了点个关注和在看,以便未来获取更多实用的技术信息和教程。感谢大家的阅读,我们下次再见!