активный каталог — PHP LDAP-соединение не может связаться с LDAP-сервером

У меня есть внешний веб-сервер, который я переношу. Я пытаюсь аутентифицироваться в Active Directory на внутреннем сервере через LDAP. Я могу подключиться и аутентифицироваться со старого сервера (Ubuntu 8), используя тот же код, но не могу аутентифицироваться на новом (Redhat 7).

На внешнем сервере в настоящее время работает Redhat 7 под управлением PHP 5.4.16 с включенной поддержкой LDAP (php-ldap).

Внутренним сервером в настоящее время является Windows Server 2008 с LDAP и Active Directory.

Приведенный ниже код — это текущий 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;
}

?>

На новом сервере я могу нормально подключиться к серверу ldap с помощью этой команды ldapsearch:

ldapsearch -x -LLL -h sub-domain.domain.edu -D 'CN=DOMAIN\USERNAME' -w 'PASS' -b "dc=subdomain,dc=domain,dc=edu" -s sub "(objectClass=user)" givenName

Вот мой файл 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

2

Решение

После поиска еще нескольких дней, я пришел с ответом. SELinux. Чтобы быть более конкретным, SELinux Booleans которые установлены. httpd_can_network_connect это тот, на который мы смотрим:

httpd_can_network_connect (HTTPD Service):: Allow HTTPD scripts and modules to connect to the network.

Эта команда может быть использована для включения:

setsebool -P httpd_can_network_connect on

Я решил это, найдя этот ответ:

LDAP работает с PHP CLI, но не через apache

6

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector