Linux系统如何禁止USB设备的使用?

在Linux系统中,禁止USB设备接入是常见的安全管理需求,尤其在需要防止数据泄露、未授权设备接入或限制外设使用的场景下,以下从内核模块控制、设备级管理、运行时干预等多个维度,详细介绍Linux禁止USB的方法及操作步骤。

linux如何禁止usb

通过内核模块禁用USB存储设备

内核模块是Linux设备驱动的核心形式,通过禁用相关模块可从根本上阻止USB设备的功能。

操作步骤:

  1. 识别当前加载的USB模块
    使用lsmod | grep usb命令查看已加载的USB相关模块,常见模块包括usb-storage(USB存储设备)、uas(USB Attached SCSI)等。

  2. 创建模块黑名单配置
    /etc/modprobe.d/目录下创建新的配置文件(如usb-block.conf),添加以下内容:

    blacklist usb-storage  
    blacklist uas  

    此操作会阻止系统加载USB存储模块,使USB存储设备(如U盘、移动硬盘)无法被识别。

  3. 更新initramfs并重启
    执行update-initramfs -u(Ubuntu/Debian)或dracut -f(CentOS/RHEL)更新初始内存盘,确保黑名单在重启后生效,最后重启系统:reboot

注意事项:

  • 此方法仅对存储设备有效,若需禁用所有USB设备(如鼠标、键盘),可添加blacklist usbblacklist ehci_hcd(USB 2.0控制器)等模块。
  • 禁用后需通过物理方式(如BIOS/UEFI禁用USB控制器)或恢复模块配置才能重新启用。

通过udev规则实现设备级禁用

udev是Linux的设备管理器,通过编写规则可针对特定USB设备(如通过VID/PID识别)实现动态禁用,避免影响其他USB设备。

操作步骤:

  1. 获取目标设备信息
    插入USB设备后,执行lsusb命令,输出示例为Bus 001 Device 005: ID 0781:5591 SanDisk Corp. Ultra Fit,其中0781为厂商ID(VID),5591为产品ID(PID)。

    linux如何禁止usb

  2. 创建udev规则文件
    /etc/udev/rules.d/目录下创建规则文件(如99-disable-usb.rules),添加以下内容:

    # 禁用特定VID/PID的设备  
    SUBSYSTEM=="usb", ATTR{idVendor}=="0781", ATTR{idProduct}=="5591", RUN+="/bin/sh -c 'echo 1 > /sys/bus/usb/devices/%s/driver/unbind'"  

    %s为设备总线地址(如1-5),规则会在设备接入时自动执行unbind操作,使其无法被驱动。

  3. 重新加载udev规则
    执行udevadm control --reload-rules重新加载规则,或拔插设备使规则生效。

优点:

  • 精准控制:仅禁用目标设备,不影响其他USB设备(如鼠标、键盘)。
  • 动态生效:无需重启,设备接入时自动禁用。

通过sysfs文件系统临时禁用

sysfs是Linux内核提供的虚拟文件系统,可直接操作USB设备状态,适合临时禁用场景。

操作步骤:

  1. 定位设备目录
    查看USB设备列表:ls /sys/bus/usb/devices/,找到目标设备目录(如1-1)。

  2. 执行unbind操作
    向设备的driver/unbind文件写入1,禁用设备驱动:

    echo 1 > /sys/bus/usb/devices/1-1/driver/unbind  
  3. 恢复设备
    若需重新启用,可执行echo 1-1 > /sys/bus/usb/drivers/usb/bind(需确保驱动已加载)。

    linux如何禁止usb

注意事项:

  • 此方法为临时禁用,重启后失效,适合调试或短期管理。
  • 操作需root权限,否则会提示权限拒绝。

通过systemd服务实现持久化禁用

结合systemd服务,可在系统启动时自动执行禁用USB的命令,实现持久化控制。

操作步骤:

  1. 创建systemd服务文件
    /etc/systemd/system/目录下创建服务文件(如disable-usb.service如下:

    [Unit]  
    Description=Disable USB Storage Devices  
    DefaultDependencies=no  
    [Service]  
    Type=oneshot  
    ExecStart=/sbin/modprobe -r usb-storage  
    ExecStart=/sbin/modprobe -r uas  
    RemainAfterExit=yes  
  2. 启用并启动服务
    执行以下命令启用服务:

    systemctl enable disable-usb.service  
    systemctl start disable-usb.service  

优点:

  • 持久化控制:服务随系统启动自动执行,无需手动干预。
  • 可扩展性:可结合其他命令(如udev规则)实现更复杂的禁用逻辑。

方法对比与适用场景

为便于选择,以下总结不同方法的优缺点及适用场景:

方法名称 适用场景 优点 缺点 持久化
内核模块黑名单 彻底禁止USB存储设备 底层控制,彻底禁用 影响所有USB设备,需重启
udev规则 针对特定设备精准禁用 不影响其他设备,动态生效 需设备VID/PID,规则编写复杂
sysfs临时禁用 临时调试或短期禁用 无需配置,操作简单 重启失效,仅临时生效
systemd服务 系统启动时自动禁用 持久化可控,可扩展 需服务配置,相对复杂

注意事项

  1. 备份配置:修改内核模块或udev规则前,建议备份原配置文件,避免误操作导致系统异常。
  2. 区分设备类型:若需保留鼠标、键盘等输入设备,避免使用blacklist usb等全局禁用命令,优先选择udev规则精准控制。
  3. 验证禁用效果:禁用后可通过lsusbdmesg | grep usb命令确认设备是否被识别,或尝试接入USB设备验证功能是否受限。

相关问答FAQs

Q1:如何恢复被禁用的USB设备?
A:根据禁用方法选择恢复方式:

  • 内核模块黑名单:删除/etc/modprobe.d/下的配置文件,执行update-initramfs -u并重启。
  • udev规则:删除或注释/etc/udev/rules.d/中的对应规则,执行udevadm control --reload-rules
  • sysfs临时禁用:执行echo <设备地址> > /sys/bus/usb/drivers/usb/bind(如echo 1-1 > /sys/bus/usb/drivers/usb/bind)。
  • systemd服务:执行systemctl disable disable-usb.service && systemctl stop disable-usb.service

Q2:如何仅禁止USB存储设备而不影响鼠标键盘?
A:推荐使用udev规则精准控制,步骤如下:

  1. 通过lsusb识别存储设备的VID/PID(如0781:5591)。
  2. 创建udev规则文件(如99-disable-storage.rules),添加:
    SUBSYSTEM=="usb", ATTR{idVendor}=="0781", ATTR{idProduct}=="5591", RUN+="/bin/sh -c 'echo 1 > /sys/bus/usb/devices/%s/driver/unbind'"  
  3. 重新加载规则:udevadm control --reload-rules
    此方法仅禁用特定存储设备,鼠标、键盘等输入设备因VID/PID不同可正常使用。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/24601.html

(0)
酷番叔酷番叔
上一篇 2025年9月17日 09:02
下一篇 2025年9月17日 09:11

相关推荐

  • Windows装Linux,虚拟机还是双系统?

    虚拟机安装(推荐新手)优点:无需分区,不破坏原系统,安全便捷,工具:VirtualBox(免费开源)步骤:下载资源从官网下载 VirtualBox 和 Linux 镜像(如 Ubuntu),安装VirtualBox双击安装包,按提示完成安装(默认设置即可),创建虚拟机打开VirtualBox → 点击“新建……

    2025年7月9日
    12700
  • Linux如何精确定位硬盘位置与方法?

    在 Linux 系统中,定位硬盘信息是系统管理、故障排查或存储配置的基础操作,无论是识别物理硬盘的型号、容量,还是查看分区状态、挂载点,都需要通过命令行工具结合系统文件来实现,以下从不同维度详细说明如何定位硬盘信息,通过设备文件定位物理硬盘Linux 系统将存储设备抽象为设备文件,存放在 /dev 目录下,不同……

    2025年9月23日
    10000
  • Linux系统里出现文件如何正确删除?

    在Linux系统中,删除文件或目录是日常操作,但不同场景需要使用不同的命令和选项,误操作可能导致数据丢失或系统问题,以下是常见删除场景的详细操作方法和注意事项,基础删除命令:rmrm(remove)是Linux中最常用的删除命令,主要用于删除文件或目录(需配合选项),删除普通文件直接使用rm 文件名即可删除目标……

    2025年10月7日
    24100
  • Linux下MQ 7.0如何安装?

    在Linux环境下安装MQ(以RocketMQ 7.0为例)需要经过环境准备、软件下载、配置部署、服务启动及验证测试等步骤,以下是详细操作流程:环境准备在安装RocketMQ 7.0前,需确保系统满足基础要求,具体如下表所示:组件要求操作系统CentOS 7.4+、Ubuntu 20.04 LTS等主流Linu……

    2025年9月11日
    9500
  • linux中run如何安装

    Linux中安装run可使用包管理工具,如sudo apt-get install run(Debian/Ubuntu)

    2025年8月9日
    8900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信