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安装tar.gz包安全吗?

    理解.tar.gz文件.tar.gz是双重压缩格式:.tar:将多个文件打包为单个归档文件(tarball),.gz:通过gzip压缩算法减小体积,此类文件常见于开源软件的源代码分发,需手动编译安装,安装前准备验证文件来源仅从软件官网或可信仓库下载(如Apache官网、GitHub Releases),检查校验……

    2025年7月26日
    15100
  • Linux如何打开RAR文件?

    方法1:使用unrar命令行工具(推荐)步骤:安装unrar根据发行版选择命令(需管理员权限):# Debian/Ubuntusudo apt update && sudo apt install unrar# CentOS/RHELsudo yum install epel-release……

    2025年7月14日
    13600
  • Linux如何运行程序与脚本?

    运行可执行程序直接运行(需可执行权限)步骤:chmod +x 程序名 # 添加可执行权限./程序名 # 执行当前目录下的程序示例:chmod +x myapp./myapp注意:若程序在系统路径(如/usr/bin),可直接输入程序名(如firefox),通过包管理器安装的程序使用系统包管理器安装的软件(如AP……

    2025年8月8日
    12600
  • Linux系统下如何连接WiFi网络?

    在Linux系统中连接WiFi根据使用场景和发行版的不同,有多种方式,包括图形界面操作、命令行工具(如nmcli)以及手动配置文件编辑等,下面将详细介绍这些方法,帮助不同用户选择适合自己的连接方式,图形界面连接(适合桌面用户)大多数Linux发行版(如Ubuntu、Mint、Fedora等)默认提供图形化网络管……

    2025年9月8日
    10800
  • Linux阻塞线程退出的有效方法是什么?

    在Linux系统中,线程阻塞是常见场景,例如等待I/O完成、获取锁、等待条件变量或睡眠等,要让阻塞的线程退出,需根据阻塞类型采取不同策略,核心思路是“中断阻塞并引导线程主动退出”,而非强制终止(可能引发资源泄漏),以下是具体方法及场景分析:针对可中断系统调用的退出方法可中断系统调用(如read、write、sl……

    2025年8月27日
    11100

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信