mongo的LDAP配置抛出权限被拒绝

时间:2016-04-22 18:01:09

标签: java mongodb security authentication ldap

我是MongoDB和LDAP的新手。我正在尝试使用LDAP来验证用户mongo。这些是我到目前为止所做的步骤。

  1. 在/ etc文件夹中创建了一个saslauthd.conf文件,其中包含以下行:
  2. ldap_servers: ldap://com.myldap.server
    ldap_use_sasl: yes
    ldap_mech: DIGEST-MD5
    ldap_auth_method: fastbind
    
    1. mux内创建了/var/run/saslauthd目录,现在看起来像/var/run/saslauthd/mux
    2. 使用sudo chmod 755 /var/run/saslauthd

    3. 将权限设置为755
    4. 修改/etc/sysconfig/saslauthd以获得以下

    5. MECH=ldap

      1. 取消注释同一文件中的行:
      2. DAEMONOPTS=--user saslauth

        现在,当我尝试使用以下命令测试身份验证机制时:

        testsaslauthd -u username -p password -f /var/run/saslauthd/mux

        我收到以下消息:

        connect(): Permission Denied

        我的作品基于thisthis 谁能指出我在这里缺少的东西?提前谢谢。

        更新

        我尝试使用sudo测试命令,如下所示:

        sudo testsaslauthd -u username -p password -f /var/run/saslauthd/mux

        我得到以下内容:

        connect() : Connection refused

1 个答案:

答案 0 :(得分:2)

感谢您的提问。我喜欢设置我的环境以尝试重现错误。你会很高兴听到我不认为这是一个难以克服的难题。但是,我可能花费的时间比我想要设置MongoDB,cyrus-sasl-md5,设置权限等更多时间,因为没有任何事实上与您的问题有关,至少乍一看。

您的问题(我90%肯定)是您的saslauthd守护程序未运行或未正确配置。我们来看看以下内容:

检查service status service saslauthd status的输出应与我的相似,粘贴在下面。请注意一些关键值,例如init脚本的位置,在我的情况下为/etc/init.d/saslauthd/;和套接字/var/run/saslauthd/mux,您需要在testsaslauthd [...] -f /var/run/saslauthd/mux命令中放置相同的文件位置。

root@hectorvp-pc:~# service saslauthd status                                                                                                                   
● saslauthd.service - LSB: saslauthd startup script
   Loaded: loaded (/etc/init.d/saslauthd)
   Active: active (running) since Tue 2016-04-26 12:04:59 BST; 1s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 11569 ExecStop=/etc/init.d/saslauthd stop (code=exited, status=0/SUCCESS)
  Process: 11586 ExecStart=/etc/init.d/saslauthd start (code=exited, status=0/SUCCESS)
   Memory: 2.0M
   CGroup: /system.slice/saslauthd.service
           ├─11606 /usr/sbin/saslauthd -a ldap -c -m /var/run/saslauthd -n 5
           ├─11607 /usr/sbin/saslauthd -a ldap -c -m /var/run/saslauthd -n 5
           ├─11608 /usr/sbin/saslauthd -a ldap -c -m /var/run/saslauthd -n 5
           ├─11609 /usr/sbin/saslauthd -a ldap -c -m /var/run/saslauthd -n 5
           └─11610 /usr/sbin/saslauthd -a ldap -c -m /var/run/saslauthd -n 5

Apr 26 12:04:59 hectorvp-pc systemd[1]: Starting LSB: saslauthd startup script...
Apr 26 12:04:59 hectorvp-pc saslauthd[11586]: * Starting SASL Authentication Daemon saslauthd
Apr 26 12:04:59 hectorvp-pc saslauthd[11606]: detach_tty      : master pid is: 11606
Apr 26 12:04:59 hectorvp-pc saslauthd[11606]: ipc_init        : listening on socket: /var/run/saslauthd/mux
Apr 26 12:04:59 hectorvp-pc systemd[1]: Started LSB: saslauthd startup script.
Apr 26 12:04:59 hectorvp-pc saslauthd[11586]: ...done.

如果服务未运行,只需使用service saslauthd start启动它并再次检查状态(service saslauthd status)以检查任何可能的上游错误。

您的ldap服务器也可能没有运行或未配置。您可以查看上面的服务状态(service slapd status)。

请试试这个并告诉我们结果。

  

编辑(2016年4月26日):通过本回答评论中的对话,我提取了更多步骤。请为答案下面的广泛对话道歉,其摘要如下:

调试saslauthd服务:如所示here,此服务使用系统日志。在我的情况下(Ubuntu),这些日志位于/var/log/syslog,但在您的情况下它们可能位于/var/log/messages。至少默认情况下。在您尝试启动该服务时查看此日志,看看是否有任何错误消息可能会为您提供有关问题的进一步见解。

/var/logs/messages中出现的错误是:could not bind to socket : /var/run/saslauthd/mux , bind: address already in use

我们使用文件命令检查mux套接字:file /var/run/saslauthd/mux,输出表明它是一个目录。它应该是socket。然后我们删除了它并重新启动了服务。现在该服务正常运作。