目前,我们正在使用一种非常糟糕的服务器访问模型。每个人都通过 ssh 登录到同一个 unix 用户。我们有几个密钥表供每个人使用,通常使用同一个密钥表。但是有时有人需要使用其他密钥表之一。但 kinit 会将票证缓存覆盖到新主体。因此,我想知道是否可以制作一个仅在当前会话中有效且不影响同一 unix 用户的其他会话的 kinit?
感谢您的帮助!
答案1
每个人都通过 ssh 登录到同一个 unix 用户。
您可能应该解决这个问题。(共享帐户会使个人不承担责任。)
默认情况下,Kerberos 凭证缓存在 /tmp 中,但我不知道该路径是硬编码的还是从环境中派生出来的$TMPDIR
。
因此,每个会话创建一个私有的 TMPDIR(并在会话终止后清理它)的任何方法都应该适合您。
我思考您可能能够通过 PAM 来处理该问题:
libpam-tmpdir是一种方法,即设置每个会话
$TMP
&$TMPDIR
,但这对不尊重环境并直接转到的应用程序不起作用/tmp/
。或者pam_命名空间 PAM 模块,用于为具有多实例目录的会话设置私有命名空间。多实例目录根据用户名或使用 SELinux、用户名、安全上下文或两者时提供自身的不同实例。
答案2
是的,这是一个糟糕的模型,应该改变。你不仅让每个人都使用同一个用户,而且听起来你正在使用像不受保护的 ssh 私钥这样的密钥表。对于后一个问题,请查看man .k5login
gssapi ssh。
在此之前,您可以在 bash 配置文件中添加类似这样的内容:
export KRB5CCNAME=FILE:/tmp/krb5cc_$(id -u)_$(base64 /dev/urandom | head -c 10)
这应该为每个会话提供其自己的 krb5 凭证缓存。