Re: Enabling Auth between Zookeeper Servers

2020-02-18 Thread Szalay-Bekő Máté
congrats! :)

> @Mate: as I copied the jaas.conf from your repo is that the exact file
you used for testing? Because changing the "user_zookeeper" to "user_kafka"
in the server-part fixed it.

if you mean this file, then yes, I used this for testing:
https://github.com/symat/zookeeper-docker-test/blob/master/conf/digest_jaas.conf
and it worked for me... strange that in your case you had to change it.

Regarding the usefulness of the error message: I am not sure if we can
change that, it should come from a java system library. ZooKeeper just
catch the SecurityException, and doesn't really analyze its content.
Still, it would be great at least to at least print out the exact security
exception (at least with debug logging) and also update the wiki /
documentation and highlighting that different user names may need to be
used.
If you create such a ticket, please also add the exact java version you
used in the docker image.

Good luck for the Kafka work! :)
Mate

On Mon, Feb 17, 2020 at 8:40 PM Sebastian Schmitz <
sebastian.schm...@propellerhead.co.nz> wrote:

> Hello,
>
> I think I found the issue...
>
> One can't use the same username for clients and quorums. I configured
> all of them to be "zookeeper", but in the server-part of the jaas.conf
> it should probably be more like "kafka" as it's Kafka which
> authenticates to the zookeeper in that case and zookeepers are using the
> qorum-part to authenticate to each other. Correct?
> If that's correct the exception message is completely wrong. It can find
> the file, it can read the file and it even finds the server-part, but
> the server-part itself has wrong configuration.
>
> At least with the hanged username in the server-part I got a new exception:
>
> 2020-02-17 19:28:17,994 [myid:1] - ERROR [main:ZooKeeperServerMain@83] -
> Unexpected exception, exiting abnormally
> java.io.IOException: No snapshot found, but there are log entries.
> Something is broken!
>
> Which was probably caused by non-cleaned folders of some previous
> deployments. So I added the "snapshot.trust.empty=true" to the config to
> have it start and rebuild the snapshot. And now my zookeeper is running
> just fine! :)
>
> @Mate: as I copied the jaas.conf from your repo is that the exact file
> you used for testing? Because changing the "user_zookeeper" to
> "user_kafka" in the server-part fixed it.
>
> My next task now is to get Kafka authenticated to zookeeper and get ACLs
> working. Will be fun :)
> And I should probably create a ticket to get the jaas.conf-error message
> fixed!?
>
> Best regards
>
> Sebastian
>
>
> On 17-Feb-20 1:50 PM, Sebastian Schmitz wrote:
> > Hey,
> >
> > I also just tried using 3.5.7, but same problem...
> >
> > Best regards
> >
> > Sebastian
> >
> >
> > On 17-Feb-20 11:34 AM, Sebastian Schmitz wrote:
> >> Hi Mate,
> >>
> >> that's what I also tried. I copied it to the
> >> /opt/zookeeper-cluster/-folder and got the same exception just with
> >> the new path.
> >>
> >> So, if that config works on your side it might be my environment
> >> then!? Maybe it's a problem with the base-image
> >> openjdk:11-jre-stretch which I use for the container... I'll try
> >> using the openjdk:8u222-jre you're using.
> >>
> >> Best regards
> >>
> >> Sebastian
> >>
> >>
> >> On 17-Feb-20 9:19 AM, Szalay-Bekő Máté wrote:
> >>> Hi Sebastian,
> >>>
> >>> It's strange indeed... I also see the owner is root. That should
> >>> work in
> >>> docker usually, given that you run the zookeeper process with the root
> >>> user. Maybe copying it to a different folder? I see that the conf
> >>> folder
> >>> has different owner, maybe the java security library doesn't like that?
> >>>
> >>> But honestly, I don't have any useful explanation.
> >>>
> >>> Good luck!
> >>> Mate
> >>>
> >>> On Sun, Feb 16, 2020, 20:06 Sebastian Schmitz <
> >>> sebastian.schm...@propellerhead.co.nz> wrote:
> >>>
>  Hey Mate,
> 
>  now it gets really weird. I get the file not found exception:
> 
>  '.20-02-16 18:27:50,530 [myid:1] - ERROR
>  [main:ServerCnxnFactory@246] -
>  No JAAS configuration section named 'Server' was found in
>  '/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
>  java.lang.SecurityException: java.io.IOException:
>  /opt/zookeeper-cluster/zookeeper/conf/jaas.conf
> (No such file or directory)
>    at
>  java.base/sun.security.provider.ConfigFile$Spi.(Unknown Source)
>    at java.base/sun.security.provider.ConfigFile.(Unknown
>  Source)
>    at
> 
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
>
> 
> 
>  Method)
>    at
> 
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown
>
> 
> 
>  Source)
>    at
> 
> java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown
>
> 
> 
>  Source)
>    at
>  java.base/java.lang.reflect.Constru

Re: Enabling Auth between Zookeeper Servers

2020-02-17 Thread Sebastian Schmitz

Hello,

I think I found the issue...

One can't use the same username for clients and quorums. I configured 
all of them to be "zookeeper", but in the server-part of the jaas.conf 
it should probably be more like "kafka" as it's Kafka which 
authenticates to the zookeeper in that case and zookeepers are using the 
qorum-part to authenticate to each other. Correct?
If that's correct the exception message is completely wrong. It can find 
the file, it can read the file and it even finds the server-part, but 
the server-part itself has wrong configuration.


At least with the hanged username in the server-part I got a new exception:

2020-02-17 19:28:17,994 [myid:1] - ERROR [main:ZooKeeperServerMain@83] - 
Unexpected exception, exiting abnormally
java.io.IOException: No snapshot found, but there are log entries. 
Something is broken!


Which was probably caused by non-cleaned folders of some previous 
deployments. So I added the "snapshot.trust.empty=true" to the config to 
have it start and rebuild the snapshot. And now my zookeeper is running 
just fine! :)


@Mate: as I copied the jaas.conf from your repo is that the exact file 
you used for testing? Because changing the "user_zookeeper" to 
"user_kafka" in the server-part fixed it.


My next task now is to get Kafka authenticated to zookeeper and get ACLs 
working. Will be fun :)
And I should probably create a ticket to get the jaas.conf-error message 
fixed!?


Best regards

Sebastian


On 17-Feb-20 1:50 PM, Sebastian Schmitz wrote:

Hey,

I also just tried using 3.5.7, but same problem...

Best regards

Sebastian


On 17-Feb-20 11:34 AM, Sebastian Schmitz wrote:

Hi Mate,

that's what I also tried. I copied it to the 
/opt/zookeeper-cluster/-folder and got the same exception just with 
the new path.


So, if that config works on your side it might be my environment 
then!? Maybe it's a problem with the base-image 
openjdk:11-jre-stretch which I use for the container... I'll try 
using the openjdk:8u222-jre you're using.


Best regards

Sebastian


On 17-Feb-20 9:19 AM, Szalay-Bekő Máté wrote:

Hi Sebastian,

It's strange indeed... I also see the owner is root. That should 
work in

docker usually, given that you run the zookeeper process with the root
user. Maybe copying it to a different folder? I see that the conf 
folder

has different owner, maybe the java security library doesn't like that?

But honestly, I don't have any useful explanation.

Good luck!
Mate

On Sun, Feb 16, 2020, 20:06 Sebastian Schmitz <
sebastian.schm...@propellerhead.co.nz> wrote:


Hey Mate,

now it gets really weird. I get the file not found exception:

'.20-02-16 18:27:50,530 [myid:1] - ERROR 
[main:ServerCnxnFactory@246] -

No JAAS configuration section named 'Server' was found in
'/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
java.lang.SecurityException: java.io.IOException:
/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
   (No such file or directory)
  at
java.base/sun.security.provider.ConfigFile$Spi.(Unknown Source)
  at java.base/sun.security.provider.ConfigFile.(Unknown
Source)
  at
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native 



Method)
  at
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown 



Source)
  at
java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown 



Source)
  at 
java.base/java.lang.reflect.Constructor.newInstance(Unknown

Source)
  at java.base/java.lang.Class.newInstance(Unknown Source)
  at
java.base/javax.security.auth.login.Configuration$2.run(Unknown 
Source)

  at
java.base/javax.security.auth.login.Configuration$2.run(Unknown 
Source)
  at 
java.base/java.security.AccessController.doPrivileged(Native

Method)
  at
java.base/javax.security.auth.login.Configuration.getConfiguration(Unknown 


Source)
  at

org.apache.zookeeper.server.ServerCnxnFactory.configureSaslLogin(ServerCnxnFactory.java:210) 


  at

org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:646) 


  at

org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:143) 


  at

org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:106) 


  at

org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:64) 


  at

org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:128) 


  at

org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82) 


Caused by: java.io.IOException:
/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
   (No such file or directory)
  at
java.base/sun.security.provider.ConfigFile$Spi.ioException(Unknown 
Source)
  at 
java.base/sun.security.provider.ConfigFile$Spi.init(Unknown

Source)
  ... 18 more
2020-02-16 18:27:50,566 [myid:1]

Re: Enabling Auth between Zookeeper Servers

2020-02-16 Thread Sebastian Schmitz

Hey,

I also just tried using 3.5.7, but same problem...

Best regards

Sebastian


On 17-Feb-20 11:34 AM, Sebastian Schmitz wrote:

Hi Mate,

that's what I also tried. I copied it to the 
/opt/zookeeper-cluster/-folder and got the same exception just with 
the new path.


So, if that config works on your side it might be my environment 
then!? Maybe it's a problem with the base-image openjdk:11-jre-stretch 
which I use for the container... I'll try using the openjdk:8u222-jre 
you're using.


Best regards

Sebastian


On 17-Feb-20 9:19 AM, Szalay-Bekő Máté wrote:

Hi Sebastian,

It's strange indeed... I also see the owner is root. That should work in
docker usually, given that you run the zookeeper process with the root
user. Maybe copying it to a different folder? I see that the conf folder
has different owner, maybe the java security library doesn't like that?

But honestly, I don't have any useful explanation.

Good luck!
Mate

On Sun, Feb 16, 2020, 20:06 Sebastian Schmitz <
sebastian.schm...@propellerhead.co.nz> wrote:


Hey Mate,

now it gets really weird. I get the file not found exception:

'.20-02-16 18:27:50,530 [myid:1] - ERROR [main:ServerCnxnFactory@246] -
No JAAS configuration section named 'Server' was found in
'/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
java.lang.SecurityException: java.io.IOException:
/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
   (No such file or directory)
  at
java.base/sun.security.provider.ConfigFile$Spi.(Unknown Source)
  at java.base/sun.security.provider.ConfigFile.(Unknown
Source)
  at
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native 



Method)
  at
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown 



Source)
  at
java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown 



Source)
  at 
java.base/java.lang.reflect.Constructor.newInstance(Unknown

Source)
  at java.base/java.lang.Class.newInstance(Unknown Source)
  at
java.base/javax.security.auth.login.Configuration$2.run(Unknown Source)
  at
java.base/javax.security.auth.login.Configuration$2.run(Unknown Source)
  at 
java.base/java.security.AccessController.doPrivileged(Native

Method)
  at
java.base/javax.security.auth.login.Configuration.getConfiguration(Unknown 


Source)
  at

org.apache.zookeeper.server.ServerCnxnFactory.configureSaslLogin(ServerCnxnFactory.java:210) 


  at

org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:646) 


  at

org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:143) 


  at

org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:106) 


  at

org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:64) 


  at

org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:128) 


  at

org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82) 


Caused by: java.io.IOException:
/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
   (No such file or directory)
  at
java.base/sun.security.provider.ConfigFile$Spi.ioException(Unknown 
Source)
  at 
java.base/sun.security.provider.ConfigFile$Spi.init(Unknown

Source)
  ... 18 more
2020-02-16 18:27:50,566 [myid:1] - ERROR 
[main:ZooKeeperServerMain@83] -

Unexpected exception, exiting abnormally
java.io.IOException: No JAAS configuration section named 'Server' was
found in '/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
'.
  at

org.apache.zookeeper.server.ServerCnxnFactory.configureSaslLogin(ServerCnxnFactory.java:247) 


  at

org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:646) 


  at

org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:143) 


  at

org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:106) 


  at

org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:64) 


  at

org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:128) 


  at

org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82) 



So I checked the image:

root@2eeeb625500c:/opt/zookeeper-cluster/zookeeper/conf# ls -la
total 32
drwxr-xr-x  2 1010 1011 4096 Feb 16 18:27 .
drwxr-xr-x 12 root root 4096 Feb 16 18:27 ..
-rw-r--r--  1 1010 1011  535 Jan 30 12:18 configuration.xsl
-rw-r--r--  1 root root  600 Feb 13 18:32 jaas.conf
-rw-r--r--  1 root root  101 Feb 11 00:05 java.env
-rw-r--r--  1 1010 1011 2712 Feb 14 05:49 log4j.properties
-rw-r--r--  1 root root 1255 Feb 16 18:27 zoo.cfg
-rw-r--r--  1 1010 1011  922 Feb 14 05:49 zoo_sample.cfg

And tried to output the file it states in the

Re: Enabling Auth between Zookeeper Servers

2020-02-16 Thread Sebastian Schmitz

Hi Mate,

that's what I also tried. I copied it to the 
/opt/zookeeper-cluster/-folder and got the same exception just with the 
new path.


So, if that config works on your side it might be my environment then!? 
Maybe it's a problem with the base-image openjdk:11-jre-stretch which I 
use for the container... I'll try using the openjdk:8u222-jre you're using.


Best regards

Sebastian


On 17-Feb-20 9:19 AM, Szalay-Bekő Máté wrote:

Hi Sebastian,

It's strange indeed... I also see the owner is root. That should work in
docker usually, given that you run the zookeeper process with the root
user. Maybe copying it to a different folder? I see that the conf folder
has different owner, maybe the java security library doesn't like that?

But honestly, I don't have any useful explanation.

Good luck!
Mate

On Sun, Feb 16, 2020, 20:06 Sebastian Schmitz <
sebastian.schm...@propellerhead.co.nz> wrote:


Hey Mate,

now it gets really weird. I get the file not found exception:

'.20-02-16 18:27:50,530 [myid:1] - ERROR [main:ServerCnxnFactory@246] -
No JAAS configuration section named 'Server' was found in
'/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
java.lang.SecurityException: java.io.IOException:
/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
   (No such file or directory)
  at
java.base/sun.security.provider.ConfigFile$Spi.(Unknown Source)
  at java.base/sun.security.provider.ConfigFile.(Unknown
Source)
  at
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native

Method)
  at
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown

Source)
  at
java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown

Source)
  at java.base/java.lang.reflect.Constructor.newInstance(Unknown
Source)
  at java.base/java.lang.Class.newInstance(Unknown Source)
  at
java.base/javax.security.auth.login.Configuration$2.run(Unknown Source)
  at
java.base/javax.security.auth.login.Configuration$2.run(Unknown Source)
  at java.base/java.security.AccessController.doPrivileged(Native
Method)
  at
java.base/javax.security.auth.login.Configuration.getConfiguration(Unknown
Source)
  at

org.apache.zookeeper.server.ServerCnxnFactory.configureSaslLogin(ServerCnxnFactory.java:210)
  at

org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:646)
  at

org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:143)
  at

org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:106)
  at

org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:64)
  at

org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:128)
  at

org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82)
Caused by: java.io.IOException:
/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
   (No such file or directory)
  at
java.base/sun.security.provider.ConfigFile$Spi.ioException(Unknown Source)
  at java.base/sun.security.provider.ConfigFile$Spi.init(Unknown
Source)
  ... 18 more
2020-02-16 18:27:50,566 [myid:1] - ERROR [main:ZooKeeperServerMain@83] -
Unexpected exception, exiting abnormally
java.io.IOException: No JAAS configuration section named 'Server' was
found in '/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
'.
  at

org.apache.zookeeper.server.ServerCnxnFactory.configureSaslLogin(ServerCnxnFactory.java:247)
  at

org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:646)
  at

org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:143)
  at

org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:106)
  at

org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:64)
  at

org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:128)
  at

org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82)

So I checked the image:

root@2eeeb625500c:/opt/zookeeper-cluster/zookeeper/conf# ls -la
total 32
drwxr-xr-x  2 1010 1011 4096 Feb 16 18:27 .
drwxr-xr-x 12 root root 4096 Feb 16 18:27 ..
-rw-r--r--  1 1010 1011  535 Jan 30 12:18 configuration.xsl
-rw-r--r--  1 root root  600 Feb 13 18:32 jaas.conf
-rw-r--r--  1 root root  101 Feb 11 00:05 java.env
-rw-r--r--  1 1010 1011 2712 Feb 14 05:49 log4j.properties
-rw-r--r--  1 root root 1255 Feb 16 18:27 zoo.cfg
-rw-r--r--  1 1010 1011  922 Feb 14 05:49 zoo_sample.cfg

And tried to output the file it states in the error:

root@2eeeb625500c:/opt/zookeeper-cluster/zookeeper/conf# cat
/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
QuorumServer {
 org.apache.zookeeper.server.auth.DigestLoginModule requ

Re: Enabling Auth between Zookeeper Servers

2020-02-16 Thread Szalay-Bekő Máté
Hi Sebastian,

It's strange indeed... I also see the owner is root. That should work in
docker usually, given that you run the zookeeper process with the root
user. Maybe copying it to a different folder? I see that the conf folder
has different owner, maybe the java security library doesn't like that?

But honestly, I don't have any useful explanation.

Good luck!
Mate

On Sun, Feb 16, 2020, 20:06 Sebastian Schmitz <
sebastian.schm...@propellerhead.co.nz> wrote:

> Hey Mate,
>
> now it gets really weird. I get the file not found exception:
>
> '.20-02-16 18:27:50,530 [myid:1] - ERROR [main:ServerCnxnFactory@246] -
> No JAAS configuration section named 'Server' was found in
> '/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
> java.lang.SecurityException: java.io.IOException:
> /opt/zookeeper-cluster/zookeeper/conf/jaas.conf
>   (No such file or directory)
>  at
> java.base/sun.security.provider.ConfigFile$Spi.(Unknown Source)
>  at java.base/sun.security.provider.ConfigFile.(Unknown
> Source)
>  at
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
>
> Method)
>  at
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown
>
> Source)
>  at
> java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown
>
> Source)
>  at java.base/java.lang.reflect.Constructor.newInstance(Unknown
> Source)
>  at java.base/java.lang.Class.newInstance(Unknown Source)
>  at
> java.base/javax.security.auth.login.Configuration$2.run(Unknown Source)
>  at
> java.base/javax.security.auth.login.Configuration$2.run(Unknown Source)
>  at java.base/java.security.AccessController.doPrivileged(Native
> Method)
>  at
> java.base/javax.security.auth.login.Configuration.getConfiguration(Unknown
> Source)
>  at
>
> org.apache.zookeeper.server.ServerCnxnFactory.configureSaslLogin(ServerCnxnFactory.java:210)
>  at
>
> org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:646)
>  at
>
> org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:143)
>  at
>
> org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:106)
>  at
>
> org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:64)
>  at
>
> org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:128)
>  at
>
> org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82)
> Caused by: java.io.IOException:
> /opt/zookeeper-cluster/zookeeper/conf/jaas.conf
>   (No such file or directory)
>  at
> java.base/sun.security.provider.ConfigFile$Spi.ioException(Unknown Source)
>  at java.base/sun.security.provider.ConfigFile$Spi.init(Unknown
> Source)
>  ... 18 more
> 2020-02-16 18:27:50,566 [myid:1] - ERROR [main:ZooKeeperServerMain@83] -
> Unexpected exception, exiting abnormally
> java.io.IOException: No JAAS configuration section named 'Server' was
> found in '/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
> '.
>  at
>
> org.apache.zookeeper.server.ServerCnxnFactory.configureSaslLogin(ServerCnxnFactory.java:247)
>  at
>
> org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:646)
>  at
>
> org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:143)
>  at
>
> org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:106)
>  at
>
> org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:64)
>  at
>
> org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:128)
>  at
>
> org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82)
>
> So I checked the image:
>
> root@2eeeb625500c:/opt/zookeeper-cluster/zookeeper/conf# ls -la
> total 32
> drwxr-xr-x  2 1010 1011 4096 Feb 16 18:27 .
> drwxr-xr-x 12 root root 4096 Feb 16 18:27 ..
> -rw-r--r--  1 1010 1011  535 Jan 30 12:18 configuration.xsl
> -rw-r--r--  1 root root  600 Feb 13 18:32 jaas.conf
> -rw-r--r--  1 root root  101 Feb 11 00:05 java.env
> -rw-r--r--  1 1010 1011 2712 Feb 14 05:49 log4j.properties
> -rw-r--r--  1 root root 1255 Feb 16 18:27 zoo.cfg
> -rw-r--r--  1 1010 1011  922 Feb 14 05:49 zoo_sample.cfg
>
> And tried to output the file it states in the error:
>
> root@2eeeb625500c:/opt/zookeeper-cluster/zookeeper/conf# cat
> /opt/zookeeper-cluster/zookeeper/conf/jaas.conf
> QuorumServer {
> org.apache.zookeeper.server.auth.DigestLoginModule required
> user_zookeeper="test";
> };
> QuorumClient {
> org.apache.zookeeper.server.auth.DigestLoginModule required
> username="zookeeper"
> password="test";
> };
> Server {
> org.apache.zookeeper.server.auth.DigestLoginModule req

Re: Enabling Auth between Zookeeper Servers

2020-02-16 Thread Sebastian Schmitz

Hey Mate,

now it gets really weird. I get the file not found exception:

'.20-02-16 18:27:50,530 [myid:1] - ERROR [main:ServerCnxnFactory@246] - 
No JAAS configuration section named 'Server' was found in 
'/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
java.lang.SecurityException: java.io.IOException: 
/opt/zookeeper-cluster/zookeeper/conf/jaas.conf

 (No such file or directory)
    at 
java.base/sun.security.provider.ConfigFile$Spi.(Unknown Source)
    at java.base/sun.security.provider.ConfigFile.(Unknown 
Source)
    at 
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native 
Method)
    at 
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown 
Source)
    at 
java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown 
Source)
    at java.base/java.lang.reflect.Constructor.newInstance(Unknown 
Source)

    at java.base/java.lang.Class.newInstance(Unknown Source)
    at 
java.base/javax.security.auth.login.Configuration$2.run(Unknown Source)
    at 
java.base/javax.security.auth.login.Configuration$2.run(Unknown Source)
    at java.base/java.security.AccessController.doPrivileged(Native 
Method)
    at 
java.base/javax.security.auth.login.Configuration.getConfiguration(Unknown 
Source)
    at 
org.apache.zookeeper.server.ServerCnxnFactory.configureSaslLogin(ServerCnxnFactory.java:210)
    at 
org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:646)
    at 
org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:143)
    at 
org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:106)
    at 
org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:64)
    at 
org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:128)
    at 
org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82)
Caused by: java.io.IOException: 
/opt/zookeeper-cluster/zookeeper/conf/jaas.conf

 (No such file or directory)
    at 
java.base/sun.security.provider.ConfigFile$Spi.ioException(Unknown Source)
    at java.base/sun.security.provider.ConfigFile$Spi.init(Unknown 
Source)

    ... 18 more
2020-02-16 18:27:50,566 [myid:1] - ERROR [main:ZooKeeperServerMain@83] - 
Unexpected exception, exiting abnormally
java.io.IOException: No JAAS configuration section named 'Server' was 
found in '/opt/zookeeper-cluster/zookeeper/conf/jaas.conf

'.
    at 
org.apache.zookeeper.server.ServerCnxnFactory.configureSaslLogin(ServerCnxnFactory.java:247)
    at 
org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:646)
    at 
org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:143)
    at 
org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:106)
    at 
org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:64)
    at 
org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:128)
    at 
org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82)


So I checked the image:

root@2eeeb625500c:/opt/zookeeper-cluster/zookeeper/conf# ls -la
total 32
drwxr-xr-x  2 1010 1011 4096 Feb 16 18:27 .
drwxr-xr-x 12 root root 4096 Feb 16 18:27 ..
-rw-r--r--  1 1010 1011  535 Jan 30 12:18 configuration.xsl
-rw-r--r--  1 root root  600 Feb 13 18:32 jaas.conf
-rw-r--r--  1 root root  101 Feb 11 00:05 java.env
-rw-r--r--  1 1010 1011 2712 Feb 14 05:49 log4j.properties
-rw-r--r--  1 root root 1255 Feb 16 18:27 zoo.cfg
-rw-r--r--  1 1010 1011  922 Feb 14 05:49 zoo_sample.cfg

And tried to output the file it states in the error:

root@2eeeb625500c:/opt/zookeeper-cluster/zookeeper/conf# cat 
/opt/zookeeper-cluster/zookeeper/conf/jaas.conf

QuorumServer {
   org.apache.zookeeper.server.auth.DigestLoginModule required
   user_zookeeper="test";
};
QuorumClient {
   org.apache.zookeeper.server.auth.DigestLoginModule required
   username="zookeeper"
   password="test";
};
Server {
   org.apache.zookeeper.server.auth.DigestLoginModule required
   user_zookeeper="test";
};
Client {
   org.apache.zookeeper.server.auth.DigestLoginModule required
   username="zookeeper"
   password="test";
};

The weird part now is that the access is set exactly the same as the 
zoo.cfg which it can read without problems.


Also changing the access to 666 doesn't change anything. And using your 
config doesn't help either:


jaas.conf:
QuorumServer {
    org.apache.zookeeper.server.auth.DigestLoginModule required
    user_zookeeper="test";
};
QuorumLearner {
    org.apache.zookeeper.server.auth.DigestLoginModule required
    username="zookeeper"
    password="test";
};
Server {
    org.apache.zookeeper.s

Re: Enabling Auth between Zookeeper Servers

2020-02-13 Thread Szalay-Bekő Máté
Hi Sebastian!

I was able to setup digest authentication, uploaded my results here:
https://github.com/symat/zookeeper-docker-test
You can see my docker compose file:
https://github.com/symat/zookeeper-docker-test/blob/master/3_nodes_digest_quorum_auth.yml
also the zoo.cfg template:
https://github.com/symat/zookeeper-docker-test/blob/master/conf/digest_zoo.cfg
and the jaas.cfg file:
https://github.com/symat/zookeeper-docker-test/blob/master/conf/digest_jaas.conf

It works for me, using ZooKeeper 3.5.6. Although I haven't follow your
config everywhere.

Still, I wasn't able to reproduce your exception, only when I actually
deleted the jaas config file. Are you sure that the ZooKeeper process in
docker can see / open that file?

I created a patched ZooKeeper 3.5.6 for you (you can download from here:
https://drive.google.com/open?id=1KEPjNkiKf937jMJHAicwW9WATEuyRZIo), where
more details are printed in case of errors. E.g. in my case when I deleted
the jaas config file, I get:

zoo1_1  | 2020-02-14 07:04:33,288 [myid:1] - ERROR
[main:ServerCnxnFactory@246] - No JAAS configuration section named 'Server'
was found in '/scripts/conf/digest_jaas.conf'.
zoo1_1  | java.lang.SecurityException: java.io.IOException:
/scripts/conf/digest_jaas.conf (No such file or directory)
zoo1_1  |   at
sun.security.provider.ConfigFile$Spi.(ConfigFile.java:137)
zoo1_1  |   at
sun.security.provider.ConfigFile.(ConfigFile.java:102)
zoo1_1  |   at
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
zoo1_1  |   at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
zoo1_1  |   at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
zoo1_1  |   at
java.lang.reflect.Constructor.newInstance(Constructor.java:423)
zoo1_1  |   at java.lang.Class.newInstance(Class.java:442)
zoo1_1  |   at
javax.security.auth.login.Configuration$2.run(Configuration.java:255)
zoo1_1  |   at
javax.security.auth.login.Configuration$2.run(Configuration.java:247)
zoo1_1  |   at java.security.AccessController.doPrivileged(Native
Method)
zoo1_1  |   at
javax.security.auth.login.Configuration.getConfiguration(Configuration.java:246)
zoo1_1  |   at
org.apache.zookeeper.server.ServerCnxnFactory.configureSaslLogin(ServerCnxnFactory.java:210)
zoo1_1  |   at
org.apache.zookeeper.server.NettyServerCnxnFactory.configure(NettyServerCnxnFactory.java:383)
zoo1_1  |   at
org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:148)
zoo1_1  |   at
org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:123)
zoo1_1  |   at
org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82)
zoo1_1  | Caused by: java.io.IOException: /scripts/conf/digest_jaas.conf
(No such file or directory)
zoo1_1  |   at
sun.security.provider.ConfigFile$Spi.ioException(ConfigFile.java:666)
zoo1_1  |   at
sun.security.provider.ConfigFile$Spi.init(ConfigFile.java:262)
zoo1_1  |   at
sun.security.provider.ConfigFile$Spi.(ConfigFile.java:135)
zoo1_1  |   ... 15 more
z

Kind regards,
Mate

On Fri, Feb 14, 2020 at 7:12 AM sagar shukla 
wrote:

> O
> Sent from Yahoo Mail on Android
>
>   On Fri, Feb 14, 2020 at 11:02 AM, Szalay-Bekő Máté<
> szalay.beko.m...@gmail.com> wrote:   Hi Sebastian,
>
> > But I still get the same exception.
> at this point I don't know why this happen... Adding the Server section to
> the jaas config should have helped. Unfortunately the exact exception is
> not printed out into the logs, just the error message, so it is hard to
> find out more details.
>
> I will try to reproduce your case with 3.5.6 locally and see if it works. I
> never actually used digest authentication before... we always use kerberos
> in production. If it works, I will share my configs / dockerfiles and send
> you a patched version with more debug info printed out.
>
> > Why would configuring quorum-auth also enable client-server-auth?
> it is not very logical indeed... if I see it right, based on the code once
> you set the java.security.auth.login.config property, then ZooKeeper
> assumes you want to use server-client sasl authentication. I guess the
> quorum-auth feature was added later and they introduced 'enable' config
> property for this, but forget to introduce the same config for the client
> authentication. I also guess most of the people are interested in the
> client authentication and it is rare that someone does't need that but
> needs quorum auth. Still, the current behaviour is not good I think. I will
> submit a jira ticket requesting an improvement here when I will have time,
> but feel free to submit it yourself if you wish.
>
> Kind regards,
> Mate
>
> On Thu, Feb 13, 2020 at 7:41 PM Sebastian Schmitz <
> sebastian.schm...@propellerhead.co.nz> wrote:
>
> > Hey Mate,
> >
> > I checked the java.env-file and it contains:
> >
> >
> >
> SERV

Re: Enabling Auth between Zookeeper Servers

2020-02-13 Thread sagar shukla
O
Sent from Yahoo Mail on Android 
 
  On Fri, Feb 14, 2020 at 11:02 AM, Szalay-Bekő 
Máté wrote:   Hi Sebastian,

> But I still get the same exception.
at this point I don't know why this happen... Adding the Server section to
the jaas config should have helped. Unfortunately the exact exception is
not printed out into the logs, just the error message, so it is hard to
find out more details.

I will try to reproduce your case with 3.5.6 locally and see if it works. I
never actually used digest authentication before... we always use kerberos
in production. If it works, I will share my configs / dockerfiles and send
you a patched version with more debug info printed out.

> Why would configuring quorum-auth also enable client-server-auth?
it is not very logical indeed... if I see it right, based on the code once
you set the java.security.auth.login.config property, then ZooKeeper
assumes you want to use server-client sasl authentication. I guess the
quorum-auth feature was added later and they introduced 'enable' config
property for this, but forget to introduce the same config for the client
authentication. I also guess most of the people are interested in the
client authentication and it is rare that someone does't need that but
needs quorum auth. Still, the current behaviour is not good I think. I will
submit a jira ticket requesting an improvement here when I will have time,
but feel free to submit it yourself if you wish.

Kind regards,
Mate

On Thu, Feb 13, 2020 at 7:41 PM Sebastian Schmitz <
sebastian.schm...@propellerhead.co.nz> wrote:

> Hey Mate,
>
> I checked the java.env-file and it contains:
>
>
> SERVER_JVMFLAGS="-Djava.security.auth.login.config=/opt/zookeeper-cluster/zookeeper/conf/jaas.conf"
>
> which is exactly the place where the pasted jaas.conf is placed.
>
> I also just changed the config to be saslLoginContext and added the
> missing semicolon.
>
> But I still get the same exception.
>
> Why would configuring quorum-auth also enable client-server-auth?
>
> Thanks
>
> Sebastian
>
>
> On 13-Feb-20 5:50 AM, Szalay-Bekő Máté wrote:
> > Hi Sebastian,
> >
> > thanks for the more details!
> >
> > One thing I found in your config is that you should use:
> > quorum.auth.learner.saslLoginContext=QuorumLearner
> > quorum.auth.server.saslLoginContext=QuorumServer
> >
> > so instead of  loginContext, use  saslLoginContext in both lines.  I
> found
> > this in the source code, I think the wiki is wrong (I will fix it later).
> > However, actually this didn't really change anything, as the default
> values
> > are anyway
> > QuorumLearner and  QuorumServer, so you can even skip these lines from
> the
> > config.
> >
> > I think Rakesh is right, you are seeing exceptions related to not the
> > QuorumSasl, but the ClientSasl. This is why ZooKeeper tries to find the
> > 'Server' section (what is configuring the server during the client-server
> > authentication). The name of this section can be overwritten by the
> > "zookeeper.sasl.serverconfig" system property.
> >
> > Based on the exception, ZooKeeper can not find the 'Server' section in
> > the /opt/zookeeper-cluster/zookeeper/conf/jaas.conf file. Are you sure
> this
> > is the correct jaas.conf? Does the ZooKeeper process have the permissions
> > to open this file? You can specify the jaas config file path for
> ZooKeeper
> > by providing custom system property e.g. by exporting
> > SERVER_JVMFLAGS="-Djava.security.auth.login.config=/path/to/jaas.conf"
> > before starting zkServer.sh
> >
> > Also in the jaas.conf you copied here, you are missing a semicolon from
> the
> > end of the last line in the Server block. I am not sure if it is causing
> > any parsing error, but I always add the semicolon to the end of the last
> > line in the block.
> >
> > Mate
> >
> > On Tue, Feb 11, 2020 at 7:53 PM Sebastian Schmitz <
> > sebastian.schm...@propellerhead.co.nz> wrote:
> >
> >> Hello Rakesh,
> >>
> >> as mentioned in the other mail adding the "Server"to jaas.conf didn't
> help.
> >>
> >> Here are the Configs and Logs (with the Server-part included):
> >>
> >> jaas.conf:
> >> QuorumServer {
> >>          org.apache.zookeeper.server.auth.DigestLoginModule required
> >>          user_zookeeper="test";
> >> };
> >>
> >> QuorumClient {
> >>          org.apache.zookeeper.server.auth.DigestLoginModule required
> >>          username="zookeeper"
> >>          password="test";
> >> };
> >>
> >> Server {
> >>          org.apache.zookeeper.server.auth.DigestLoginModule required
> >>          user_zookeeper="test"
> >> };
> >>
> >> Client {
> >>          org.apache.zookeeper.server.auth.DigestLoginModule required
> >>          username="zookeeper"
> >>          password="test";
> >> };
> >>
> >> zoo.cfg:
> >> # The number of milliseconds of each tick
> >> tickTime=2000
> >> # The number of ticks that the initial
> >> # synchronization phase can take
> >> initLimit=10
> >> # The number of ticks that can pass between
> >> # sending a request and getting an acknowledge

Re: Enabling Auth between Zookeeper Servers

2020-02-13 Thread Szalay-Bekő Máté
Hi Sebastian,

> But I still get the same exception.
at this point I don't know why this happen... Adding the Server section to
the jaas config should have helped. Unfortunately the exact exception is
not printed out into the logs, just the error message, so it is hard to
find out more details.

I will try to reproduce your case with 3.5.6 locally and see if it works. I
never actually used digest authentication before... we always use kerberos
in production. If it works, I will share my configs / dockerfiles and send
you a patched version with more debug info printed out.

> Why would configuring quorum-auth also enable client-server-auth?
it is not very logical indeed... if I see it right, based on the code once
you set the java.security.auth.login.config property, then ZooKeeper
assumes you want to use server-client sasl authentication. I guess the
quorum-auth feature was added later and they introduced 'enable' config
property for this, but forget to introduce the same config for the client
authentication. I also guess most of the people are interested in the
client authentication and it is rare that someone does't need that but
needs quorum auth. Still, the current behaviour is not good I think. I will
submit a jira ticket requesting an improvement here when I will have time,
but feel free to submit it yourself if you wish.

Kind regards,
Mate

On Thu, Feb 13, 2020 at 7:41 PM Sebastian Schmitz <
sebastian.schm...@propellerhead.co.nz> wrote:

> Hey Mate,
>
> I checked the java.env-file and it contains:
>
>
> SERVER_JVMFLAGS="-Djava.security.auth.login.config=/opt/zookeeper-cluster/zookeeper/conf/jaas.conf"
>
> which is exactly the place where the pasted jaas.conf is placed.
>
> I also just changed the config to be saslLoginContext and added the
> missing semicolon.
>
> But I still get the same exception.
>
> Why would configuring quorum-auth also enable client-server-auth?
>
> Thanks
>
> Sebastian
>
>
> On 13-Feb-20 5:50 AM, Szalay-Bekő Máté wrote:
> > Hi Sebastian,
> >
> > thanks for the more details!
> >
> > One thing I found in your config is that you should use:
> > quorum.auth.learner.saslLoginContext=QuorumLearner
> > quorum.auth.server.saslLoginContext=QuorumServer
> >
> > so instead of  loginContext, use  saslLoginContext in both lines.  I
> found
> > this in the source code, I think the wiki is wrong (I will fix it later).
> > However, actually this didn't really change anything, as the default
> values
> > are anyway
> > QuorumLearner and  QuorumServer, so you can even skip these lines from
> the
> > config.
> >
> > I think Rakesh is right, you are seeing exceptions related to not the
> > QuorumSasl, but the ClientSasl. This is why ZooKeeper tries to find the
> > 'Server' section (what is configuring the server during the client-server
> > authentication). The name of this section can be overwritten by the
> > "zookeeper.sasl.serverconfig" system property.
> >
> > Based on the exception, ZooKeeper can not find the 'Server' section in
> > the /opt/zookeeper-cluster/zookeeper/conf/jaas.conf file. Are you sure
> this
> > is the correct jaas.conf? Does the ZooKeeper process have the permissions
> > to open this file? You can specify the jaas config file path for
> ZooKeeper
> > by providing custom system property e.g. by exporting
> > SERVER_JVMFLAGS="-Djava.security.auth.login.config=/path/to/jaas.conf"
> > before starting zkServer.sh
> >
> > Also in the jaas.conf you copied here, you are missing a semicolon from
> the
> > end of the last line in the Server block. I am not sure if it is causing
> > any parsing error, but I always add the semicolon to the end of the last
> > line in the block.
> >
> > Mate
> >
> > On Tue, Feb 11, 2020 at 7:53 PM Sebastian Schmitz <
> > sebastian.schm...@propellerhead.co.nz> wrote:
> >
> >> Hello Rakesh,
> >>
> >> as mentioned in the other mail adding the "Server"to jaas.conf didn't
> help.
> >>
> >> Here are the Configs and Logs (with the Server-part included):
> >>
> >> jaas.conf:
> >> QuorumServer {
> >>  org.apache.zookeeper.server.auth.DigestLoginModule required
> >>  user_zookeeper="test";
> >> };
> >>
> >> QuorumClient {
> >>  org.apache.zookeeper.server.auth.DigestLoginModule required
> >>  username="zookeeper"
> >>  password="test";
> >> };
> >>
> >> Server {
> >>  org.apache.zookeeper.server.auth.DigestLoginModule required
> >>  user_zookeeper="test"
> >> };
> >>
> >> Client {
> >>  org.apache.zookeeper.server.auth.DigestLoginModule required
> >>  username="zookeeper"
> >>  password="test";
> >> };
> >>
> >> zoo.cfg:
> >> # The number of milliseconds of each tick
> >> tickTime=2000
> >> # The number of ticks that the initial
> >> # synchronization phase can take
> >> initLimit=10
> >> # The number of ticks that can pass between
> >> # sending a request and getting an acknowledgement
> >> syncLimit=5
> >> # the directory where the snapshot is stored.
> >> # do not use /tmp for 

Re: Enabling Auth between Zookeeper Servers

2020-02-13 Thread Sebastian Schmitz

Hey Mate,

I checked the java.env-file and it contains:

SERVER_JVMFLAGS="-Djava.security.auth.login.config=/opt/zookeeper-cluster/zookeeper/conf/jaas.conf"

which is exactly the place where the pasted jaas.conf is placed.

I also just changed the config to be saslLoginContext and added the 
missing semicolon.


But I still get the same exception.

Why would configuring quorum-auth also enable client-server-auth?

Thanks

Sebastian


On 13-Feb-20 5:50 AM, Szalay-Bekő Máté wrote:

Hi Sebastian,

thanks for the more details!

One thing I found in your config is that you should use:
quorum.auth.learner.saslLoginContext=QuorumLearner
quorum.auth.server.saslLoginContext=QuorumServer

so instead of  loginContext, use  saslLoginContext in both lines.  I found
this in the source code, I think the wiki is wrong (I will fix it later).
However, actually this didn't really change anything, as the default values
are anyway
QuorumLearner and  QuorumServer, so you can even skip these lines from the
config.

I think Rakesh is right, you are seeing exceptions related to not the
QuorumSasl, but the ClientSasl. This is why ZooKeeper tries to find the
'Server' section (what is configuring the server during the client-server
authentication). The name of this section can be overwritten by the
"zookeeper.sasl.serverconfig" system property.

Based on the exception, ZooKeeper can not find the 'Server' section in
the /opt/zookeeper-cluster/zookeeper/conf/jaas.conf file. Are you sure this
is the correct jaas.conf? Does the ZooKeeper process have the permissions
to open this file? You can specify the jaas config file path for ZooKeeper
by providing custom system property e.g. by exporting
SERVER_JVMFLAGS="-Djava.security.auth.login.config=/path/to/jaas.conf"
before starting zkServer.sh

Also in the jaas.conf you copied here, you are missing a semicolon from the
end of the last line in the Server block. I am not sure if it is causing
any parsing error, but I always add the semicolon to the end of the last
line in the block.

Mate

On Tue, Feb 11, 2020 at 7:53 PM Sebastian Schmitz <
sebastian.schm...@propellerhead.co.nz> wrote:


Hello Rakesh,

as mentioned in the other mail adding the "Server"to jaas.conf didn't help.

Here are the Configs and Logs (with the Server-part included):

jaas.conf:
QuorumServer {
 org.apache.zookeeper.server.auth.DigestLoginModule required
 user_zookeeper="test";
};

QuorumClient {
 org.apache.zookeeper.server.auth.DigestLoginModule required
 username="zookeeper"
 password="test";
};

Server {
 org.apache.zookeeper.server.auth.DigestLoginModule required
 user_zookeeper="test"
};

Client {
 org.apache.zookeeper.server.auth.DigestLoginModule required
 username="zookeeper"
 password="test";
};

zoo.cfg:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/mnt/zk_data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
#
http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
dataLogDir=/mnt/zk_data_log
autopurge.snapRetainCount=3
autopurge.purgeInterval=24
quorum.auth.enableSasl=true
quorum.auth.learnerRequireSasl=false
quorum.auth.serverRequireSasl=false
quorum.auth.learner.loginContext=QuorumLearner
quorum.auth.server.loginContext=QuorumServer
quorum.cnxn.threads.size=20
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
secureClientPort=2281
server.1=0.0.0.0:2888:3888
server.2=kafkad02.x.azure.com:2888:3888
server.3=kafkad03.x.azure.com:2888:3888

Server-Log:
Using config: /opt/zookeeper-cluster/zookeeper/bin/../conf/zoo.cfg
Feb 11, 2020 18:43:53 + [1 1] com.newrelic INFO: New Relic Agent:
Loading configuration file "/opt/zookeeper-cluster/newrelic/./newrelic.yml"
Feb 11, 2020 18:43:53 + [1 1] com.newrelic INFO: Using default
collector host: collector.newrelic.com
Feb 11, 2020 18:43:53 + [1 1] com.newrelic INFO: New Relic Agent:
Writing to log file:
/opt/zookeeper-cluster/newrelic/logs/newrelic_agent.log
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by
com.newrelic.weave.weavepackage.NewClassAppender
(file:/opt/zookeeper-cluster/newrelic/newrelic.jar) to method
java.net.URLClassLoader.addURL(java.net.URL)
WARNING: Pl

Re: Enabling Auth between Zookeeper Servers

2020-02-12 Thread Szalay-Bekő Máté
Hi Sebastian,

thanks for the more details!

One thing I found in your config is that you should use:
quorum.auth.learner.saslLoginContext=QuorumLearner
quorum.auth.server.saslLoginContext=QuorumServer

so instead of  loginContext, use  saslLoginContext in both lines.  I found
this in the source code, I think the wiki is wrong (I will fix it later).
However, actually this didn't really change anything, as the default values
are anyway
QuorumLearner and  QuorumServer, so you can even skip these lines from the
config.

I think Rakesh is right, you are seeing exceptions related to not the
QuorumSasl, but the ClientSasl. This is why ZooKeeper tries to find the
'Server' section (what is configuring the server during the client-server
authentication). The name of this section can be overwritten by the
"zookeeper.sasl.serverconfig" system property.

Based on the exception, ZooKeeper can not find the 'Server' section in
the /opt/zookeeper-cluster/zookeeper/conf/jaas.conf file. Are you sure this
is the correct jaas.conf? Does the ZooKeeper process have the permissions
to open this file? You can specify the jaas config file path for ZooKeeper
by providing custom system property e.g. by exporting
SERVER_JVMFLAGS="-Djava.security.auth.login.config=/path/to/jaas.conf"
before starting zkServer.sh

Also in the jaas.conf you copied here, you are missing a semicolon from the
end of the last line in the Server block. I am not sure if it is causing
any parsing error, but I always add the semicolon to the end of the last
line in the block.

Mate

On Tue, Feb 11, 2020 at 7:53 PM Sebastian Schmitz <
sebastian.schm...@propellerhead.co.nz> wrote:

> Hello Rakesh,
>
> as mentioned in the other mail adding the "Server"to jaas.conf didn't help.
>
> Here are the Configs and Logs (with the Server-part included):
>
> jaas.conf:
> QuorumServer {
> org.apache.zookeeper.server.auth.DigestLoginModule required
> user_zookeeper="test";
> };
>
> QuorumClient {
> org.apache.zookeeper.server.auth.DigestLoginModule required
> username="zookeeper"
> password="test";
> };
>
> Server {
> org.apache.zookeeper.server.auth.DigestLoginModule required
> user_zookeeper="test"
> };
>
> Client {
> org.apache.zookeeper.server.auth.DigestLoginModule required
> username="zookeeper"
> password="test";
> };
>
> zoo.cfg:
> # The number of milliseconds of each tick
> tickTime=2000
> # The number of ticks that the initial
> # synchronization phase can take
> initLimit=10
> # The number of ticks that can pass between
> # sending a request and getting an acknowledgement
> syncLimit=5
> # the directory where the snapshot is stored.
> # do not use /tmp for storage, /tmp here is just
> # example sakes.
> dataDir=/mnt/zk_data
> # the port at which the clients will connect
> clientPort=2181
> # the maximum number of client connections.
> # increase this if you need to handle more clients
> #maxClientCnxns=60
> #
> # Be sure to read the maintenance section of the
> # administrator guide before turning on autopurge.
> #
> #
> http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
> #
> # The number of snapshots to retain in dataDir
> #autopurge.snapRetainCount=3
> # Purge task interval in hours
> # Set to "0" to disable auto purge feature
> #autopurge.purgeInterval=1
> dataLogDir=/mnt/zk_data_log
> autopurge.snapRetainCount=3
> autopurge.purgeInterval=24
> quorum.auth.enableSasl=true
> quorum.auth.learnerRequireSasl=false
> quorum.auth.serverRequireSasl=false
> quorum.auth.learner.loginContext=QuorumLearner
> quorum.auth.server.loginContext=QuorumServer
> quorum.cnxn.threads.size=20
> authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
> secureClientPort=2281
> server.1=0.0.0.0:2888:3888
> server.2=kafkad02.x.azure.com:2888:3888
> server.3=kafkad03.x.azure.com:2888:3888
>
> Server-Log:
> Using config: /opt/zookeeper-cluster/zookeeper/bin/../conf/zoo.cfg
> Feb 11, 2020 18:43:53 + [1 1] com.newrelic INFO: New Relic Agent:
> Loading configuration file "/opt/zookeeper-cluster/newrelic/./newrelic.yml"
> Feb 11, 2020 18:43:53 + [1 1] com.newrelic INFO: Using default
> collector host: collector.newrelic.com
> Feb 11, 2020 18:43:53 + [1 1] com.newrelic INFO: New Relic Agent:
> Writing to log file:
> /opt/zookeeper-cluster/newrelic/logs/newrelic_agent.log
> WARNING: An illegal reflective access operation has occurred
> WARNING: Illegal reflective access by
> com.newrelic.weave.weavepackage.NewClassAppender
> (file:/opt/zookeeper-cluster/newrelic/newrelic.jar) to method
> java.net.URLClassLoader.addURL(java.net.URL)
> WARNING: Please consider reporting this to the maintainers of
> com.newrelic.weave.weavepackage.NewClassAppender
> WARNING: Use --illegal-access=warn to enable warnings of further illegal
> reflective access operations
> WARNING: All illegal access operations will be denied in a future release
> 2020-02-11 18:43:59,257 [myid:] - INFO [m

Re: Enabling Auth between Zookeeper Servers

2020-02-11 Thread Sebastian Schmitz

Hello Rakesh,

as mentioned in the other mail adding the "Server"to jaas.conf didn't help.

Here are the Configs and Logs (with the Server-part included):

jaas.conf:
QuorumServer {
   org.apache.zookeeper.server.auth.DigestLoginModule required
   user_zookeeper="test";
};

QuorumClient {
   org.apache.zookeeper.server.auth.DigestLoginModule required
   username="zookeeper"
   password="test";
};

Server {
   org.apache.zookeeper.server.auth.DigestLoginModule required
   user_zookeeper="test"
};

Client {
   org.apache.zookeeper.server.auth.DigestLoginModule required
   username="zookeeper"
   password="test";
};

zoo.cfg:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/mnt/zk_data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# 
http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
dataLogDir=/mnt/zk_data_log
autopurge.snapRetainCount=3
autopurge.purgeInterval=24
quorum.auth.enableSasl=true
quorum.auth.learnerRequireSasl=false
quorum.auth.serverRequireSasl=false
quorum.auth.learner.loginContext=QuorumLearner
quorum.auth.server.loginContext=QuorumServer
quorum.cnxn.threads.size=20
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
secureClientPort=2281
server.1=0.0.0.0:2888:3888
server.2=kafkad02.x.azure.com:2888:3888
server.3=kafkad03.x.azure.com:2888:3888

Server-Log:
Using config: /opt/zookeeper-cluster/zookeeper/bin/../conf/zoo.cfg
Feb 11, 2020 18:43:53 + [1 1] com.newrelic INFO: New Relic Agent: 
Loading configuration file "/opt/zookeeper-cluster/newrelic/./newrelic.yml"
Feb 11, 2020 18:43:53 + [1 1] com.newrelic INFO: Using default 
collector host: collector.newrelic.com
Feb 11, 2020 18:43:53 + [1 1] com.newrelic INFO: New Relic Agent: 
Writing to log file: 
/opt/zookeeper-cluster/newrelic/logs/newrelic_agent.log

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by 
com.newrelic.weave.weavepackage.NewClassAppender 
(file:/opt/zookeeper-cluster/newrelic/newrelic.jar) to method 
java.net.URLClassLoader.addURL(java.net.URL)
WARNING: Please consider reporting this to the maintainers of 
com.newrelic.weave.weavepackage.NewClassAppender
WARNING: Use --illegal-access=warn to enable warnings of further illegal 
reflective access operations

WARNING: All illegal access operations will be denied in a future release
2020-02-11 18:43:59,257 [myid:] - INFO [main:QuorumPeerConfig@136] - 
Reading configuration from: 
/opt/zookeeper-cluster/zookeeper/bin/../conf/zoo.cfg
2020-02-11 18:43:59,477 [myid:] - INFO 
[main:QuorumPeer$QuorumServer@185] - Resolved hostname: 
kafkad02.x.azure.com to address: kafkad02.x.azure.com/1.2.3.4
2020-02-11 18:43:59,477 [myid:] - INFO 
[main:QuorumPeer$QuorumServer@185] - Resolved hostname: 0.0.0.0 to 
address: /0.0.0.0
2020-02-11 18:43:59,666 [myid:] - INFO 
[main:QuorumPeer$QuorumServer@185] - Resolved hostname: 
kafkad03.x.azure.com to address: kafkad03.x.azure.com/1.2.3.5
2020-02-11 18:43:59,666 [myid:] - INFO [main:QuorumPeerConfig@398] - 
Defaulting to majority quorums
2020-02-11 18:43:59,677 [myid:1] - INFO [main:DatadirCleanupManager@78] 
- autopurge.snapRetainCount set to 3
2020-02-11 18:43:59,677 [myid:1] - INFO [main:DatadirCleanupManager@79] 
- autopurge.purgeInterval set to 24
2020-02-11 18:43:59,732 [myid:1] - INFO 
[PurgeTask:DatadirCleanupManager$PurgeTask@138] - Purge task started.
2020-02-11 18:43:59,749 [myid:1] - INFO  [main:QuorumPeerMain@130] - 
Starting quorum peer
2020-02-11 18:43:59,788 [myid:1] - INFO [main:ServerCnxnFactory@117] - 
Using org.apache.zookeeper.server.NIOServerCnxnFactory as server 
connection factory
2020-02-11 18:43:59,804 [myid:1] - INFO 
[PurgeTask:DatadirCleanupManager$PurgeTask@144] - Purge task completed.
'.20-02-11 18:43:59,826 [myid:1] - ERROR [main:ServerCnxnFactory@210] - 
No JAAS configuration section named 'Server' was foundin 
'/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
2020-02-11 18:43:59,827 [myid:1] - ERROR [main:QuorumPeerMain@92] - 
Unexpected exception, exiting abnormally
java.io.IOException: No JAAS configuration section named 'Server' was 
foundin '/opt/zookeeper-cluster/zookeeper/conf/jaas.conf

'.
    at 
org.apache.zookeeper.server.ServerCnxnFactory.c

Re: Enabling Auth between Zookeeper Servers

2020-02-11 Thread Sebastian Schmitz

Hello Mate,

thank you for your reply.

I just deployed it in our Dev-Environment, which has three nodes. But 
when updating the first node it has the same problem.


The problem with not using 0.0.0.0 is that the configuration of Docker 
only promotes the internal network to the containers and if I add the 
internal IP to the config it just won't work as all three docker-hosts 
have the same internal network and only port-mappings allow the services 
to be reached from outside world. The FQDN doesn't match the internal IP 
either, so the only solution for me is to use 0.0.0.0.


I set it to false as it's a rolling update of the three nodes. Will 
change them to true on two more rolling restarts then.


That's what I don't understand either. Even adding the "Server" to the 
jaas.conf didn't fix that exception.


Here are the Configs and Logs (with the Server-part included):

jaas.conf:
QuorumServer {
   org.apache.zookeeper.server.auth.DigestLoginModule required
   user_zookeeper="test";
};

QuorumClient {
   org.apache.zookeeper.server.auth.DigestLoginModule required
   username="zookeeper"
   password="test";
};

Server {
   org.apache.zookeeper.server.auth.DigestLoginModule required
   user_zookeeper="test"
};

Client {
   org.apache.zookeeper.server.auth.DigestLoginModule required
   username="zookeeper"
   password="test";
};

zoo.cfg:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/mnt/zk_data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
dataLogDir=/mnt/zk_data_log
autopurge.snapRetainCount=3
autopurge.purgeInterval=24
quorum.auth.enableSasl=true
quorum.auth.learnerRequireSasl=false
quorum.auth.serverRequireSasl=false
quorum.auth.learner.loginContext=QuorumLearner
quorum.auth.server.loginContext=QuorumServer
quorum.cnxn.threads.size=20
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
secureClientPort=2281
server.1=0.0.0.0:2888:3888
server.2=kafkad02.x.azure.com:2888:3888
server.3=kafkad03.x.azure.com:2888:3888

Server-Log:
Using config: /opt/zookeeper-cluster/zookeeper/bin/../conf/zoo.cfg
Feb 11, 2020 18:43:53 + [1 1] com.newrelic INFO: New Relic Agent: 
Loading configuration file "/opt/zookeeper-cluster/newrelic/./newrelic.yml"
Feb 11, 2020 18:43:53 + [1 1] com.newrelic INFO: Using default 
collector host: collector.newrelic.com
Feb 11, 2020 18:43:53 + [1 1] com.newrelic INFO: New Relic Agent: 
Writing to log file: /opt/zookeeper-cluster/newrelic/logs/newrelic_agent.log

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by 
com.newrelic.weave.weavepackage.NewClassAppender 
(file:/opt/zookeeper-cluster/newrelic/newrelic.jar) to method 
java.net.URLClassLoader.addURL(java.net.URL)
WARNING: Please consider reporting this to the maintainers of 
com.newrelic.weave.weavepackage.NewClassAppender
WARNING: Use --illegal-access=warn to enable warnings of further illegal 
reflective access operations

WARNING: All illegal access operations will be denied in a future release
2020-02-11 18:43:59,257 [myid:] - INFO [main:QuorumPeerConfig@136] - 
Reading configuration from: 
/opt/zookeeper-cluster/zookeeper/bin/../conf/zoo.cfg
2020-02-11 18:43:59,477 [myid:] - INFO 
[main:QuorumPeer$QuorumServer@185] - Resolved hostname: 
kafkad02.x.azure.com to address: kafkad02.x.azure.com/1.2.3.4
2020-02-11 18:43:59,477 [myid:] - INFO 
[main:QuorumPeer$QuorumServer@185] - Resolved hostname: 0.0.0.0 to 
address: /0.0.0.0
2020-02-11 18:43:59,666 [myid:] - INFO 
[main:QuorumPeer$QuorumServer@185] - Resolved hostname: 
kafkad03.x.azure.com to address: kafkad03.x.azure.com/1.2.3.5
2020-02-11 18:43:59,666 [myid:] - INFO [main:QuorumPeerConfig@398] - 
Defaulting to majority quorums
2020-02-11 18:43:59,677 [myid:1] - INFO [main:DatadirCleanupManager@78] 
- autopurge.snapRetainCount set to 3
2020-02-11 18:43:59,677 [myid:1] - INFO [main:DatadirCleanupManager@79] 
- autopurge.purgeInterval set to 24
2020-02-11 18:43:59,732 [myid:1] - INFO 
[PurgeTask:DatadirCleanupManager$PurgeTask@138] - Purge task started.
2020-02-11 18:43:59,749 [myid:1] - INFO  [main:QuorumPeerMain@130] - 
Starting quorum peer
2020-02-11 18:43:59,78

Re: Enabling Auth between Zookeeper Servers

2020-02-11 Thread Rakesh Radhakrishnan
>java.io.IOException: No JAAS configuration section named 'Server'

I could see you have enabled client-server authentication as well. It looks
to me that the error is coming from that. Please share the complete error
logs to trace it.
Have you configured "*Server*" section along with the "*QuorumServer*" and "
*QuorumClient*" sections? If not, please configure "*Server*" section along
with others and try it out.

Reference:
https://cwiki.apache.org/confluence/display/ZOOKEEPER/Client-Server+mutual+authentication
[image: image.png]

Thanks,
Rakesh

On Tue, Feb 11, 2020 at 7:26 AM Sebastian Schmitz <
sebastian.schm...@propellerhead.co.nz> wrote:

> Hello,
>
> I'm currently looking into enabling the Auth between Zookeeper-Servers
> and found this documentation:
>
>
> https://cwiki.apache.org/confluence/display/ZOOKEEPER/Server-Server+mutual+authentication
>
> However, when I use the config from the document (for Digest-MD5) I get
> this exception in Zookeeper 3.4.14 and also 3.5.6, which I tried because
> I thought using latest version could help:
> java.io.IOException: No JAAS configuration section named 'Server' was
> found in '/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
>
> And of course that's right, because there's only QuorumServer and
> QuorumClient in the jaas.conf:
>
> jaas.conf:
> QuorumServer {
> org.apache.zookeeper.server.auth.DigestLoginModule required
> user_zookeeper="test";
> };
>
> QuorumClient {
> org.apache.zookeeper.server.auth.DigestLoginModule required
> username="zookeeper"
> password="test";
> };
>
> I also tried renaming the QuorumServer to just "Server". No change.
>
> My zoo.cfg:
> tickTime=2000
> initLimit=10
> syncLimit=5
> dataDir=/mnt/zk_data
> clientPort=2181
> dataLogDir=/mnt/zk_data_log
> autopurge.snapRetainCount=3
> autopurge.purgeInterval=24
> quorum.auth.enableSasl=true
> quorum.auth.learnerRequireSasl=false
> quorum.auth.serverRequireSasl=false
> quorum.auth.learner.loginContext=QuorumLearner
> quorum.auth.server.loginContext=QuorumServer
> quorum.cnxn.threads.size=20
> authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
> secureClientPort=2281
> server.1=0.0.0.0:2888:3888
>
> Any idea what I could try? Or maybe there's some better document on how
> to achieve this?
>
> Thank you
>
> Sebastian
>
>
> --
> DISCLAIMER
> This email contains information that is confidential and which
> may be
> legally privileged. If you have received this email in error please
>
> notify the sender immediately and delete the email.
> This email is intended
> solely for the use of the intended recipient and you may not use or
> disclose this email in any way.
>


Re: Enabling Auth between Zookeeper Servers

2020-02-11 Thread Szalay-Bekő Máté
Hello Sebastian,

In general I think you did configure ZooKeeper just fine. A few remarks:
- I am not sure how ZooKeeper server-server authentication is expected to
work when you only use a single server. Would you mind trying to start a
Quorum with e.g. 3 servers?
- also, I think it is a good idea to avoid using 0.0.0.0 as hostname,
especially if you would run the cluster on multiple different servers /
docker containers. Try using the fully qualified domain name for a
multi-server setup, or if you just test multiple ZooKeeper servers on the
same machine, then just use 127.0.0.1. (maybe it has no effect in the
current case, but for SSL or for dynamic reconfig it might be bad to use
0.0.0.0. Also I remember problems with rolling restarts when using 0.0.0.0
in the config)
- is there a reason why you set 'quorum.auth.learnerRequireSasl' and
'quorum.auth.serverRequireSasl' to false? Using false is usually good idea
during rolling upgrade, but if you start a new cluster and want to use
server-server authentication, then you can just set them to true.

I don't understand why you got the exception " No JAAS configuration
section named 'Server' was found" ... Setting the loginContext should have
fixed that. If you still see the same issue with the 3 server setup, then
can you please share the config files, the command how you start ZooKeeper
and also the log files with us, so that we can look deeper?

Kind regards,
Mate

On Tue, Feb 11, 2020 at 2:56 AM Sebastian Schmitz <
sebastian.schm...@propellerhead.co.nz> wrote:

> Hello,
>
> I'm currently looking into enabling the Auth between Zookeeper-Servers
> and found this documentation:
>
>
> https://cwiki.apache.org/confluence/display/ZOOKEEPER/Server-Server+mutual+authentication
>
> However, when I use the config from the document (for Digest-MD5) I get
> this exception in Zookeeper 3.4.14 and also 3.5.6, which I tried because
> I thought using latest version could help:
> java.io.IOException: No JAAS configuration section named 'Server' was
> found in '/opt/zookeeper-cluster/zookeeper/conf/jaas.conf
>
> And of course that's right, because there's only QuorumServer and
> QuorumClient in the jaas.conf:
>
> jaas.conf:
> QuorumServer {
> org.apache.zookeeper.server.auth.DigestLoginModule required
> user_zookeeper="test";
> };
>
> QuorumClient {
> org.apache.zookeeper.server.auth.DigestLoginModule required
> username="zookeeper"
> password="test";
> };
>
> I also tried renaming the QuorumServer to just "Server". No change.
>
> My zoo.cfg:
> tickTime=2000
> initLimit=10
> syncLimit=5
> dataDir=/mnt/zk_data
> clientPort=2181
> dataLogDir=/mnt/zk_data_log
> autopurge.snapRetainCount=3
> autopurge.purgeInterval=24
> quorum.auth.enableSasl=true
> quorum.auth.learnerRequireSasl=false
> quorum.auth.serverRequireSasl=false
> quorum.auth.learner.loginContext=QuorumLearner
> quorum.auth.server.loginContext=QuorumServer
> quorum.cnxn.threads.size=20
> authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
> secureClientPort=2281
> server.1=0.0.0.0:2888:3888
>
> Any idea what I could try? Or maybe there's some better document on how
> to achieve this?
>
> Thank you
>
> Sebastian
>
>
> --
> DISCLAIMER
> This email contains information that is confidential and which
> may be
> legally privileged. If you have received this email in error please
>
> notify the sender immediately and delete the email.
> This email is intended
> solely for the use of the intended recipient and you may not use or
> disclose this email in any way.
>