背景
我试图在用户登录时自动执行安装受密码保护的 Samba 共享的命令。问题是,我与另一个用户共享我的笔记本电脑,而且我不希望在她登录时挂载 Samba 共享。我只希望它被挂载当我登录时。这排除了编辑我的 fstab 文件的可能性,因为我希望它是特定于用户的。
先前的研究
我搜索并查看了大量与安装 Samba 共享相关的问题和答案,包括“在启动/登录时挂载 Samba 共享并使用脚本“ 和 ”正确的 fstab 条目用于在启动时挂载 samba 共享“,但大多数答案都涉及编辑 fstab,这对大多数人来说都很有效,但这不是我在这里寻找的。
我目前所做的
我可以通过执行以下操作从命令行手动挂载 Samba 共享:
sudo mount -t cifs //centaroo.local/Me /media/Me -o uid=scott,gid=scott,credentials=/home/scott/.smbcredentials,iocharset=utf8,sec=ntlm,file_mode=0600,dir_mode=0700
问题陈述
当我从命令行执行上一个命令时,它工作得很好 - 它提示我输入密码以获得 sudo 权限,我输入密码,命令就运行了。问题是,当我将完全相同的命令添加到“启动应用程序首选项”>“编辑启动程序”中的“命令”字段,保存更改,重新启动并重新登录时,Samba 共享没有像我预期的那样挂载。我怀疑这是因为我需要 root 权限才能以 sudo 身份运行,而使用“启动程序首选项”中的脚本,我无法输入它,所以脚本根本失败。
我该如何解决这个问题?
答案1
好吧,我设法自己解决了这个问题(在其他人的帮助下)。正如我所怀疑的那样,根本问题是我试图运行一个需要 root 权限的命令而不提供密码。我按照线程中的说明解决了这个问题“如何在脚本中执行 sudo 命令而不要求输入密码“。长话短说,我创建了一个名为“script-mount-samba-share.sh”的 shell 脚本,其中只包含一行我想要运行的 mount 命令:
mount -t cifs //centaroo.local/Me /media/Me -o uid=scott,gid=scott,credentials=/home/scott/.smbcredentials,iocharset=utf8,sec=ntlm,file_mode=0600,dir_mode=0700
然后,我将文件的所有权更改为 root:root,并将其权限更改为 700。接下来,我设置 sudo 以允许在不输入密码的情况下运行该脚本,然后我将启动应用程序首选项 > 编辑启动程序中的“命令”字段更改为“sudo /home/scott/script-mount-samba-share.sh”(不带引号),然后就好了。下次我重新启动并以我的用户身份登录时,Samba 共享无需我动一下手指即可挂载。我还测试了当我重新启动并以其他用户身份登录时,Samba 共享不会被挂载,这正是我想要的。
我现在试图克服的唯一小问题是,当我已经登录然后切换到其他用户时,我的 Samba 共享仍然显示在 Nautilus 的左侧导航栏中,这是有道理的,因为它是在我以自己的用户身份登录时安装的,但我不想让其他用户的安装共享显示在 Nautilus 中,所以我的下一个任务是弄清楚如何实现这一部分。
答案2
添加 mount 命令的用户名和密码非常重要,否则它可能会要求输入密码。对我来说这是有效的:
sudo mount -t cifs //centaroo.local/Me /media/Me -o uid=scott,gid=scott,user=,password=,iocharset=utf8,sec=ntlm,file_mode=0600,dir_mode=0700
当然,/etc/sudoers 中的所有更改