
У нас есть приложение PHP, развернутое на машине RHEL6, которое использует некоторые вызовы ldap для своей работы. В частности, ldap_connect и ldap_bind используются для проверки пользователей, а также для поиска их данных.
Этот механизм отлично работает на нашем сервере разработки, который работает на сервере Ubuntu. На нашей рабочей машине, которая работает на RHEL6, процесс дает сбой. В обоих случаях мы подключаемся к одному и тому же серверу LDAP, используя одни и те же учетные данные, так что очевидно, что на сервере RHEL6 что-то не так. Мы используем базовый LDAP, без SSL.
Я могу подтвердить, что на новом сервере нет проблем с брандмауэром или сетью. Пинг на сервер LDAP работает отлично. Также успешно проходит вызов ldap_connect.
Чтобы изолировать проблему от нашего приложения, я использовал следующий простой тестовый PHP-скрипт:
<?php
// Set the ldap server
$ldapurl = "[snipped]";
$ldapuser = "[snipped]";
$ldappass = "[snipped]";
// Set the debug flag
$debug = true;
// Set debugging
if ($debug) {
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
}
// connect to ldap server
echo "Trying to connect<br/>";
echo "1: " . date('l jS \of F Y h:i:s A') . "<br/>";
$ldapconn = ldap_connect($ldapurl) or die ("Couldn't connect");
echo "2: " . date('l jS \of F Y h:i:s A') . "<br/>";
// binding to ldap server
echo "Trying to bind with $ldapuser - $ldappass<br/>";
echo "3: " . date('l jS \of F Y h:i:s A') . "<br/>";
$ldapbind = @ldap_bind($ldapconn, $ldapuser, $ldappass);
echo "4: " . date('l jS \of F Y h:i:s A') . "<br/>";
if (!$ldapbind) {
echo "Unable to bind to server $ldapurl\n";
echo "OpenLdap error message: " . ldap_error($ldapconn) . "\n";
exit;
}
// Rest of code goes here
?>
Я запускаю этот скрипт на обоих серверах. На нашем сервере разработки все хорошо. На нашем сервере RHEL6 соединение работает, но привязка терпит неудачу после задержки более минуты:
Сообщение об ошибке OpenLdap: Невозможно связаться с сервером LDAP
Я вообще не сисадмин, поэтому большинство обсуждений, которые я нашел в сети по этой ошибке, я не полностью понимаю. Надеюсь, кто-нибудь здесь сможет мне помочь с этим. Заранее большое спасибо.
решение1
В отличие от RHEL5, RHEL6требуетсертификаты ssl (точнее TLS) для подключения к openldap. Я долго искал обходной путь и в конце концов остановился на том, что использовать сертификат ssl было проще и безопаснее, чем искать способ не использовать его.
Эта ссылка может быть полезна: http://www.linuxquestions.org/questions/linux-enterprise-47/rhel-6-ldap-now-requires-tls-843917/
Вы можете попробовать принудительно включить режим Legacy, и это может сработать, но я обнаружил, что он работает не полностью, и в дальнейшем вы можете столкнуться с проблемами.
authconfig --enableldap --enableldapauth --forcelegacy=yes --ldapserver=myldapserver.com --ldapbasedn="dc=example,dc=com" --update
решение2
Для centos7/RHEL7 измените значения на следующие:
authconfig --enableforcelegacy --enableshadow --enablemd5 --enableldap --enableldapauth --disableldaptls --ldapserver=127.0.0.1 --ldapbasedn="dc=**ldap,dc=***.uk" --enablemkhomedir --disablesssd --disablesssdauth --update