[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-3206?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Stephane Maarek updated ZOOKEEPER-3206:
---------------------------------------
    Description: 
We're using Active Directory, and created service principals this way:

{code}
ktpass -princ ZOOKEEPER/host-1@TEST -mapuser zookeeper -mapOp  add -Target TEST
ktpass -princ ZOOKEEPER/host-2@TEST -mapuser zookeeper -mapOp  add -Target TEST
ktpass -princ ZOOKEEPER/host-3@TEST -mapuser zookeeper -mapOp  add -Target TEST
{code}

Using this format, one is not able to do {code}kinit 
ZOOKEEPER/host-1@TEST{code}, but one is able to do {code}kinit zookeeper@TEST 
-S ZOOKEEPER/host-1@TEST{code} to obtain a service ticket. 

In the Kafka project, it is fine for the JAAS file to have 
{code}principal="kafka@TEST"{code}, and automatically it seems it acquires the 
correct service ticket (I"m not sure how).

In zookeeper, things fail when a client tries to connect, due to this line:
https://github.com/apache/zookeeper/blob/master/zookeeper-server/src/main/java/org/apache/zookeeper/util/SecurityUtils.java#L170

It'd be great for Zookeeper server to have the same kind of mechanism as Kafka 
for accepting client connections. This would allow us to have 
{code}principal="zookeeper@TEST"{code} in JAAS. Otherwise, maybe support a JAAS 
new option so we can explicitly name the service ?

FYI - trying {code}principal="zookeeper/host-1@TEST"{code} does not work as due 
to how Active Directory works, it complains that the credentials cannot be 
found in the database (as we try to authenticate using the service name, not 
the user name)

I'm attaching some documentation I find relevant: 
https://serverfault.com/questions/682374/client-not-found-in-kerberos-database-while-getting-initial/683058#683058
 


  was:
We're using Active Directory, and created service principals this way:

{code}
ktpass -princ ZOOKEEPER/host-1@TEST -mapuser zookeeper -mapOp  add -Target TEST
ktpass -princ ZOOKEEPER/host-2@TEST -mapuser zookeeper -mapOp  add -Target TEST
ktpass -princ ZOOKEEPER/host-3@TEST -mapuser zookeeper -mapOp  add -Target TEST
{code}

Using this format, one is not able to do {code}kinit 
ZOOKEEPER/host-1@TEST{code}, but one is able to do {code}kinit zookeeper@TEST 
-S ZOOKEEPER/host-1@TEST{code} to obtain a service ticket. 

In the Kafka project, it is fine for the SASL file to have 
{code}principal="kafka@TEST"{code}, and automatically it seems it acquires the 
correct service ticket (I"m not sure how).

In zookeeper, things fail when a client tries to connect, due to this line:
https://github.com/apache/zookeeper/blob/master/zookeeper-server/src/main/java/org/apache/zookeeper/util/SecurityUtils.java#L170

It'd be great for Zookeeper server to have the same kind of mechanism as Kafka 
for accepting client connections. This would allow us to have 
{code}principal="zookeeper@TEST"{code} in SASL. Otherwise, maybe support a JAAS 
new option so we can explicitly name the service ?

FYI - trying {code}principal="zookeeper/host-1@TEST"{code} does not work as due 
to how Active Directory works, it complains that the credentials cannot be 
found in the database (as we try to authenticate using the service name, not 
the user name)

I'm attaching some documentation I find relevant: 
https://serverfault.com/questions/682374/client-not-found-in-kerberos-database-while-getting-initial/683058#683058
 



> Can't use Active Directory for Kerberos Authentication
> ------------------------------------------------------
>
>                 Key: ZOOKEEPER-3206
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-3206
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: kerberos
>    Affects Versions: 3.4.13
>            Reporter: Stephane Maarek
>            Priority: Major
>
> We're using Active Directory, and created service principals this way:
> {code}
> ktpass -princ ZOOKEEPER/host-1@TEST -mapuser zookeeper -mapOp  add -Target 
> TEST
> ktpass -princ ZOOKEEPER/host-2@TEST -mapuser zookeeper -mapOp  add -Target 
> TEST
> ktpass -princ ZOOKEEPER/host-3@TEST -mapuser zookeeper -mapOp  add -Target 
> TEST
> {code}
> Using this format, one is not able to do {code}kinit 
> ZOOKEEPER/host-1@TEST{code}, but one is able to do {code}kinit zookeeper@TEST 
> -S ZOOKEEPER/host-1@TEST{code} to obtain a service ticket. 
> In the Kafka project, it is fine for the JAAS file to have 
> {code}principal="kafka@TEST"{code}, and automatically it seems it acquires 
> the correct service ticket (I"m not sure how).
> In zookeeper, things fail when a client tries to connect, due to this line:
> https://github.com/apache/zookeeper/blob/master/zookeeper-server/src/main/java/org/apache/zookeeper/util/SecurityUtils.java#L170
> It'd be great for Zookeeper server to have the same kind of mechanism as 
> Kafka for accepting client connections. This would allow us to have 
> {code}principal="zookeeper@TEST"{code} in JAAS. Otherwise, maybe support a 
> JAAS new option so we can explicitly name the service ?
> FYI - trying {code}principal="zookeeper/host-1@TEST"{code} does not work as 
> due to how Active Directory works, it complains that the credentials cannot 
> be found in the database (as we try to authenticate using the service name, 
> not the user name)
> I'm attaching some documentation I find relevant: 
> https://serverfault.com/questions/682374/client-not-found-in-kerberos-database-while-getting-initial/683058#683058
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to