在没有桌面的 RHEL7 上以非 root 身份挂载 CIFS 共享

在没有桌面的 RHEL7 上以非 root 身份挂载 CIFS 共享

我们有一个 Windows (AD) 域,RHEL/CentOS 7 服务器已加入该域 (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

成功挂载共享。

我最初的想法是将第一行放入.bash_profile.然而,该解决方案存在两个主要问题:

  1. 每次有人登录时,dbus-daemon都会创建一个新实例,该实例在注销时不会被杀死。更糟糕的是,该包dbus-x11安装了每次登录都会启动一个实例的脚本/etc/X11/xinit/xinit.rc.d/00-start-message-bus.sh,但如何获取地址变量?
  2. 如果用户忘记卸载共享,则在以后登录时无法卸载该共享,因为地址变量未知。

理想情况下,dbus-daemon应在登录时启动并导出地址变量。当 SSH 会话终止时(注销是可选的),所有仍然挂载的共享都应该被卸载,并且守护进程应该被终止。我如何以优雅的方式实现这一目标?

相关的,但旧的并且基本上没有回答:跨登录会话重用 D-Bus 会话

答案1

我没有使用gvfs-mount真正用于图形登录的 ,而是使用 autofs 成功完成了此操作。

我在 /etc/auto.master.d/ 中有一个名为 winhome.autofs 的 autofs 配置文件(它必须以 .autofs 结尾),它看起来像这样:

/winhome -fstype=cifs,sec=krb5,uid=&,user=&,cruid=& ://sharename/&

只要您设置了 sssd 来获取 kerberos 票证,当用户打开该目录(使用图形应用程序或通过 shell)时,它就会使用该票证自动挂载卷 \sharename\username。

相关内容