AFS 令牌存储在哪里,以及如何让它们进入运行的 Screen 会话

AFS 令牌存储在哪里,以及如何让它们进入运行的 Screen 会话

我遇到以下情况,我有一个正在运行的 GNU 屏幕会话,我无法再访问 AFS - 我的令牌已过期。但是我可以从新的 shell 访问它。差异为这个问题是我没有 Kerberos 票证(嗯,不适用于 aklog 正在寻找的领域),所以我无法调用 aklog。我也买不到这样的票。我不知道 AFS 是如何设置的,但它确实有效。

现在,Kerberos 票证“存储”在 /tmp/krb5cc* 中,并由名为 KRB5CCNAME 的变量指向。如果我在 Kerberos 和 screen/tmux 方面遇到此问题,我可以执行 kinit,或者通过设置 KRB5CCNAME 将较新的票证移植到旧 shell。

我想知道 AFS 凭据是如何指向的,以及我是否可以类似地将它们从外壳(我 ssh 进入的外壳,具有 AFS 访问权限)移植到内外壳(我之后得到的外壳screen -r,它不再具有 AFS 访问权限) 。两个 shell 之间似乎没有更改相关的环境变量。strace tokens告诉我它只是访问/proc/fs/openafs/afs_ioctl,这表明它与进程相关并使用特殊的内核功能,这将使其变得非常困难。有什么想法可以让我在不关闭 shell 并打开一个新 shell 的情况下重新获得 AFS 访问权限吗?

答案1

当您通过 ssh 登录并且 pam_afs_session.so 处于活动状态时,它将生成 Kerberos 票证并使用它来生成 AFS 令牌。当您注销时,它将删除 Kerberos 票证和 AFS 令牌。

正如您所注意到的,Kerberos 票证存储在文件中,AFS 令牌存储在内核中的 PAG(进程身份验证组)中。当您通过第二个 SSH 会话进行连接时,pam_afs_session.so 库将在新文件中创建新的 Kerberos 票证,并在新的 PAG 中创建新的 AFS 令牌。

在 GNU 屏幕会话中保持 AFS 令牌处于活动状态的最简单方法是:

  1. 制作新的 Kerberos 票证文件。现有的可能是这样的/tmp/krb5cc_UID_RANDOM。使用新的 RANDOM 字符串制作一个。
  2. 将现有票证文件复制到您刚刚创建的新票证文件。
  3. 将 KRB5CCNAME 环境变量更改(并导出)为您创建的新名称。
  4. 启动屏幕-r
  5. 您现在可以从外壳注销。这将从旧票证文件中删除您的 Kerberos 票证,但您的副本在内壳中仍然有效。但是,它还会删除您的 AFS 令牌,因此...
  6. 当您重新连接到内壳时,运行阿克洛格。这会将您保存的 Kerberos 票证复制到新的 AFS 令牌。它应该保持有效直到过期。在退出内壳之前,您可能应该运行克破坏删除您不再需要的 Kerberos 票证。

相关内容