如何使用Kerberos和AFS票证提供已在运行的进程?

时间:2014-05-09 17:49:35

标签: process kerberos gnu-screen openafs

我有一台Linux服务器使用Kerberos进行用户身份验证,AFS用于用户住宅。当我使用可转发的Kerberos票证登录机器时(我想)PAM也负责我的AFS身份验证,因此我在登录后自动访问我的AFS主页。

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

下次当我登录机器时,如何使用新的Kerberos票证“提供”我已运行的屏幕会话及其中运行的应用程序(流程本身),并使其能够再次访问我的AFS主页不得不重启吗?

2 个答案:

答案 0 :(得分:5)

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

如果您想了解,请详细说明正在进行的操作。我假设您正在通过ssh登录并且正在使用PAM,但同样的一般过程也适用于其他设置:

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

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

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

答案 1 :(得分:2)

"对"答案是使用像krenew或kstart这样的东西来监控你的 屏幕会话并确保它具有有效的tgt和afs令牌。大多数网站允许您续订最多7天的机票。

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

KRB5CCNAME=FILE:/tmp/krb5cc_7472_lIwDv27056

然后在/ proc系统中查找并找到屏幕进程的KRB5CCNAME值,并将现有票证复制到该文件位置。

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

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

相关问题