我对MongoDB和LDAP相当陌生。我正在尝试使用LDAP对mongo进行用户身份验证。这些是我到目前为止已完成的步骤。

  • 在/etc文件夹中创建了一个saslauthd.conf文件,其中包含以下行:


  • mux中创建了一个/var/run/saslauthd目录,现在看起来像/var/run/saslauthd/mux
  • 使用sudo chmod 755 /var/run/saslauthd
  • 将权限设置为755
  • 修改了/etc/sysconfig/saslauthd以使其具有以下
  • MECH=ldap
  • 在同一文件上取消注释该行:
  • 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

    最佳答案

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

    您的问题(我有90%的把握)是saslauthd守护程序未运行或配置不正确。让我们看一下以下内容:

    检查service status service saslauthd status的输出应类似于我的,粘贴在下面。注意一些关键值,例如初始化脚本的位置,在我的情况下为/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)。

    请尝试一下,并告诉我们有关结果。



    调试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。然后我们将其删除并重新启动服务。现在该服务有效。

    关于java - mongo的LDAP配置抛出权限被拒绝,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36800502/

    10-10 17:57