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

相关推荐

  • CentOS/RHEL的GDM配置为何不生效?

    在Linux系统中跳过密码登录(如自动登录)需谨慎操作,仅推荐在个人专属设备或高度受控环境中使用,避免安全风险,以下是两种主流方法:方法1:图形界面自动登录(适用于GNOME/KDE等桌面环境)打开系统设置点击桌面右上角系统菜单 → 选择「设置」(Settings),进入用户管理找到「用户」(Users)或「用……

    2025年6月27日
    8100
  • linux如何访问本地文件

    Linux 中,可通过文件路径直接访问本地文件,如 ls /home/user

    2025年8月18日
    5100
  • Linux 如何查看系统大小端模式?

    在计算机体系结构中,字节序(Byte Order)是指多字节数据在内存中的存储顺序,主要分为大端序(Big-Endian)和小端序(Little-Endian),大端序是指高位字节存储在低地址,低位字节存储在高地址,符合人类阅读习惯(如数字“0x12345678”在内存中存储为12 34 56 78);小端序则……

    2025年10月4日
    3300
  • Linux系统如何进入图形界面(GUI)的具体操作步骤是什么?

    在Linux系统中,图形用户界面(GUI)的进入方式取决于系统的安装配置、桌面环境(Desktop Environment, DE)以及显示管理器(Display Manager, DM)的设置,Linux GUI通常基于X11窗口系统或Wayland显示协议,搭配GNOME、KDE Plasma、XFCE等桌……

    2025年10月1日
    3200
  • Linux脚本如何显示行号?有哪些实现方法?

    在Linux系统中,显示脚本或文件的行号是日常开发和运维中的常见需求,无论是调试代码、查看文件结构还是定位错误,行号都能提供直观的定位信息,本文将详细介绍Linux中显示行号的多种方法,涵盖命令行工具、文本编辑器以及脚本动态行号显示等场景,并通过表格对比不同工具的适用场景和特点,最后附上相关FAQs解答常见问题……

    2025年9月19日
    5100

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信