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

相关推荐

  • Linux用户如何获取系统root权限的详细操作方法?

    在Linux系统中,root权限是最高权限,拥有对系统的完全控制能力,包括系统文件修改、用户管理、服务配置等操作,普通用户通常需要通过特定方式获取root权限,以确保系统安全并遵循最小权限原则,本文将详细介绍Linux系统中获取root权限的多种方法、配置技巧及安全注意事项,Linux权限体系与root用户概述……

    2025年9月21日
    2300
  • linux如何用catch

    Linux 中,可使用 trap 命令结合函数来捕获信号,

    2025年8月18日
    3100
  • Kali Linux如何连接网络?详细联网步骤与方法解析

    Kali Linux作为一款专为渗透测试和安全审计设计的Linux发行版,其强大的功能依赖于稳定的网络连接,无论是更新系统、下载安全工具,还是进行网络扫描、漏洞利用,联网都是基础操作,本文将详细介绍Kali Linux的有线连接、无线连接方法,虚拟机环境下的联网配置,以及常见问题的解决思路,帮助用户快速掌握Ka……

    2025年10月3日
    2200
  • 如何删除已安排的Linux at任务?

    退出(删除)at任务的步骤查看当前at任务队列使用 atq 或 at -l 命令列出所有待执行任务,获取任务的唯一ID(位于第一列): atq # 示例输出: # 10 Thu Jul 11 14:30:00 2024 a root # 15 Fri Jul 12 10:00:00 2024 a user1关键……

    2025年8月7日
    4700
  • linux系统如何查看驱动

    在Linux系统中,查看驱动信息是系统管理和故障排查的重要环节,驱动作为内核与硬件之间的桥梁,其状态直接影响硬件功能的使用,本文将详细介绍通过命令行工具、文件系统及图形界面查看驱动信息的方法,帮助用户全面掌握驱动状态,命令行工具查看驱动信息命令行是Linux系统管理的核心方式,通过特定命令可快速获取驱动加载状态……

    2025年8月23日
    4000

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信