如何更新Kerberos缓存以存储多票据实现多设备同时认证
嘿,作为Kerberos新手遇到这个问题太正常了!默认的File缓存确实只能存一张票据,咱们换个支持多票据的缓存类型就行,下面一步步来:
1. 选择并配置支持多票据的缓存类型
Kerberos提供了两种常用的多票据缓存方案,推荐优先用内核密钥环(KEYRING),因为它更安全且持久;如果不想用密钥环,也可以用目录缓存(DIR)。
修改krb5.conf配置
找到你的krb5.conf文件(通常在/etc/krb5.conf),编辑[libdefaults]段的default_ccache_name:
方案一:使用KEYRING缓存(推荐)
替换成以下配置:
[libdefaults] # 其他原有配置保持不变 default_ccache_name = KEYRING:persistent:%{uid}
persistent:表示票据会持久化存储,重启系统后依然保留%{uid}:自动替换为当前用户ID,确保不同用户的票据相互隔离,不会冲突
方案二:使用DIR缓存
如果不想依赖内核密钥环,可以用目录缓存,每个票据会存在单独的文件里:
[libdefaults] # 其他原有配置保持不变 default_ccache_name = DIR:/var/tmp/krb5cc_%{uid}
这个目录会自动创建,每个票据对应一个以krb5cc_<uid>:<序号>命名的文件。
配置修改后,保存文件即可,不需要重启服务,后续kinit会自动读取新配置。
2. 获取多张Kerberos票据
现在用kinit命令获取不同主体(principal)的票据时,不会再覆盖旧票据,而是都存在缓存里:
- 获取第一个用户的票据:
kinit user1@EXAMPLE.COM(输入对应密码) - 获取第二个用户的票据:
kinit user2@EXAMPLE.COM(输入对应密码)
3. 查看已存储的所有票据
用klist命令就能列出缓存里的所有票据,直接运行:
klist
输出会显示每个票据的主体、有效期、缓存类型等信息。如果是DIR缓存,还能看到每个票据对应的文件路径。
4. 指定使用特定票据连接设备
当你需要用某张特定票据连接设备时,有两种方式:
方式一:用环境变量指定缓存
在执行连接命令前,通过KRB5CCNAME环境变量指定要使用的票据:
- 对于KEYRING缓存:
KRB5CCNAME=KEYRING:persistent:1000:user1@EXAMPLE.COM ssh server1.example.com
(把1000换成你的用户ID,user1@EXAMPLE.COM换成目标主体)
- 对于DIR缓存:
KRB5CCNAME=/var/tmp/krb5cc_1000:1 ssh server2.example.com
(krb5cc_1000:1是klist里显示的对应票据文件)
方式二:用kswitch切换默认票据
如果你想临时把某张票据设为默认,后续操作自动使用它,可以用kswitch命令:
kswitch user2@EXAMPLE.COM
之后运行ssh、scp等命令时,会自动使用这个默认票据。
5. 验证配置是否生效
- 先清空旧的File缓存(如果之前用过):
kdestroy - 用kinit获取两个不同主体的票据
- 运行
klist,如果能看到两个不同的票据条目,就说明配置成功了!
新手注意事项
- 确保
krb5.conf的权限是644,属主为root,避免权限不足导致的缓存读写问题 - KEYRING的
persistent类型票据会一直保留,直到你用kdestroy -p user1@EXAMPLE.COM手动删除特定票据,或者kdestroy清空所有票据 - DIR缓存的文件会存在
/var/tmp,系统定期清理临时文件时可能会被删除,所以如果需要长期保留,建议换个目录
内容的提问来源于stack exchange,提问作者Suja

