当前位置: 首页 > 知识库问答 >
问题:

PHP LDAP连接无法联系LDAP服务器

蔚桐
2023-03-14

我有一个外部Web服务器,我正在迁移。我试图通过LDAP对内部服务器上的Active Directory进行身份验证。我可以使用相同的代码从旧服务器(Ubuntu 8)进行连接和身份验证,但无法在新服务器(Redhat 7)上进行身份验证。

外部服务器当前运行的是运行PHP 5.4.16并启用LDAP支持(PHP LDAP)的Redhat 7。

内部服务器目前是一个带有LDAP和Active Directory的Windows server 2008机箱。

下面的代码是我使用的当前PHP,它能够在旧服务器上连接,但在新服务器上有问题。它基本上使用PHP LDAP连接字符串并尝试绑定。我已经用标识符替换了一些个人信息。(用户名,子域等)

<?php

$adServer = "ldaps://subdomain.domain.edu";

$ldap = ldap_connect($adServer);
$username = 'USERNAME';
$password = 'PASS';

$ldaprdn = 'DOMAIN' . "\\" . $username;

ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);

$bind = @ldap_bind($ldap, $ldaprdn, $password);


if ($bind) {
    $filter="(sAMAccountName=$username)";
    $result = ldap_search($ldap,"dc=subdomain,dc=domain,dc=edu",$filter);
    ldap_sort($ldap,$result,"sn");
    $info = ldap_get_entries($ldap, $result);
    for ($i=0; $i<$info["count"]; $i++)
    {
        if($info['count'] > 1)
            break;
        echo "<p>You are accessing <strong> ". $info[$i]["sn"][0] .", " . $info[$i]["givenname"][0] ."</strong><br /> (" . $info[$i]["samaccountname"][0] .")</p>\n";
        echo '<pre>';
        var_dump($info);
        echo '</pre>';
        $userDn = $info[$i]["distinguishedname"][0];
    }
    @ldap_close($ldap);
} else {
    $msg = "Invalid email address / password";
    echo $msg;
}

?>

在新服务器上,我可以使用以下ldapsearch命令连接到ldap服务器:

ldapsearch-x-LLL-h子域。领域edu-D'CN=DOMAIN\USERNAME'-w'PASS'-b“dc=subdomain,dc=DOMAIN,dc=edu”-s sub“(objectClass=user)”给定名称

这是我的ldap。conf文件(/etc/openldap/ldap.conf,新服务器)

#
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

#BASE   dc=example,dc=com
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666

#SIZELIMIT      12
#TIMELIMIT      15
#DEREF          never

#TLS_CACERTDIR  /etc/openldap/certs

# Turning this off breaks GSSAPI used with krb5 when rdns = false
SASL_NOCANON    on
TLS_REQCERT never

这是我在错误日志(新服务器)中得到的信息:

ldap_create
ldap_url_parse_ext(ldaps://subdomain.domain.edu)
ldap_bind_s
ldap_simple_bind_s
ldap_sasl_bind_s
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP subdomain.domain.edu:636
ldap_new_socket: 10
ldap_prepare_socket: 10
ldap_connect_to_host: Trying XXX.18X.XX.19:636
ldap_pvt_connect: fd: 10 tm: -1 async: 0
attempting to connect:
connect errno: 13
ldap_close_socket: 10
ldap_new_socket: 10
ldap_prepare_socket: 10
ldap_connect_to_host: Trying XXX.18X.XX.24:636
ldap_pvt_connect: fd: 10 tm: -1 async: 0
attempting to connect:
connect errno: 13
ldap_close_socket: 10
ldap_new_socket: 10
ldap_prepare_socket: 10
ldap_connect_to_host: Trying XXX.18X.XX.41:636
ldap_pvt_connect: fd: 10 tm: -1 async: 0
attempting to connect:
connect errno: 13
ldap_close_socket: 10
ldap_new_socket: 10
ldap_prepare_socket: 10
ldap_connect_to_host: Trying 2002:XXXX:XXXX::XXXX:XXXX 636
ldap_pvt_connect: fd: 10 tm: -1 async: 0
attempting to connect:
connect errno: 13
ldap_close_socket: 10
ldap_err2string
[Mon Feb 23 15:20:28.689775 2015] [:error] [pid 12299] [client 10.25.XX.XX:53630] PHP Warning:  ldap_bind(): Unable to bind to server: Can't contact LDAP server in /var/www/html/index2.php on line 19

共有1个答案

辛健
2023-03-14

又找了几天,我想出了答案。SELinux.更具体地说,设置的SELinux布尔值。httpd_can_network_connect是我们正在看的:

httpd_can_network_connect(httpd服务)::允许httpd脚本和模块连接到网络

此命令可用于将其打开:

setsebool-P httpd_can_network_connect on

我找到了这个答案:

LDAP可以与PHP CLI一起使用,但不能通过apache

 类似资料:
  • 显示以下错误:: 线程“main”Java.lang.RuntimeException:javax.mail.MessagingException:无法连接到SMTP主机:localhost,端口:587,Sendmail.Main(Sendmail.Java:54)上的响应:421,原因是:javax.mail.MessagingException:无法连接到SMTP主机:localhost,端

  • 我知道这个问题可能会被标记为重复,但请记住,我已经搜索了许多张贴的解决方案,我的错误还没有得到修复。 当启动postgres时,我得到以下错误: 无法联系postgresql应用服务器。 当以管理员身份运行时,错误被“解决”,但应用程序在另一个端口打开--有时它在50142、51120打开,其他端口在50859打开--。当它在另一个端口上打开时(就像前面说的那样),它要求输入连接到服务器的密码,我

  • 我正在尝试连接两个docker容器,一个是posgresql,另一个是python flask应用程序。两者都链接正确,python应用程序中的所有连接变量都直接取自postgres容器中通过链接公开的连接变量,并且与检查postgresql容器时发现的连接变量相同。当我将psql与连接字符串中的精确参数一起使用时,即: 成功连接到postgres容器中的数据库,因此我知道postgres正在通过

  • 我在设置打开班次时遇到问题,并在连接到我的服务器域后收到以下错误: 我不确定这是在告诉我做什么。我尝试按字面意思使用指令,但它无法识别命令。 有什么想法吗?

  • 问题内容: 我不确定如何解决此问题 我不知道为什么在尝试以下操作时会出现此错误: 当我尝试连接到postgres时: 问题答案: 可能是一些问题: PostgreSQL没有运行。用sudo检查 你的PostgresSQl不在端口5432上运行。你可以检查其键入 尝试连接到数据库时出现错误,例如用户名,密码或数据库名。检查它们是否是postgres要求你连接的对象,并且这是你要访问的db_name。

  • 在我做了和之后,我的postgres遇到了一些问题。我试着卸载postgres并重新安装它,但它并没有那么好用。 这就是我所做的: 现在,在我重新安装homebrew之后,当我使用时,它不显示任何错误消息。 但是我在我的Rails应用程序中运行,它显示: 更新 这对我也管用。