Ubuntu下修改U盘权限方法及U盘权限管控安全工具开发求助
Ubuntu系统U盘权限管理与自动安全控制方案
一、如何修改U盘的权限?
Ubuntu下U盘默认会自动挂载到/media/<你的用户名>/<U盘名称>路径下,修改权限分临时生效和永久生效两种方式:
临时修改(重启/重新挂载后失效)
- 先找到U盘的挂载点:
运行df -h或者lsblk命令,找到类似/media/nitin/MyUSB的路径,这就是你的U盘挂载点。 - 修改权限:
比如要让所有用户都能读写U盘,执行:
如果你只想让当前用户拥有读写权限,可以用:sudo chmod 777 /media/nitin/MyUSBsudo chmod 700 /media/nitin/MyUSB
永久修改(重启后依然生效)
这种方式需要修改/etc/fstab配置文件:
- 获取U盘的UUID:
运行blkid命令,找到对应U盘的UUID(比如UUID=1234-ABCD,格式根据文件系统不同略有差异)。 - 编辑
/etc/fstab:
添加一行配置,以vfat格式的U盘为例:sudo nano /etc/fstab
如果是ext4格式,改成:UUID=1234-ABCD /media/MyUSB vfat defaults,umask=000 0 0
(UUID=xxxxxx-xxxx-xxxx-xxxx-xxxxxx /media/MyUSB ext4 defaults,uid=1000,gid=1000 0 2uid=1000是你的用户ID,可以用id -u查看) - 保存后重新挂载:
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盘插入事件,自动执行上面的脚本:
创建udev规则文件:
sudo nano /etc/udev/rules.d/99-usb-security.rules添加以下规则内容:
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":触发执行我们的脚本
重新加载udev规则,让配置生效:
sudo udevadm control --reload-rules
步骤3:测试与注意事项
- 插入U盘后,你会在终端看到密码提示(如果是图形界面,也可以修改脚本调用
zenity --password来弹出图形化密码输入框) - 脚本中添加了日志到
/var/log/usb-security.log,方便你调试排查问题 - 确保你的用户拥有sudo权限(Ubuntu默认普通用户都具备),这样才能执行修改权限的命令
- 如果不想每次都输入密码,可以修改
sudoers文件让脚本无需密码执行,但这会降低安全性,不推荐
内容的提问来源于stack exchange,提问作者Nitin




