我有一台Linux服务器,使用Kerberos进行用户身份验证,使用AFS进行用户主页。当我使用可转发的Kerberos票证登录机器时,(我假设) PAM也负责我的AFS身份验证,因此我在登录后自动获得对我的AFS主目录的访问权限。
假设我登录了,创建了一个screen会话并在其中启动了一个应用程序。然后,我分离我的屏幕会话,并从机器上注销。我的Kerberos票证会自动删除,因此在后台运行的screen会话和在其中运行的应用程序将无法再访问我的AFS主页。这是正常的,也是很好的。
下次登录机器时,如何为已经运行的screen会话和在其中运行的应用程序(进程本身)“提供”新的Kerberos票证,并使其能够再次访问我的AFS主目录,而无需重新启动它?
发布于 2014-05-11 03:18:30
您应该能够连接到screen会话,在其中创建一个新的窗口/‘screen’(使用默认配置,您可以通过按C-a C-c来完成此操作),然后只需运行kinit && aklog。您不需要在现有的正在运行的应用程序或类似的应用程序中运行它;您只需要在同一个screen会话中的某个位置运行它。在此之后,您可以分离屏幕并注销,并且screen会话应该仍然保留您的凭据(直到凭据过期;您可以使用krenew使凭据保持更长时间,但不是永远)。
更详细的解释,如果你想知道的话。我假设您是通过ssh登录的,并且使用了PAM,但相同的通用过程也适用于其他设置:
当您第一次登录时,PAM会为您分配一个PAG (一种用于存储AFS令牌的容器),并运行某种与kinit和aklog相当的东西,在该PAG中为您提供AFS令牌。然后,您的shell将在该PAG中运行,因此您在该shell中运行的所有内容都与该PAG及其凭证相关联。这包括您创建的screen会话。
当您注销时,PAM配置显示销毁您的凭据,这意味着它会销毁与该PAG关联的AFS令牌。这就是screen会话丢失凭据和访问您的主目录的原因:该PAG的令牌已被销毁。
稍后,如果您再次登录,系统会为您分配一个新的单独PAG,并再次获得AFS令牌。旧的screen会话仍然与另一个PAG相关联,即销毁令牌的PAG。因此,如果您连接到screen会话,并在其中某处运行kinit和aklog,则会在您第一次登录时创建与旧PAG关联的新令牌。然后,您可以从screen会话分离并注销,当前PAG中的令牌将被销毁。但是screen会话的PAG是原封不动的,因为PAM和其他任何东西都不再知道该PAG。因此,它的令牌将继续有效,直到过期。
发布于 2014-05-10 08:50:09
“正确”的答案是使用krenew或kstart之类的东西来监视您的screen会话,并确保它具有有效的tgt和afs标记。大多数网站将允许您续订最多7天的车票。
然而,这不是你问的问题。票证部分很简单。环境变量KRB5CCNAME存储您的kerberos票证的位置。一般来说,它看起来像这样
KRB5CCNAME=FILE:/tmp/krb5cc_7472_lIwDv27056因此,请查看/proc系统,找到屏幕进程的KRB5CCNAME值,并将现有票证复制到该文件位置。
AFS令牌部分要复杂得多,如果您能在复制票证后让屏幕进程以某种方式运行aklog,这是最简单的解决方案。
有一些工具可用于提取和设置令牌。gettoken和settoken,但我不知道使用它们为任意进程设置令牌的简单方法。AFS令牌作为进程数据的一部分存储在内核中。这就是为什么当您在使用AFS的机器上使用groups命令时,您会看到有趣的高编号组。
https://stackoverflow.com/questions/23571012
复制相似问题