猿问

CentOS 7 上的 PHP:LDAP 无法绑定到服务器

我有以下代码


    public function openConnection()

    {

        $this->ldapServerHandle = ldap_connect(ConfigH::getConfig()->ldap->host);


        $bindDN = ConfigH::getConfig()->ldap->serviceAccount->bindDN;


        if ($this->ldapServerHandle) {

            $this->ldapBindHandle = ldap_bind(

                $this->ldapServerHandle,

                $bindDN,

                ConfigH::getConfig()->ldap->serviceAccount->password

            );

            if (!$this->ldapBindHandle) {

                $errorMsg = "LDAP::__construct(): Could not bind the service account ".$bindDN;

                LoggerH::emergency($errorMsg);

                throw new LDAPException($errorMsg);

            }

        } else {

            $errorMsg = "LDAP::__construct(): Could not connect to the LDAP server ".ConfigH::getConfig()->ldap->host;

            LoggerH::emergency($errorMsg);

            throw new LDAPException($errorMsg);

        }

    }

问题

从今天早上开始,我遇到了这个错误,让我很头疼:
Warning: ldap_bind(): Unable to bind to server: Can't contact LDAP server [...]

在 Windows 上一切正常,当我在 CentOS 生产服务器上执行代码时,它停止工作。

我已经检查过的

  • OpenLDAP 已安装并启用

  • LDAP 服务器可从 CentOS 服务器访问(Kerberos 在同一台机器上没有遇到任何问题)

我已经尝试过的

  • 重新安装了php-ldap扩展

  • 检查凭据和地址一百万次

附加信息

  • ConfigH::getConfig()->ldap->host 返回类似“adserver.ourcompany.com”的内容,这是我们的 LDAP 服务器的地址

  • ConfigH::getConfig()->ldap->serviceAccount->bindDN 返回一个有效的绑定 DN

  • ConfigH::getConfig()->ldap->serviceAccount->password 返回服务账号的密码


慕尼黑8549860
浏览 164回答 1
1回答

梦里花落0921

解决方案使用 CentOS 的人获得 SELinux,是的。在深入挖掘 Google(例如结果的第 4 页)和 Stackoverflow 之后,我发现问题是由 SELinux 限制httpd通过某些端口进行通信,尽管防火墙被配置为允许它,包括 LDAP 端口。要允许httpd通过这些端口进行通信,请运行以下命令setsebool -P httpd_can_network_connect 1(这里的原始解决方案(WhoIsRich 的回答))
随时随地看视频慕课网APP
我要回答