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

news2024/12/24 22:16:14

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2130712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS——盒子模型

首先CSS将所有的元素都看成一个盒子 盒子的组成&#xff1a; content —— 内容区域padding —— 内边距&#xff08;边框与内容间的距离&#xff09;border —— 边框线margin —— 外边距&#xff08;盒子盒子间的距离&#xff09; 这里着重说一下margin: 水平方向&#xff…

Kafka 基础与架构理解

目录 前言 Kafka 基础概念 消息队列简介&#xff1a;Kafka 与传统消息队列&#xff08;如 RabbitMQ、ActiveMQ&#xff09;的对比 Kafka 的组件 Kafka 的工作原理&#xff1a;消息的生产、分发、消费流程 Kafka 系统架构 Kafka 的分布式架构设计 Leader-Follower 机制与…

新品|瑞芯微RK3588工控机IPC8801适用AI算力、边缘计算、工业视觉

深圳触觉智能重磅推出旗舰级工控机IPC8801&#xff0c;搭载瑞芯微RK3588 ⼋核处理器&#xff1b;全铝紧凑机身、支持无风扇被动散热低噪音&#xff0c;确保设备在恶劣工业环境下稳定运行。 作为AI算力、边缘计算及工业视觉领域的高性能工控机&#xff0c;在国产化智能硬件与系统…

Axure PR 9 标签 设计交互

大家好&#xff0c;我是大明同学。 这期内容&#xff0c;我们将深入探讨Axure中可编辑标签元件设计与交互技巧。 可移除标签元件 创建可移除标签所需的元件 1.打开一个新的 RP 文件并在画布上打开 Page 1。 2.在元件库中拖出一个文本框元件。 3.选中文本框元件&#xff0c…

视频服务器:GB28181网络视频协议

一、前言 某项目中需要集成视频管理平台&#xff0c;实现分布在各省公司的摄像及接入&#xff0c;对视频进行统一管理。本项目中视频管理平台采用GB/T28181实现的监控设备接入管理平台&#xff0c;支持在开放互联网和局域网对监控设备进行远程接入、远程管理、远程调阅、录像回…

【文件包含】——日志文件注入

改变的确很难&#xff0c;但结果值得冒险 本文主要根据做题内容的总结&#xff0c;如有错误之处&#xff0c;还请各位师傅指正 一.伪协议的失效 当我们做到关于文件包含的题目时&#xff0c;常用思路其实就是使用伪协议&#xff08;php:filter,data,inpput等等&#xff09;执行…

【NOI-题解】1407. 图像相似度1330. 求最大梯形的面积1384. 靶心数1398. 奇偶统计

文章目录 一、前言二、问题问题&#xff1a;1407. 图像相似度问题&#xff1a;1330. 求最大梯形的面积问题&#xff1a;1384. 靶心数问题&#xff1a;1398. 奇偶统计 三、感谢 一、前言 欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 本章节主要对…

优秀的安防视频监控平台应该具备怎样的视频编解码能力?

随着安防技术的飞速发展&#xff0c;监控平台作为保障公共安全、维护社会秩序的重要工具&#xff0c;其性能与效率日益成为行业关注的焦点。其中&#xff0c;监控平台的视频编码能力在视频监控系统中扮演着至关重要的角色&#xff0c;视频编码技术作为监控系统的核心组成部分&a…

200美元/月的ChatGPT Pro版上线?OpenAI草莓模型曝两周内发布,但模型表现要打个问号?

夕小瑶科技说 原创 作者 | 海野 现在看到“草莓”两个字&#xff0c;我已经条件反射了&#xff0c;已经不再是之前单纯的香香甜甜的草莓了。 一早醒来&#xff0c;又发生了两件“大事”&#xff1a; 一个是OpenAI的草莓&#xff08;strawberry&#xff09;被曝要提前了&#xf…

Xorbits Inference(Xinference):一款性能强大且功能全面的大模型部署与分布式推理框架

大模型部署与分布式推理框架Xinference Xinference的基本使用概述安装启动服务模型部署模型参数配置说明 API接口概述对话接口模型列表嵌入模型Rerank模型使用Xinference SDK使用OpenAI SDK 命令行工具概述启动模型引擎参数其他操作 集成LoRA启动时集成LoRA应用时集成LoRA 部署…

Stable Diffusion绘画 | ControlNet应用-Tile(分块)—tile_resample(分块-重采样)

要想使用 SD 生成高品质图片&#xff0c;放大增加分辨率是必不可少的环节。 tile_resample(分块-重采样) 主要是将图片切分成很多个分块&#xff0c;并识别每个分块的信息&#xff0c;最终通过特定算法把分块的信息重组起来。 能有效避免直接对一整张图片统一处理&#xff0c…

TensorFlow深度学习框架改进K-means聚类、SOM自组织映射算法及上海招生政策影响分析研究...

全文链接&#xff1a;https://tecdat.cn/?p37652 分析师&#xff1a;Chen Zhang 在教育政策研究领域&#xff0c;准确评估政策对不同区域和学生群体的影响至关重要。2021 年上海市出台的《上海市初中学业水平考试实施办法》对招生政策进行了调整&#xff0c;其中名额分配综合…

LSS可视化分析

1 完整 2 去掉plt.imshow(img_show) 3 去掉plt.axis(‘off’) 4 去掉plt.annotate(cams_text[img_id].replace(‘_’, ’ ), (0.01, 0.92), xycoords=‘axes fraction’)

3C电子胶黏剂在手机制造方面有哪些关键的应用

3C电子胶黏剂在手机制造方面有哪些关键的应用 3C电子胶黏剂在手机制造中扮演着至关重要的角色&#xff0c;其应用广泛且细致&#xff0c;覆盖了手机内部组件的多个层面&#xff0c;确保了设备的可靠性和性能。以下是电子胶在手机制造中的关键应用&#xff1a; 手机主板用胶&…

【蓝桥杯省赛真题52】Scratch猪八戒落地 蓝桥杯scratch图形化编程 中小学生蓝桥杯省赛真题讲解

scratch猪八戒落地 第十五届青少年蓝桥杯scratch编程省赛真题解析 一、题目要求 编程实现 1&#xff09;点击绿旗&#xff0c;猪八戒在空中踩着一朵云&#xff0c;如图所示; 2&#xff09;1秒后&#xff0c;猪八戒踩着云向地面移动&#xff0c;如图所示; 3&#xff09;猪八…

海外问卷调查有其他方式赚美金吗?

大家好&#xff0c;我是梦蝶问卷&#xff0c;专注于海外问卷调查项目。 大家应该都了解&#xff0c;做海外问卷项目填写问卷能赚美金&#xff0c;那除此之外&#xff0c;还有其它盈利模式吗&#xff1f;答案当然是肯定的。 有创业过的朋友应该都知道&#xff0c;一个项目的每个…

spring项目期间的学习9/11

核心&#xff1a;需要计算具体要求字段出现的数量使用count&#xff0c;需要返回出现字段的数量需要使用AS,需要避免重复需要使用distinct&#xff0c;需要具体体现在8月份需要使用like 代码如下&#xff1a; selectcount(distinct device_id) as did_cnt,count(question_id) …

UDS 诊断 - RequestUpload(请求上传)(0x35)服务

UDS 诊断服务系列文章目录 诊断和通信管理功能单元 UDS 诊断 - DiagnosticSessionControl&#xff08;诊断会话控制&#xff09;&#xff08;0x10&#xff09;服务 UDS 诊断 - ECUReset&#xff08;ECU重置&#xff09;&#xff08;0x11&#xff09;服务 UDS 诊断 - SecurityA…

一篇文章,讲清SQL的 joins 语法

SQL 中的不同 JOIN 类型&#xff1a; 1. &#xff08;INNER&#xff09;JOIN&#xff08;内连接&#xff09;&#xff1a;返回两个表中具有匹配值的记录。 2. LEFT&#xff08;OUTER&#xff09;JOIN&#xff08;左外连接&#xff09;&#xff1a;返回左表中的所有记录&#…

【SQL】百题计划:SQL内置函数“LENGTH“的使用

【SQL】百题计划-20240912 方法一&#xff1a; Select tweet_id from Tweets where LENGTH(content) > 15;– 方法二&#xff1a; Select tweet_id from Tweets where CHAR_LENGTH(content)> 15;