Php ldap#u bind():无法绑定到服务器:Can';不要联系LDAP服务器

Php ldap#u bind():无法绑定到服务器:Can';不要联系LDAP服务器,php,symfony,ldap,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 (

我正在尝试连接到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还比较陌生,所以这里有人可以帮我吗

与OP-ldap相同的问题也适用于二进制php,但不适用于Apache。我认为CA有问题,但事实并非如此

SELinux正在运行。当我临时禁用SELinux时,ldap测试脚本在浏览器中运行良好。这最终把我引向了这个和这个。在这里,我们了解到:

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进行测试,请确保使用
setEnforce1
将其设置回
Enforcement


希望这对其他人有帮助。

您的文件是LdapProvider.php吗?71号线上有什么?您尝试在本地和服务器上连接到同一个ldap服务器?您是否尝试对用户名和密码进行硬编码并试一试?我尝试过硬编码,是的,但没有结果。它在ldap_bind()上抛出错误-第71行就是这样。没有,我已经在本地开发了这个项目,现在我想部署它。检查您是否有权从本地连接到ldap服务器。我该怎么做,paistra?