I've been trying for some time to setup LDAP on a RabbitMQ cluster, but I keep running into issues. It seems some of the issues have been solved by others, but their actual solutions in various forums were not posted.
Here is my rabbitmq.config file
[
{rabbitmq_management, [
{listener, [{port, 15671},
{ssl, true}
]}
]},
{rabbit, [
{tcp_listeners, []},
{ssl_listeners, [5671]},
{ssl_options, [{cacertfile,"/etc/rabbitmq/ssl/cacert.pem"},
{certfile,"/etc/rabbitmq/ssl/cert.pem"},
{keyfile,"/etc/rabbitmq/ssl/key.pem"},
{verify,verify_none},
{fail_if_no_peer_cert,false}]},
{auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_ldap]}
]},
{rabbitmq_auth_backend_ldap,
[ {servers, ["ldap01","ldap02"]},
{user_dn_pattern, "uid=${username},ou=people,dc=company,dc=com"},
%% {dn_lookup_attribute, "uid"},
%% {dn_lookup_base, "DC=company,DC=com"},
{use_ssl, true},
{port, 636},
{log, network_unsafe},
{vhost_access_query, {'or', [{in_group, "cn=group1,ou=groups,dc=company,dc=com","memberuid"},
{in_group, "cn=group2,ou=groups,dc=company,dc=com","memberuid"}
]
}
},
{resource_access_query, {'or', [{in_group, "cn=group1,ou=groups,dc=company,dc=com","memberuid"},
{in_group, "cn=group2,ou=groups,dc=company,dc=com","memberuid"}
]
}
},
{tag_queries, [{administrator, {'or', [{in_group, "cn=group1,ou=groups,dc=company,dc=com", "memberuid"},
{in_group, "cn=group2,ou=groups,dc=company,dc=com","memberuid"}
]
}
}
]
}
]
}
].
enabled plugins is
[rabbitmq_auth_backend_ldap,rabbitmq_management].
When I login through the admin interface my username and password are accepted. However the dn becomes uid=myuser,ou=people,dc=company,dc=com and this value is looked up against the groups membership on the memberuid value. memberuid in the group contains just the list of uid values, so this lookup fails. (as is my understanding).
=INFO REPORT==== 20-Nov-2017::14:04:07 ===
LDAP network traffic: search request = {'SearchRequest',
"cn=group1,ou=groups,dc=company,dc=com",
baseObject,derefAlways,0,0,false,
{equalityMatch,
{'AttributeValueAssertion',
"memberuid",
"uid=myuser,ou=people,dc=company,dc=com"}},
["objectClass"]}
I've tried adding the {dn_lookup_attribute, "uid"} but this causes an error in the logs:
=ERROR REPORT==== 20-Nov-2017::13:42:55 ===
** Generic server <0.301.0> terminating
** Last message in was {submit,#Fun<rabbit_auth_backend_ldap.14.94440766>,
<0.618.0>,reuse}
** When Server state == {from,<0.618.0>,#Ref<0.2132095093.3561750529.105122>} ** Reason for termination ==
** {error,
{{badmatch,
{error,
{asn1,
{function_clause,
[{'ELDAPv3',encode_restricted_string,
[none,[<<4>>]],
[{file,
"/tmp/build/8979955e/erlang-rpm-src/BUILD/otp-OTP-20.1.5/lib/eldap/src/../ebin/ELDAPv3.erl"},
{line,3438}]},
{'ELDAPv3',enc_SearchRequest,2,
[{file,
"/tmp/build/8979955e/erlang-rpm-src/BUILD/otp-OTP-20.1.5/lib/eldap/src/../ebin/ELDAPv3.erl"},
{line,1634}]},
{'ELDAPv3',enc_LDAPMessage_protocolOp,2,
[{file,
"/tmp/build/8979955e/erlang-rpm-src/BUILD/otp-OTP-20.1.5/lib/eldap/src/../ebin/ELDAPv3.erl"},
{line,334}]},
{'ELDAPv3',enc_LDAPMessage,2,
[{file,
"/tmp/build/8979955e/erlang-rpm-src/BUILD/otp-OTP-20.1.5/lib/eldap/src/../ebin/ELDAPv3.erl"},
{line,305}]},
{'ELDAPv3',encode,2,
[{file,
"/tmp/build/8979955e/erlang-rpm-src/BUILD/otp-OTP-20.1.5/lib/eldap/src/../ebin/ELDAPv3.erl"},
{line,143}]},
{eldap,send_the_LDAPMessage,3,
[{file,"eldap.erl"},{line,994}]},
{eldap,collect_search_responses,4,
[{file,"eldap.erl"},{line,767}]},
{eldap,do_search,3,
[{file,"eldap.erl"},{line,719}]}]}}}},
[{eldap,send_the_LDAPMessage,3,[{file,"eldap.erl"},{line,994}]},
{eldap,collect_search_responses,4,[{file,"eldap.erl"},{line,767}]},
{eldap,do_search,3,[{file,"eldap.erl"},{line,719}]},
{eldap,loop,2,[{file,"eldap.erl"},{line,521}]}]}}
=ERROR REPORT==== 20-Nov-2017::13:42:55 ===
Ranch listener rabbit_web_dispatch_sup_15671 had connection process started with cowboy_protocol:start_link/4 at <0.618.0> exit with reason: [{reason,{{error,{{badmatch,{error,{asn1,{function_clause,[{'ELDAPv3',encode_restricted_string,[none,[<<4>>]],[{file,"/tmp/build/8979955e/erlang-rpm-src/BUILD/otp-OTP-20.1.5/lib/eldap/src/../ebin/ELDAPv3.erl"},{line,3438}]},{'ELDAPv3',enc_SearchRequest,2,[{file,"/tmp/build/8979955e/erlang-rpm-src/BUILD/otp-OTP-20.1.5/lib/eldap/src/../ebin/ELDAPv3.erl"},{line,1634}]},{'ELDAPv3',enc_LDAPMessage_protocolOp,2,[{file,"/tmp/build/8979955e/erlang-rpm-src/BUILD/otp-OTP-20.1.5/lib/eldap/src/../ebin/ELDAPv3.erl"},{line,334}]},{'ELDAPv3',enc_LDAPMessage,2,[{file,"/tmp/build/8979955e/erlang-rpm-src/BUILD/otp-OTP-20.1.5/lib/eldap/src/../ebin/ELDAPv3.erl"},{line,305}]},{'ELDAPv3',encode,2,[{file,"/tmp/build/8979955e/erlang-rpm-src/BUILD/otp-OTP-20.1.5/lib/eldap/src/../ebin/ELDAPv3.erl"},{line,143}]},{eldap,send_the_LDAPMessage,3,[{file,"eldap.erl"},{line,994}]},{eldap,collect_search_responses,4,[{file,"eldap.erl"},{line,767}]},{eldap,do_search,3,[{file,"eldap.erl"},{line,719}]}]}}}},[{eldap,send_the_LDAPMessage,3,[{file,"eldap.erl"},{line,994}]},{eldap,collect_search_responses,4,[{file,"eldap.erl"},{line,767}]},{eldap,do_search,3,[{file,"eldap.erl"},{line,719}]},{eldap,loop,2,[{file,"eldap.erl"},{line,521}]}]}},{gen_server2,call,[<0.301.0>,{submit,#Fun<rabbit_auth_backend_ldap.14.94440766>,<0.618.0>,reuse},infinity]}}},{mfa,{rabbit_mgmt_wm_whoami,is_authorized,2}},{stacktrace,[{gen_server2,call,3,[{file,"src/gen_server2.erl"},{line,327}]},{rabbit_auth_backend_ldap,user_login_authentication,2,[{file,"src/rabbit_auth_backend_ldap.erl"},{line,79}]},{rabbit_access_control,try_authenticate,3,[{file,"src/rabbit_access_control.erl"},{line,88}]},{rabbit_access_control,'-check_user_login/2-fun-0-',4,[{file,"src/rabbit_access_control.erl"},{line,74}]},{lists,foldl,3,[{file,"lists.erl"},{line,1263}]},{rabbit_mgmt_util,is_authorized,6,[{file,"src/rabbit_mgmt_util.erl"},{line,161}]},{cowboy_rest,call,3,[{file,"src/cowboy_rest.erl"},{line,976}]},{cowboy_rest,is_authorized,2,[{file,"src/cowboy_rest.erl"},{line,150}]}]},{req,[{socket,{sslsocket,{gen_tcp,#Port<0.21348>,tls_connection,<0.504.0>},<0.617.0>}},{transport,ranch_ssl},{connection,keepalive},{pid,<0.618.0>},{method,<<"GET">>},{version,'HTTP/1.1'},{peer,{{10,105,64,53},59845}},{host,<<"dubdc2testldaprabbitmq01.cmdb.inhouse.company.com">>},{host_info,undefined},{port,15671},{path,<<"/api/whoami">>},{path_info,undefined},{qs,<<>>},{qs_vals,[]},{bindings,[]},{headers,[{<<"host">>,<<"dubdc2testldaprabbitmq01.cmdb.inhouse.company.com:15671">>},{<<"connection">>,<<"keep-alive">>},{<<"user-agent">>,<<"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36">>},{<<"authorization">>,<<"Basic Z2J1cmtlOkFzYVMuXjIz">>},{<<"content-type">>,<<"application/json">>},{<<"accept">>,<<"*/*">>},{<<"referer">>,<<"https://dubdc2testldaprabbitmq01.cmdb.inhouse.company.com:15671/">>},{<<"accept-encoding">>,<<"gzip, deflate, br">>},{<<"accept-language">>,<<"en-GB,en-US;q=0.9,en;q=0.8">>},{<<"cookie">>,<<"m=2258:Z2J1cmtlOkFzYVMuXjIz">>}]},{p_headers,[{<<"connection">>,[<<"keep-alive">>]}]},{cookies,undefined},{meta,[]},{body_state,waiting},{buffer,<<>>},{multipart,undefined},{resp_compress,true},{resp_state,waiting},{resp_headers,[{<<"vary">>,<<"origin">>}]},{resp_body,<<>>},{onresponse,#Fun<rabbit_cowboy_middleware.onresponse.4>}]},{state,{context,undefined,none,undefined}}]
Adding {dn_lookup_base, "DC=company,DC=com"} removes that error, but I get the same result as without either dn_lookup entry:
=INFO REPORT==== 20-Nov-2017::14:20:01 ===
LDAP template result: "cn=group1,ou=groups,dc=company,dc=com"
=INFO REPORT==== 20-Nov-2017::14:20:01 ===
LDAP network traffic: search request = {'SearchRequest',
"cn=group1,ou=groups,dc=company,dc=com",
baseObject,derefAlways,0,0,false,
{equalityMatch,
{'AttributeValueAssertion',
"memberuid",
"uid=myuser,ou=people,dc=company,dc=com"}},
["objectClass"]}
=INFO REPORT==== 20-Nov-2017::14:20:01 ===
LDAP network traffic: search reply = searchResDone
=INFO REPORT==== 20-Nov-2017::14:20:01 ===
LDAP evaluated in_group for "cn=group1,ou=groups,dc=company,dc=com": false
What am I doing wrong?
Doing some LDAP lookups, for completeness:
$ ldapsearch -H ldaps://ldap01:636 -x -b "uid=myuser,ou=People,dc=company,dc=com"
# extended LDIF
#
# LDAPv3
# base <uid=myuser,ou=People,dc=company,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
dn: uid=myuser,ou=People,dc=company,dc=com
uidNumber: 501
gidNumber: 100
givenName: My
sn: User
loginShell: /bin/bash
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetorgperson
objectClass: posixAccount
uid: myuser
cn: My User
homeDirectory: /home/myuser
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
$ ldapsearch -H ldaps://ldap01:636 -x -b 'cn=group1,ou=groups,dc=company,dc=com'
# extended LDIF
#
# LDAPv3
# base <cn=group1,ou=groups,dc=company,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
dn: cn=group1,ou=Groups,dc=company,dc=com
memberUid: myuser
memberUid: myuser1
memberUid: myuser2
memberUid: myuser3
memberUid: myuser4
memberUid: myuser5
gidNumber: 70001
objectClass: top
objectClass: groupofuniquenames
objectClass: posixgroup
cn: group1
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
Installed RPMs on CentOS 6:
rabbitmq-server-3.6.14-1.el6.noarch
erlang-20.1.5-1.el6.x86_64
Help, please.