我需要做什么才能允许 shell 脚本在不使用 sudo 的情况下运行“mount”和“umount”?

我需要做什么才能允许 shell 脚本在不使用 sudo 的情况下运行“mount”和“umount”?

背景:我正在使用 Python 和 Shell 脚本尝试创建一个简单的应用程序,使用 dmenu 运行来挂载/卸载驱动器。

我目前的问题是安装驱动器的命令位于shell脚本文件中,并且该命令需要root权限才能运行。

出问题的部分正是这个:

mount ${DRIVE} ${DESTINATION}

我做了一些研究,“不使用 sudo 运行挂载”问题的大多数答案都指向编辑 fstab 文件并手动添加磁盘。

我想知道是否有另一种方法,无需让用户编辑系统文件/配置。或者至少自动完成此配置。

答案1

您需要某种方式来限制用户可以使用的 mount 命令的可能参数,否则恶意用户可以通过挂载某些东西来轻松接管系统,/etc这样系统就会使用攻击者的版本/etc/shadow而不是真正的版本。效果就像攻击者可以用攻击者知道的密码暂时替换所有用户的密码一样。

如果用户只需要将一组固定的文件系统挂载/卸载到一组固定的挂载点,则只需/etc/fstab使用userusers挂载选项将它们添加到可能是一个有效的解决方案。

如果您无法预测用户需要安装的设备名称,或者用户需要能够将其安装到他/她可以访问的任意位置,那么您的问题就更困难了。也许允许用户仅将文件系统安装到固定位置,然后教用户使用ln -s /actual/mount/point /desired/location创建符号链接以使文件出现在需要的位置?

答案2

这个问题更简单、更安全的答案是使用udisks2而不是mount直接使用。它由 Thunar 等文件管理器使用,并且不需要 root 权限。该工具将驱动器安装在 上/run/media/<username>/

要安装驱动器,请udisksctl使用mount

udisksctl mount -b /dev/sdbX

用于unmount卸载。

答案3

您可以编辑用户权限文件并授予该用户使用挂载的权限。

使用 visudo 并添加这样的行(更改您自己的用户的 user_name )

user_name ALL=NOPASSWD: /bin/mount

相关内容