使用 cifs 和 sec=krb5 进行挂载失败,并显示“所需密钥不可用”

使用 cifs 和 sec=krb5 进行挂载失败,并显示“所需密钥不可用”

问题

第一次在这里发帖,也不是最有经验的 ubuntu 用户,所以我希望我能很好地描述我的问题。

我正在尝试将具有多用户访问权限的 Windows 文件共享安装到我们的 ubuntu 系统,以便我们可以让不同的用户访问文件共享上的不同文件夹。

我们的想法是最终使用 autofs 或 pam_mount 自动挂载,但目前我只是为了测试目的而尝试手动挂载。

ubuntu 机器已加入到我们的 AD 域中,我可以使用我的个人用户帐户登录。当我尝试从我的个人用户帐户挂载文件共享时,出现了问题。它似乎正在mount -t cifs寻找 root 用户拥有的 kerberos 票证,而不是我的个人帐户拥有的 kerberos 票证。

我已经使用 ubuntu 20.04 和 24.04 对此进行了测试。

手动安装测试不起作用

当我运行以下 mount 命令时(我已经使用 vers=2.0 和 vers=3.0 进行了测试):

ahb@<domain-name>@htcondor-submit:~$ sudo mount -v -t cifs -o sec=krb5,vers=2.0,cruid=$USER,user=$USER,gid=$GID //fileport/Cluster-test /mnt2/fileport/Cluster-test

我收到错误(此外,我不知道为什么 mount 被调用两次,但我不认为这会影响任何事情):

mount.cifs kernel mount options: ip=10.1.5.45,unc=\\fileport\Cluster-test,sec=krb5,vers=2.0,cruid=1331401727,user=ahb@ad.<domain>.com,pass=********
mount.cifs kernel mount options: ip=10.1.5.45,unc=\\fileport\Cluster-test,sec=krb5,vers=2.0,cruid=1331401727,user=ahb@ad.<domain>.com,pass=********
mount error(126): Required key not available
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) and kernel log messages (dmesg)

但是,我的票证缓存中显然有一个 Kerberos 票证:

ahb@ad.<domain>.com@htcondor-submit:~$ klist
Ticket cache: FILE:/tmp/krb5cc_1331401727_WCwLhQ
Default principal: AHB@AD.<domain>.COM

Valid starting     Expires            Service principal
12/15/23 09:53:43  12/15/23 19:53:43  krbtgt/AD.<domain>.COM@AD.<domain>.COM
        renew until 12/16/23 09:53:43

它与根缓存中的 Kerberos 票证一起工作

如果我从 root 用户创建 kerberos 票证,我可以让挂载正常工作。以下是我所做的。

我以 root 身份登录并为我的个人用户创建 kerberos 票证,如下所示:

root@htcondor-submit:/# kinit AHB@AD.<domain>.COM
Password for AHB@AD.<domain>.COM: 

root@htcondor-submit:/# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: AHB@AD.<domain>.COM

Valid starting     Expires            Service principal
12/15/23 10:06:02  12/15/23 20:06:02  krbtgt/AD.<domain>.COM@AD.<domain>.COM
        renew until 12/16/23 10:05:57

此后,我以个人账户身份重新登录。现在,如果我运行与上述相同的 mount 命令,它仍然会因 cruid=$USER 选项而失败。如果我删除该选项,它会通过 root 查找 kerberos 票证所有者,并且它可以正常工作。这是命令:

ahb@ad.<domain>.com@htcondor-submit:~$ sudo mount -v -t cifs -o sec=krb5,vers=3.0,user=$USER,gid=$GID //fileport/Cluster-test /mnt2/fileport/Cluster-test
mount.cifs kernel mount options: ip=10.1.5.45,unc=\\fileport\Cluster-test,sec=krb5,vers=3.0,user=ahb@ad.<domain>.com,pass=********

现在我可以在驱动器中看到我的文件:

ahb@ad.<domain>.com@htcondor-submit:~$ ls /mnt2/fileport/Cluster-test/          
AHB-TEST

我如何让 mount -t cifs 查找由用户而非 root 拥有的 kerberos 票证?

我认为使用 root 用户创建 krb5 票证不是一个可行的选择,因为我们将有许多人使用他们的个人用户帐户登录此系统。目前,每次有人使用他们的个人帐户登录时都会创建 krb5 票证,但它们存储在他们的个人票证缓存中。

为了解决这个问题,我认为我需要弄清楚如何正确配置 kerberos 和/或 mount.cifs 来查找用户拥有的 kerberos 票证。我已经测试了 autofs 和 pam_mount,两者似乎都有类似的问题,即挂载可以工作,但只能使用 root 拥有的 krb5 票证。

非常感谢您的帮助!提前致谢,

亚历山大

相关内容