由于 mount 或 mount.cifs 中的新“安全修复”(我不确定是哪个),普通用户不再能够挂载任何东西,即使他们被明确允许使用user
、users
或owner
标志。出于这个原因,我更改了我的 sudo 配置,以允许我的用户无需密码即可运行我的网络共享的特定挂载命令。然后我创建了一个脚本,$HOME/bin
其中mount
包含:
sudo /usr/bin/mount "$*"
所以现在我基本上可以像以前一样使用 mount,而不必输入密码。问题是我无法使用 Nautilus 挂载我的网络共享,这要方便得多。我noauto
在 fstab 中使用标志,因为否则挂载将在我建立无线网络连接之前进行并立即失败。
共享在 Nautilus 中显示为灰色文件夹,当我单击该文件夹时,Nautilus 会尝试使用如下命令挂载共享(我认为):
/usr/bin/mount "/media/My Network Share"
失败了,因为它不使用sudo
。我曾尝试这样做:
PATH="$HOME/bin:$PATH" nautilus
但错误仍然发生,大概是因为Nautilus使用了绝对路径mount
。
所以我的问题是:有没有办法可以欺骗 Nautilus 使用sudo /usr/bin/mount
,或者甚至mount
不用绝对路径?
我最后的办法基本上是移动将二进制文件mount
复制到其他地方,并用 bash 脚本替换它。bash 脚本会检查哪个用户正在执行它,如果是我的用户,它会附加sudo
在命令前面。否则,它只会正常调用实际的挂载可执行文件。我希望避免采取如此激烈的措施,因为我很容易破坏我的系统,无法修复。
答案1
通过在需要调用的可执行文件上设置 setuid 属性,您可以使 Linux 二进制文件具有 root 权限。您可能还想创建一个仅具有挂载权限的组(除非是单个安装,那么您只需使用您的用户组即可)。因此,在 root shell 中执行如下操作:
# groupadd mounters
# usermod -a -G mounters yourusername
# chgrp mounters /bin/mount
# chmod g+s /bin/mount
这样就创建了一个名为“mounters”的组,将您的用户添加到该组,然后将 /bin/mount 上的组更改为“mounters”,然后在 /bin/mount 中为该组设置 setuid 属性。如果您随后执行该二进制文件,则实际上应该以 root 身份执行它。
查看http://en.wikipedia.org/wiki/Setuid了解更多信息。