我有一台已加入 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 中提供的多个用户控制属性来完成。