ldap_bind():无法绑定到服务器:无法联系LDAP服务器

时间:2014-05-06 09:29:57

标签: php symfony ldap

我尝试连接到Symfony应用程序中的LDAP服务器。而且我遇到了一些困难。

在本地测试时,一切正常。我可以通过以下代码轻松连接并绑定到LDAP服务器:

    $un = $user->getUsername();
    if (!$connect = ldap_connect("10.XX.XX.X", 389)) {
        $auth = false;
    } else {
        if($password !== null){
            if (!$res = ldap_bind($connect, $un, $password)) {
                $auth = false;
            } else {
                $auth = true;
            }
        }
    }

但是在服务器上,它给了我:

Warning: ldap_bind(): Unable to bind to server: Can't contact LDAP server in LdapProvider.php on line 71

我猜这是由于服务器端配置错误造成的。我虽然对LDAP很新,所以有谁可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

与OP相同的问题 - ldap可以与二进制php一起使用,但不能通过Apache。认为CA存在问题,但结果并非如此。

SELinux正在运行Enforced。当我暂时禁用SELinux时,ldap测试脚本在浏览器中运行良好。这最终促成了这个helpful answerCentOS Wiki on SELinux。在这里我们学习:

  

SELinux不允许您的httpd守护程序与LDAP通信   服务器在同一台机器上。

事实证明,SELinux拥有众多细粒度交换机,可以从不同的流程中进行特定的活动。在我的例子中,SELinux开箱即用,以禁止LDAP连接(即使在firewalld中启用了ldaps)。

您可以使用以下方法检查httpd的SELinux配置:

getsebool -a | grep httpd

返回:

[acoder@myboxen]# getsebool -a | grep httpd
httpd_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_connect_ftp --> off
httpd_can_connect_ldap --> off
httpd_can_connect_mythtv --> off
httpd_can_connect_zabbix --> off
httpd_can_network_connect --> off

通过httpd:

启用SELinux网络连接
setsebool -P httpd_can_network_connect on

无需重启Apache。从那一刻起,我的ldap脚本运行良好。

如上所述,如果您暂时禁用SELinux进行测试,请确保将SELinux设置回Enforcing setenforce 1

希望这对其他人有帮助。