Kerberos身份识别机制及远程会话认证留存问题咨询
让我逐个帮你拆解这些Kerberos相关的问题:
Kerberos是基于票据认证的信任中介系统,核心依赖KDC(密钥分发中心)完成身份校验,整个流程可以分成5个关键步骤:
- 第一步:用户向KDC的AS(认证服务)发起请求,申请获取TGT(票据授权票据)。这一步用户会用自己密码生成的密钥加密时间戳,以此证明自己知晓正确的密码。
- 第二步:KDC的AS验证用户身份(比对数据库中的用户信息,确认加密时间戳有效),验证通过后,会生成一个用KDC自身密钥加密的TGT,同时附带一个会话密钥(用用户密码密钥加密),一起返回给用户。
- 第三步:后续用户访问任何Kerberos认证的服务(比如SSH、HDFS)时,会向KDC的TGS(票据授予服务)发送请求,带上TGT和目标服务的标识信息。
- 第四步:TGS解密并验证TGT的有效性(检查签名、有效期、用户身份等),通过后生成针对目标服务的服务票据(用服务自身密钥加密),同时附带一个和服务通信的会话密钥,返回给用户。
- 第五步:用户将服务票据发送给目标服务,服务用自己的密钥解密票据,确认票据中的用户身份、有效期、会话密钥等信息无误后,就完成了身份确认,建立安全通信链路。
2.1 下次SSH登录时klist显示已认证的现象如何实现?
这是因为Kerberos的凭证默认存储在凭证缓存文件中,系统默认的缓存路径是/tmp/krb5cc_<UID>——root用户的UID是0,所以对应的缓存文件是/tmp/krb5cc_0。
当你第一次以root执行kinit获取凭证后,这个缓存文件就会被创建并写入有效的Kerberos票据。下次你以root身份SSH登录时,Kerberos客户端会自动读取这个缓存文件,只要票据还在有效期内,klist就会显示已处于认证状态。
另外,如果你的SSH配置开启了GSSAPIAuthentication,甚至可能在SSH登录时自动复用或获取凭证,但你遇到的情况本质是复用了root用户名下的凭证缓存文件。
2.2 我的主体是否与SSH密钥绑定?
完全没有绑定。Kerberos主体和SSH密钥属于两个完全独立的认证体系:
- SSH密钥是基于公钥加密的认证方式,靠本地私钥与服务器端存储的公钥匹配完成身份校验。
- Kerberos主体是依赖KDC发放的票据完成认证,和SSH密钥没有任何关联。你只是在同一个root用户会话中分别使用了两种认证方式,它们之间没有绑定关系。
2.3 若未执行kdestroy,其他以root身份登录服务器的用户能否冒充我的身份?
绝对可以。root用户拥有系统的最高权限,能够直接读取/tmp/krb5cc_0这个凭证缓存文件。任何能以root身份登录服务器的用户,都可以直接使用这个缓存中的凭证——比如执行klist查看你的认证信息,或者用该凭证访问所有Kerberos认证的服务,完全不需要知道你的Kerberos密码。
这也是为什么不推荐用root远程登录的核心原因之一:root的凭证缓存对所有拥有root权限的用户完全开放,一旦泄露会带来极高的安全风险。建议你用完后务必执行kdestroy销毁凭证,或者使用普通用户进行Kerberos认证,避免权限滥用。
内容的提问来源于stack exchange,提问作者Academiphile

