使用 pam_mount 安装 Windows 共享 (cifs) 时出错

使用 pam_mount 安装 Windows 共享 (cifs) 时出错

我有一台已加入 Samba AD 域控制器的 Ubuntu 21.10 电脑。一切运行正常 - Kerberos 正常运行(可以使用 kinit 获取票证),winbind 正常运行(可以获取有关用户和组的信息),我能够使用域凭据登录系统。

手动挂载共享也是可行的,均使用 Kerberos 和 ntlmssp 授权:

sudo mount -t cifs //server/path /mount/point -o username=USER,domain=DOMAIN,sec=ntlmssp
sudo mount -t cifs //server/path /mount/point -o username=USER,domain=DOMAIN,sec=krb5

设置用户名(如 username=USER@DOMAIN)也有效。

问题是当用户通过 gnome 登录时我无法让 pam_mount 工作!

像这样在 pam_mount.conf.xml 中使用 krb5

<volume
      fstype="cifs"
      server="server"
      path="path"
      mountpoint="mount/point"
      options="sec=krb5"
  />

auth.conf 中出现错误

(mount.c:72): mount error(126): Required key not available

在 pam_mount.conf.xml 中使用 ntlmssp 如下

<volume
      fstype="cifs"
      server="server"
      path="path"
      mountpoint="mount/point"
      options="sec=ntlmssp"
  />

在 auth.conf 中给出了不同的错误

(pam_mount.c:173): conv->conv(...): Conversation error 

在 pam_mount 中启用调试后,我还可以在 auth.log 中看到它正在执行的确切挂载命令,当我手动运行它们时,它与上面起作用的命令相同。

我尝试了以下方法:

  • 使用不同组合的挂载选项:vers=3.0, _netdev,user,sec
  • 使用 pam_winbind 配置强制 Kerberos 将票证存储在 /tmp/krb5cc_%u 中的文件中
  • 阅读大量论坛

有任何想法吗?

答案1

我终于搞明白了。以下是有效的 pam_mount 卷配置:

<volume sgrp="DOMAIN\domain users" fstype="cifs" server="my.server.com" path="path/to/share" mountpoint="/mount/point" options="sec=krb5,cruid=%(USERUID),noexec,rw,nofail" />

关键的要求似乎是:

  • 服务器域名。Kerberos 无法为 ips 签发票证,因此您必须指定域名。
  • cruid=%(用户 ID)选项。Mount 以 root 身份执行,默认情况下它会查找属于 root 的票证文件,因此我们必须设置实际票证所有者的用户 ID。
  • sgrp="DOMAIN\域用户"属性。pam_mount 在每个新的身份验证会话(包括系统用户,如 gdm)上运行。一旦登录尝试挂载共享失败,它似乎会缓存它,甚至对于授权用户也会失败。因此,我们需要明确定义要为其挂载共享的用户。这可以通过 pam_mount 中提供的多个用户控制属性来完成。

相关内容