如何让非root用户在Rocky Linux 8上安全挂载任意外部USB存储设备
刚好之前处理过类似的场景,给你几个靠谱的方案,从最省心的到适合怀旧党都有👇
方案一:使用udisks2(推荐,安全且易用)
udisks2是现代Linux系统标配的可移动存储管理工具,原生支持FUSE类文件系统(包括exFAT),而且通过polkit实现细粒度权限控制,比pmount的setuid方式更安全,完全适合非root用户使用。
步骤1:安装依赖
首先确保已经安装了udisks2、exFAT驱动和工具:
sudo dnf install udisks2 fuse-exfat exfat-utils
(注:fuse-exfat需要从RPM Fusion仓库获取,提前启用仓库即可)
步骤2:挂载USB设备
- 先查看当前连接的可移动设备:
udisksctl status
你会看到类似 /dev/sdb1 这样的设备路径,对应你的USB存储分区。
- 执行挂载命令(替换成你的设备路径):
udisksctl mount -b /dev/sdb1
挂载成功后,设备会自动挂载到 /run/media/你的用户名/卷名 目录下,非root用户拥有该目录的读写权限。
步骤3:卸载设备
用完后安全卸载:
udisksctl unmount -b /dev/sdb1
如果需要彻底断开设备电源(比如要拔U盘),可以再加一步:
udisksctl power-off -b /dev/sdb
权限说明
udisks2默认允许本地登录的非root用户挂载可移动存储,不需要额外配置。如果需要远程用户(比如SSH登录)也能使用,可能需要调整polkit的规则,但一般服务器场景本地用户足够用了。
方案二:给pmount添加exFAT支持(适合习惯pmount的用户)
你提到pmount不兼容exFAT是因为它没把exFAT加入支持的文件系统列表,其实可以通过修改源码重新编译来解决:
步骤1:安装编译依赖
sudo dnf install gcc make
步骤2:修改pmount源码
- 下载pmount的源码包(可以从官方仓库获取),解压后找到源码文件(比如
src/pmount.c)。 - 在代码里找到定义支持文件系统的数组(类似
static const char *allowed_fs[] = {"ext2", "ext3", ...}),把"exfat"添加进去。 - 保存修改后,编译安装:
make sudo make install
这样pmount就能识别并挂载exFAT设备了。不过要注意:pmount是setuid程序,权限控制相对简单,安全性不如udisks2,适合对pmount有依赖的场景。
方案三:通过/etc/fstab临时配置(仅适合固定设备)
如果是某个固定使用的USB设备(比如长期连接的硬盘),可以通过/etc/fstab配置让非root用户挂载:
- 先获取设备的UUID(替换成你的设备路径):
blkid /dev/sdb1
会输出类似 UUID="XXXX-XXXX" 的内容。
- 编辑/etc/fstab,添加一行:
UUID=XXXX-XXXX /mnt/usb exfat defaults,user 0 0
user选项允许非root用户挂载该设备/mnt/usb是你提前创建好的挂载点
- 非root用户就能直接执行挂载命令:
mount /mnt/usb
缺点:每个设备的UUID不一样,不适合挂载任意USB设备,仅适合固定常用的设备。
总结
- 优先推荐udisks2:安全、易用,完美支持exFAT等FUSE文件系统,不需要复杂配置,非root用户直接能用。
- 若习惯pmount:修改源码添加exFAT支持也能解决问题,但安全性略逊。
- 固定设备:用/etc/fstab的
user选项最直接,但灵活性差。
备注:内容来源于stack exchange,提问作者bolind




