5

我有一个使用 Kerberos 进行用户身份验证和 AFS 用于用户主目录的 Linux 服务器。当我使用可转发的 Kerberos 票证登录机器时,(我想)PAM 也会处理我的 AFS 身份验证,因此登录后我会自动访问我的 AFS 主页。

假设我登录,然后创建一个屏幕会话并在其中启动一个应用程序。然后我分离我的屏幕会话,并从机器上注销。我的 Kerberos 票证会自动删除,因此我在后台运行的屏幕会话以及在其中运行的应用程序不再能够访问我的 AFS 主页。这很正常,而且很好。

下次我登录机器时,如何“提供”我已经运行的屏幕会话和在其中运行的应用程序(进程本身),并使其能够再次访问我的 AFS 主页而无需重新启动它?

4

2 回答 2

5

您应该能够附加到屏幕会话,在其中创建一个新窗口/“屏幕”(使用默认配置,您可以通过按来执行此操作C-a C-c),然后运行kinit && aklog​​. 您不需要在现有正在运行的应用程序或类似的“内部”运行它;你只需要在同一个屏幕会话中的某个地方运行它。之后,您可以分离屏幕并注销,屏幕会话应该仍然拥有您的凭据(直到它们过期;您可以使用krenew它们让它们继续运行更长时间,但不是永远)。

如果您想知道,可以更详细地解释发生了什么。我假设您正在通过 ssh 登录并且正在使用 PAM,但是相同的一般过程也适用于其他设置:

当您第一次登录时,PAM 会为您分配一个 PAG(一种用于存放 AFS 令牌的容器),并在该 PAG 中运行一些与 AFS 令牌相当的东西kinitaklog为您提供 AFS 令牌。然后,您的 shell 在该 PAG 中运行,因此您在该 shell 中运行的所有内容都与该 PAG 及其凭据相关联。这包括screen您创建的会话。

当您注销时,PAM 配置说要销毁您的凭据,这意味着它会销毁与该 PAG 关联的 AFS 令牌。这就是屏​​幕会话丢失凭据并无法访问您的主目录的原因:该 PAG 的令牌已被销毁。

稍后,如果您再次登录,则会为您分配一个新的单独 PAG,并再次获得 AFS 令牌。旧屏幕会话仍与另一个 PAG 相关联,即销毁令牌的那个。因此,如果您附加到该屏幕会话,并在其中的某个位置运行kinitaklog这将创建与您第一次登录时的旧 PAG 相关联的新令牌。然后您可以从屏幕会话中分离并注销,然后您当前 PAG 中的代币将被销毁。但是屏幕会话的 PAG 没有受到影响,因为 PAM 和其他任何东西都不再知道该 PAG。因此,它的令牌将继续有效,直到它们过期。

于 2014-05-10T19:18:30.410 回答
2

“正确”的答案是使用 krenew 或 kstart 之类的东西来监视您的屏幕会话并确保它具有有效的 tgt 和 afs 令牌。大多数网站将允许您将机票更新长达 7 天。

然而,这不是你问的问题。门票部分很容易。环境变量 KRB5CCNAME 存储您的 kerberos 票证的位置。通常它看起来像这样

KRB5CCNAME=FILE:/tmp/krb5cc_7472_lIwDv27056

因此,在 /proc 系统中四处寻找,为您的屏幕进程找到 KRB5CCNAME 的值,并将您现有的票证复制到该文件位置。

AFS 令牌部分要复杂得多,如果您可以在复制票证后让屏幕进程以某种方式运行 aklog,那是最直接的解决方案。

有用于提取和设置令牌的工具。gettoken 和 settoken,但我不知道使用它们为任意进程设置令牌的直接方法。AFS 令牌作为进程数据的一部分存储在内核中。这就是为什么当您在使用 AFS 的机器上使用 groups 命令时会看到有趣的高编号组。

于 2014-05-10T00:50:08.713 回答