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内核线程如何进行调度?

    Linux内核线程是运行在内核态的特殊进程,没有用户空间上下文,主要用于执行内核任务,如内存回收、软中断处理、I/O调度等,内核线程的调度是Linux进程调度的核心组成部分,其调度机制与普通用户进程既有共性也有特殊性,主要依赖于Linux的通用调度框架(如CFS)和实时调度策略,同时针对内核态任务的特殊需求进行……

    2025年9月26日
    12500
  • Linux如何查看用户ID信息?

    在Linux系统中,用户ID(UID)和组ID(GID)是操作系统用于标识用户和组的核心数值,直接决定了用户对文件、目录及系统资源的访问权限,无论是日常系统管理还是脚本开发,准确查看用户ID都是基础操作,本文将详细介绍Linux中查看用户ID的多种方法,涵盖常用命令、系统文件解析及实际应用场景,帮助用户全面掌握……

    2025年9月26日
    14700
  • Linux系统中如何具体查找已编译好的内核模块(ko)文件的存放路径?

    在Linux系统中,ko文件(内核模块目标文件)是由内核源码编译生成的可加载模块,用于扩展内核功能,如驱动程序、文件系统等,查找编译好的ko文件是系统管理和开发中的常见需求,尤其在排查驱动问题、自定义模块加载时尤为重要,以下从多个场景出发,详细说明如何定位ko文件的位置及查找方法,标准编译与安装路径Linux内……

    2025年9月30日
    12100
  • linux内存如何使用情况

    Linux中,可用free查看内存总体使用,top或htop

    2025年8月13日
    13100
  • postgresql.conf配置为何不生效?

    Linux环境下数据库备份的完整实践指南在Linux系统中执行数据库备份是保障数据安全的核心操作,作为系统管理员或运维工程师,必须掌握以下专业级备份方案,本文遵循行业最佳实践,结合可靠性(Reliability)、可恢复性(Recoverability)和安全性(Security)三大原则展开说明,备份核心原则……

    2025年7月4日
    16200

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信