Kerberos数据库dump文件的schema是什么?如何查找其中被锁定的principal?
获取Kerberos kdb5_util dump文件字段定义的方法
- 查看本地部署的Kerberos版本对应的源码头文件:MIT Kerberos的dump字段完全对应
krb5_db_entry结构体的序列化顺序,该结构体定义在kdb.h头文件中,默认安装路径为/usr/include/krb5/kdb.h,如果你是自行编译安装的Kerberos,也可以在源码目录的src/include/kdb.h中找到对应定义,该方式是最准确的、完全适配你当前版本的schema获取方式。 - 用kadmin命令反向映射字段:执行
kadmin.local -q 'getprinc 你已知的任意principal名',将输出的结构化属性和dump文件中对应principal的行的字段逐一匹配,即可快速确定每个位置的字段含义,避免跨版本字段错位问题。
核心字段通用含义(以MIT Kerberos 1.18及以上版本为例)
你给出的示例行核心字段对应含义如下:
- 第1个字段:固定值
princ,标识当前行为principal记录,区别于policy、策略配置等其他类型的记录 - 第2个字段:principal属性掩码,账户锁定状态就存储在该字段的位标识中
- 第3个字段:密钥最长有效时长
- 第7个字段:完整的principal名称
- 第13个字段:最近一次密码修改的Unix时间戳
- 后续分段字段:不同加密类型对应的密钥密文、salt值等敏感信息
筛选被锁定的principal的方法
Kerberos的principal被锁定的核心标识是属性掩码中开启了KRB5_KDB_DISALLOW_ALL_TIX位,对应十进制值为1,只要第二个字段与1做与运算结果非0,即为被永久锁定的账户。
你可以直接用awk命令从dump文件中筛选出所有被锁定的principal:
awk '$1 == "princ" && ($2 & 1) == 1 {print $7}' /User/user/kerberos/dbdump
如果你的环境配置了密码错误次数过多触发临时锁定的策略,需要先根据前面的方法确认临时锁定对应的属性位或锁定到期时间字段的位置,再调整筛选逻辑即可。
内容的提问来源于stack exchange,提问作者yoon
相关产品推荐
相关产品推荐

