2017-10-04 9 views
-1

모스 킷토에서 작업 중이며 Redis를 백엔드로 사용하여 사용자 이름/비밀번호 쌍 인증 및 ACL을 처리 할 계획입니다. 나는 이것을하기 위해 JPmens의 인증 플러그인을 사용하고있다. 모스키토에 대한 백엔드로 redis를 사용하는 방법 ACL

는 mosquitto의 conf :

SET user1-test 2 

:

auth_opt_backends redis 
auth_plugin /etc/mosquitto/auth-plug.so 
auth_opt_redis_host 127.0.0.1 
auth_opt_redis_port 6379 
auth_opt_redis_userquery GET %s 
auth_opt_redis_aclquery GET %s-%s 

다음 이름/암호 쌍은

SET user1 PBKDF2$sha256$901$Qh18ysY4wstXoHhk$g8d2aDzbz3rYztvJiO3dsV698jzECxSg 

에 따라 설정이 ACL에 대해 작동하지 않습니다 인증을 위해 잘 작동된다 다음은 모기의 기록입니다 :

1507037072: Denied PUBLISH from mosqpub/3838-ip-172-31- (d0, q0, r0, m0, 'user1-test', ... (4 bytes)) 
1507037072: Received DISCONNECT from mosqpub/3838-ip-172-31- 

그래서 내가 pub/sub mosquitto를 시도 할 때마다 사용자를 인증하지만 게시 및 연결 차단을 허용하지 않습니다.

테스트와 함께 : 서브에 대한

mosquitto_pub -p 1884 -t "test" -m "demo" -u user1 -P xyz 

:

mosquitto_sub -p 1884 -t "test" -u user1 -P xyz 
+0

Just sa 잉은 도움이되지 않습니다. 어떻게 작동하지 않는지, 모든 메시지를 허용하는지 아니면 전혀 사용하지 않는지 설명해야합니다. 로그를 테스트 할 때 로그에서 무엇을 볼 수 있습니까? 어떻게 테스트하고 있습니까? – hardillb

+0

@ hardillb 나는 질문을 편집했습니다. 그래서, 이제는 문제가 뭔지 말해 줄 수 있니 .. :) –

답변

0

OK,이 밖으로 일했다.

제공 한 로그에 중요한 비트가 없습니다. 당신은 다음 줄을 포함해야 :

1507135115: ACL denying access to client with dangerous client id "mosqpub/2232-tiefighter" 

문제는 클라이언트 ID가 포함되어 있기 때문에 플러그인이 차단되는 '/'

다음 섹션에서는 코드입니다 :

/* We are using pattern based acls. Check whether the username or 
* client id contains a +, # or/and if so deny access. 
* 
* Without this, a malicious client may configure its username/client 
* id to bypass ACL checks (or have a username/client id that cannot 
* publish or receive messages to its own place in the hierarchy). 
*/ 

해결 방법은 -i 옵션을 사용하여 mosquitto_sub 및 mosquitto_pub의 클라이언트 ID를 설정하는 것입니다. 예 :

mosquitto_pub -p 1884 -t "test" -m "demo" -u user1 -P xyz -i publisher 
+0

고마워요. ....... –

+0

여러 의심의 여지가 있습니다. 여러 토픽 (acl 주제)을 설정하는 방법은 무엇입니까? redis 데이터베이스에서 동일한 사용자. –

+0

은 여러 개의 사용자 항목 항목을 설정하기 만합니다. – hardillb