我们有一个 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
.然而,该解决方案存在两个主要问题:
- 每次有人登录时,
dbus-daemon
都会创建一个新实例,该实例在注销时不会被杀死。更糟糕的是,该包dbus-x11
安装了每次登录都会启动一个实例的脚本/etc/X11/xinit/xinit.rc.d/00-start-message-bus.sh
,但如何获取地址变量? - 如果用户忘记卸载共享,则在以后登录时无法卸载该共享,因为地址变量未知。
理想情况下,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。