我尝试连接到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很新,所以有谁可以帮助我吗?
答案 0 :(得分:0)
与OP相同的问题 - ldap可以与二进制php一起使用,但不能通过Apache。认为CA存在问题,但结果并非如此。
SELinux正在运行Enforced。当我暂时禁用SELinux时,ldap测试脚本在浏览器中运行良好。这最终促成了这个helpful answer和CentOS 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
。
希望这对其他人有帮助。