有没有好方法允许非 root 用户在 Linux 上挂载任意外部 USB 驱动器?

bol*_*ind 7 redhat fuse exfat rhel8 rocky-linux

我们遇到的情况是,站点办公室拥有几台 Rocky Linux 8 服务器,并定期从客户端接收大量数据。数据到达各种外部 USB 硬盘驱动器和偶尔的 USB 记忆棒。这些驱动器可以具有各种文件系统,但最常见的是 NTFS 和 exFAT。

RL8 本身支持 NTFS,但不支持 exFAT。我们使用了 rpmfusion 中的 fusion-exfat 包。(https://github.com/relan/exfat)。

我希望我的用户(没有也不应该拥有 root 访问权限)能够顺利地安装它们。之前,我们使用过 pmount,但 pmount 与 exFAT 配合不佳。我认为这是因为它是 FUSE,而不是因为它是 exFAT。

有没有一种好的、安全的方法来实现这一目标?

编辑:pmount 似乎是 mount 的一个非常薄的包装,并且权限是通过可执行文件上的 setuid 位获得的。所以基本上它是一组有限的安装命令,而 exfat 不是其中之一。这里有一些讨论:https://bugs.debian.org/cgi-bin/bugreport.cgi ?bug=755434,这里有一个建议的补丁:launchpadlibrarian.net/229524614/pmount.exfat.patch

小智 8

您可以使用udisks2,它允许用户在没有 root 访问权限的情况下管理和安装存储设备。

设置

  • 安装工具:sudo dnf install udisks2 ntfs-3g fuse-exfat
  • 允许用户管理:sudo usermod -a -G disk <username>

组中的非 root 用户disk可以使用udisksctl命令行工具来管理和挂载外部驱动器。

替换<username>为您想要允许管理驱动器的用户。

使用示例

  • 安装驱动器:udisksctl mount -b /dev/sdXY
  • 卸载驱动器:udisksctl unmount -b /dev/sdXY
  • 获取信息:udisksctl info -b /dev/sdXY

  • 简而言之,授权规则是一个简短的 Javascript 函数,当请求操作时调用该函数,并为其指定操作名称和发起该操作的用户;你可以使用action.lookup方法来了解它要求挂载的内容和位置,并决定是否允许它。它非常灵活。 (3认同)
  • @bolind 真正决定哪个用户可以使用 udisks2 挂载块设备的是 polkit 策略。并且 udisks2 不允许用户指定要使用的安装点。(我认为,尽管 polkit 策略可以使用用户组来确定允许哪些帐户执行哪些操作。) (2认同)
  • @Saxtheowl 添加到“disk”组与 Udisk 的运行方式无关。它的使用由 Tom Yan 解释,与 Udisk 无关;相反,它是所有块设备的组所有者。对于 Udisk,授权控制通常在 `/usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy` 中定义,您可以在 /etc/... 中覆盖这些并定义您自己的授权规则,如中所述例如,[man 8 polkit](https://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html#polkit-rules),使用专用组来启用安装。有关更多信息,请参阅其示例。 (2认同)