以非 root 用户身份进行 Samba 挂载并提示密码

以非 root 用户身份进行 Samba 挂载并提示密码

我想要安装受密码保护的 SMB 共享(由 Windows 计算机提供服务)。共享受用户名和密码保护,我可能不会将密码写入文件中,我希望在安装时提示输入密码。

我需要一个即使客户端计算机上的用户没有任何管理权限也能工作的解决方案,因此无论使用什么方法来挂载共享,都不能允许他获得 root 权限。初始安装可以 root 身份完成。用户必须能够指定任意服务器名称。我迫切需要的是 Ubuntu 12.04,但适用范围越广的解决方案就越好。

客户端是无头的,所以我正在寻找一个命令行工具。

我尝试过的:

  • mount.cifs:虽然可以将其设置为 setuid root,它的作者认为它不安全。在下面运行它也sudo有同样的问题。
  • smbnetfs, fusesmb: 我无法说服他们中的任何一个提示我输入密码。
  • Nautilus 和 gvfs:gvfs-mount smb://servername/sharename失败并显示Error mounting location: volume doesn't implement mount.

如何以非 root 用户身份通过​​命令行挂载 Samba 共享并提示密码?

答案1

“安装位置错误:卷未实现安装”显然会翻译为“我需要 D-Bus,但它不可用”。 (谢谢venturax 的大师同事了解此信息。)在 SSH 会话中,我可以使用首先启动gvfs-mount的并且设置了dbus-daemon环境变量的。DBUS_SESSION_BUS_ADDRESS

export $(dbus-launch)
gvfs-mount smb://workgroupname\;username@hostname/sharename
# Type password
ls ~/.gvfs/'sharename on hostname'

gvfs-mount和其他 GVFS 实用程序必须全部与同一个 D-Bus 会话通信。因此,如果您使用多个 SSH 会话或以其他方式跨登录会话使用挂载,则必须:

  • 最迟在第一次需要时启动 D-Bus;
  • 只要还挂载了 GVFS 文件系统,请注意不要让 D-Bus 结束会话;
  • 登录时重用现有的 D-Bus 会话(如果有)。

跨登录会话重用 D-Bus 会话为了那个原因。

答案2

SMBNetFS 默认使用 Gnome-keyring。在 Nautilus 中浏览 Samba 共享时输入并保存在 Gnome-keyring 中的任何密码都应自动使用。因此,如果可以将密码存储在 Gnome-keyring 中,那么 SMBNetFS 会更方便。它会自动安装整个网络邻居。此信息来自示例 SMBNetFS 配置文件,但我尚未测试它,因为我不使用 Gnome。

关于在没有 X11 的情况下使用 Gnome 密钥环,请参见在没有 X 的情况下使用 gnome-keyring-daemon

相关内容