PDa*_*ani 5 kerberos gnu-screen process openafs
我有一台Linux服务器使用Kerberos进行用户身份验证,AFS用于用户住宅.当我使用可转发的Kerberos票证登录机器时(我想)PAM也负责我的AFS身份验证,因此我在登录后自动访问我的AFS主页.
假设我登录,然后创建一个屏幕会话并在其中启动一个应用程序.然后我分离我的屏幕会话,并从机器注销.我的Kerberos票证会自动丢弃,因此我在后台运行的屏幕会话以及在其中运行的应用程序无法访问我的AFS主页.这是正常的,它很好.
下次登录机器时,如何使用新的Kerberos票证"提供"我已运行的屏幕会话及其中运行的应用程序(流程本身),并使其能够再次访问我的AFS主页而无需重新启动它?
小智 5
您应该能够连接到屏幕会话,创建它里面一个新的窗口/"屏幕"(默认的配置,你可以按做到这一点C-a C-c),只是运行kinit && aklog.您不需要在现有的正在运行的应用程序内部运行它或类似的东西; 你只需要在同一个屏幕会话中的某个地方运行它.之后,您可以分离屏幕并注销,屏幕会话仍然应该有您的凭据(直到它们过期;您可以使用krenew它们让它们持续更长时间,但不是永远).
如果你想知道的话,可以更详细地解释发生了什么.我假设您正在通过ssh登录并使用PAM,但同样的一般过程也适用于其他设置:
当您第一次登录时,PAM会为您分配一个PAG(AFS令牌的一种容器),并运行一些kinit与aklogPAG 相同的东西,并在PAG内部为您提供AFS令牌.然后,您的shell将在该PAG内运行,因此您在该shell中运行的所有内容都与该PAG及其凭据相关联.这包括screen您创建的会话.
当您注销时,PAM配置会破坏您的凭据,这意味着它会破坏与该PAG关联的AFS令牌.这就是屏幕会话丢失凭据并失去对主目录的访问权限的原因:该PAG的令牌已被破坏.
稍后,如果您再次登录,则会为您分配一个新的单独PAG,并再次获得AFS令牌.旧屏幕会话仍然与其他PAG相关联,其中PAG被销毁.所以,如果你连接到屏幕会话,并运行kinit和aklog地方在它的内部,这将创建与从你第一次登录的老PAG相关的新的令牌.然后,您可以从屏幕会话分离和注销,以及您当前PAG中的令牌将被销毁.但是屏幕会话的PAG没有受到影响,因为PAM和其他任何东西都不知道该PAG了.所以它的代币将一直有效,直到它们到期为止.
“正确”的答案是使用 krenew 或 kstart 之类的东西来监视您的屏幕会话并确保它具有有效的 tgt 和 afs 令牌。大多数网站允许您将机票续订最长 7 天。
然而,这不是你问的问题。门票部分很简单。环境变量 KRB5CCNAME 存储您的 kerberos 票证的位置。一般来说,它看起来像这样
KRB5CCNAME=FILE:/tmp/krb5cc_7472_lIwDv27056
Run Code Online (Sandbox Code Playgroud)
因此,在 /proc 系统中查找并找到屏幕进程的 KRB5CCNAME 值,并将现有票证复制到该文件位置。
AFS 令牌部分要棘手得多,如果您可以在复制票证后让屏幕进程以某种方式运行 aklog,那是最简单的解决方案。
有用于提取和设置令牌的工具。gettoken 和 settoken,但我知道没有直接的方法可以使用它们为任意进程设置令牌。AFS 令牌作为进程数据的一部分存储在内核中。这就是为什么当您在使用 AFS 的计算机上使用 groups 命令时,您会看到有趣的高编号组。