我想挂载受密码保护的 SMB 共享(由 Windows 机器提供服务)。共享受用户名和密码保护,我可能不会将密码写在文件中,我想在挂载时提示输入密码。
我需要一个即使在客户端计算机上的用户没有任何管理权限时也能工作的解决方案,因此无论使用何种方法安装共享都不得让他获得 root 权限。初始安装可以以 root 身份完成。用户必须能够指定任意服务器名称。我的迫切需要是使用 Ubuntu 12.04,但解决方案适用范围越广越好。
客户端是无头的,所以我正在寻找一个命令行工具。
我试过的:
mount.cifs: 虽然它可以设置为 setuid root,但它的作者并不认为它是安全的。在下面运行它sudo有同样的问题。smbnetfs, fusesmb: 我无法说服他们中的任何一个提示我输入密码。gvfs-mount smb://servername/sharename失败并显示Error mounting location: volume doesn't implement mount.如何以非 root 用户身份从命令行挂载 Samba 共享,并显示密码提示?
我们有一个 RHEL/CentOS 7 服务器已加入的 Windows (AD) 域 (SSSD/realmd)。用户使用他们的 AD 凭据通过 SSH 登录到服务器。现在用户应该能够在 RHEL 服务器上挂载他们的一些 Windows 共享。但是,我想避免授予所有用户对 (u)mount 的 sudo 权限并为 (u)mount 设置 SUID 标志。
我发现了gvfs-mount似乎是我需要的命令,所以我继续安装了必要的软件包。由于应用程序需要访问会话 DBus,因此DBUS_SESSION_BUS_ADDRESS需要导出该变量。为了能够启动 DBus-Daemon ( dbus-launch),我安装了这个dbus-x11包。
运行命令
export $(dbus-launch)
gvfs-mount smb://DOMAIN\;USER@HOST/SHARE
Run Code Online (Sandbox Code Playgroud)
成功挂载共享。
我最初的想法是将第一行放入.bash_profile. 但是,该解决方案存在两个主要问题:
dbus-daemon都会创建一个不会在注销时终止的新实例。更糟糕的是,该软件包dbus-x11安装了/etc/X11/xinit/xinit.rc.d/00-start-message-bus.sh每次登录时已经启动一个实例的脚本,但是如何获取地址变量?理想情况下,dbus-daemon应该在登录时启动,并且应该导出地址变量。当 SSH 会话终止(注销是可选的)时,所有仍然挂载的共享都应该被卸载,并且守护进程应该被终止。我如何以优雅的方式实现这一目标?
相关,但旧的,基本上没有回答:在登录会话中重用 D-Bus 会话