带有服务名称的 Kerberos JAAS

Kerberos JAAS with Service name

我正在尝试设置 Zookeeper/Kafka Kerberos 身份验证,但我的密钥表是以一种有趣的方式创建的:

ktpass -princ zookeeper/hostname@TEST -mapuser zookeeper -mapOp add -Target TEST 

事实证明我可以做到这一点

kinit zookeeper@TEST

或者这个:

kinit zookeeper@TEST -S zookeeper/hostname@TEST

但我做不到:

kinit zookeeper/hostname@TEST
kinit: Client 'zookeeper/hostname@TEST' not found in Kerberos Database while getting initial credentials

所以这个 JAAS 文件可以工作:

Server {
       com.sun.security.auth.module.Krb5LoginModule required
       useKeyTab=true
       keyTab="/path/to/server/keytab"
       storeKey=true
       useTicketCache=false
       principal="zookeeper@TEST";
};

但这个不会:

Server {
       com.sun.security.auth.module.Krb5LoginModule required
       useKeyTab=true
       keyTab="/path/to/server/keytab"
       storeKey=true
       useTicketCache=false
       principal="zookeeper/hostname@TEST";
};

那么如何使用 JAAS 文件完成这项工作呢?我找不到拥有多个主体或指定服务名称的选项,例如 kinit?

假设您使用的是 Active Directory,则需要将您的用户主体名称 zookeeper 映射到服务主体名称

setspn -s zookeeper/localhost@TEST zookeeper

更多详情here

并且您仍然在 JAAS 文件中使用 zookeeper@TEST 作为主体。