You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu下修改U盘权限方法及U盘权限管控安全工具开发求助

Ubuntu系统U盘权限管理与自动安全控制方案

一、如何修改U盘的权限?

Ubuntu下U盘默认会自动挂载到/media/<你的用户名>/<U盘名称>路径下,修改权限分临时生效和永久生效两种方式:

临时修改(重启/重新挂载后失效)

  1. 先找到U盘的挂载点:
    运行df -h或者lsblk命令,找到类似/media/nitin/MyUSB的路径,这就是你的U盘挂载点。
  2. 修改权限:
    比如要让所有用户都能读写U盘,执行:
    sudo chmod 777 /media/nitin/MyUSB
    
    如果你只想让当前用户拥有读写权限,可以用:
    sudo chmod 700 /media/nitin/MyUSB
    

永久修改(重启后依然生效)

这种方式需要修改/etc/fstab配置文件:

  1. 获取U盘的UUID:
    运行blkid命令,找到对应U盘的UUID(比如UUID=1234-ABCD,格式根据文件系统不同略有差异)。
  2. 编辑/etc/fstab
    sudo nano /etc/fstab
    
    添加一行配置,以vfat格式的U盘为例:
    UUID=1234-ABCD /media/MyUSB vfat defaults,umask=000 0 0
    
    如果是ext4格式,改成:
    UUID=xxxxxx-xxxx-xxxx-xxxx-xxxxxx /media/MyUSB ext4 defaults,uid=1000,gid=1000 0 2
    
    uid=1000是你的用户ID,可以用id -u查看)
  3. 保存后重新挂载:
    sudo mount -a
    

二、实现U盘插入时自动移除权限,验证密码后恢复的安全工具

针对你的需求,我们可以通过udev规则+Shell脚本的组合来实现,完美适配Ubuntu 16.04 LTS:

步骤1:编写核心控制脚本

创建一个名为usb-security.sh的脚本,放在/usr/local/bin/目录下(系统级可执行脚本的标准路径):

#!/bin/bash

# 获取当前插入U盘的挂载点(通过udev传递的DEVNAME变量)
MOUNT_POINT=$(findmnt -n -o TARGET "$DEVNAME")
if [ -z "$MOUNT_POINT" ]; then
    echo "未找到U盘挂载点,脚本退出" >> /var/log/usb-security.log
    exit 1
fi

# 备份当前U盘挂载点的权限,存到临时文件
PERM_BACKUP="/tmp/usbdrive_perm_$(basename "$MOUNT_POINT")"
stat -c "%a" "$MOUNT_POINT" > "$PERM_BACKUP"

# 移除U盘的所有权限(000意味着任何用户都无法访问)
sudo chmod 000 "$MOUNT_POINT"
echo "已移除U盘[$MOUNT_POINT]的所有权限" >> /var/log/usb-security.log

# 提示用户输入系统密码并验证
echo -e "\n请输入系统密码以恢复U盘访问权限:"
read -s USER_PWD

# 验证密码是否正确(利用sudo的验证机制)
echo "$USER_PWD" | sudo -S true > /dev/null 2>&1
if [ $? -eq 0 ]; then
    # 密码正确,恢复原有权限
    ORIG_PERM=$(cat "$PERM_BACKUP")
    sudo chmod "$ORIG_PERM" "$MOUNT_POINT"
    rm "$PERM_BACKUP"
    echo "密码验证成功,已恢复U盘[$MOUNT_POINT]的权限" >> /var/log/usb-security.log
    echo "权限已恢复,可正常访问U盘!"
else
    echo "密码错误,无法恢复U盘权限" >> /var/log/usb-security.log
    echo "密码错误,请重试!"
fi

然后给脚本添加执行权限:

sudo chmod +x /usr/local/bin/usb-security.sh

步骤2:配置udev自动触发规则

udev是Linux系统中管理设备事件的工具,我们可以通过它监听U盘插入事件,自动执行上面的脚本:

  1. 创建udev规则文件:

    sudo nano /etc/udev/rules.d/99-usb-security.rules
    
  2. 添加以下规则内容:

    ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[b-z][0-9]", RUN+="/usr/local/bin/usb-security.sh"
    

    解释:

    • ACTION=="add":当设备插入系统时触发
    • SUBSYSTEM=="block":匹配块存储设备(U盘属于这类)
    • KERNEL=="sd[b-z][0-9]":匹配U盘设备(通常系统盘是sda,所以U盘从sdb开始,[0-9]是分区号)
    • RUN+="/usr/local/bin/usb-security.sh":触发执行我们的脚本
  3. 重新加载udev规则,让配置生效:

    sudo udevadm control --reload-rules
    

步骤3:测试与注意事项

  • 插入U盘后,你会在终端看到密码提示(如果是图形界面,也可以修改脚本调用zenity --password来弹出图形化密码输入框)
  • 脚本中添加了日志到/var/log/usb-security.log,方便你调试排查问题
  • 确保你的用户拥有sudo权限(Ubuntu默认普通用户都具备),这样才能执行修改权限的命令
  • 如果不想每次都输入密码,可以修改sudoers文件让脚本无需密码执行,但这会降低安全性,不推荐

内容的提问来源于stack exchange,提问作者Nitin

火山引擎 最新活动