Нам развернули приложение PHP на машине RHEL6, которая полагается на некоторые вызовы ldap для функционирования. В частности, ldap_connect и ldap_bind используются, чтобы проверить пользователей и также искать их детали.
Этот механизм работает просто великолепно на нашем сервере разработки, который работает на сервере Ubuntu. На нашей производственной машине, которая работает на RHEL6, сбоях процесса. В обоих случаях мы соединяемся с тем же сервером LDAP с помощью тех же учетных данных, так ясно что-то неправильно в сервере RHEL6. Мы используем основной LDAP, никакой материал SSL.
Я могу подтвердить, что нет никакого брандмауэра или сетевой проблемы на новом сервере. Проверка с помощью ping-запросов к серверу 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
Я не системный администратор вообще, поэтому большинство обсуждений, найденных относительно этой ошибки онлайн, я не полностью схватываю. Я надеюсь, что кто-то здесь может помочь мне с этим.Заранее большое спасибо.
В отличие от RHEL5, RHEL6 требует ssl сертификатов (точнее TLS) для подключения к openldap. Я ходил по кругу, пытаясь найти обходной путь, и в конце концов смирился с тем, что использование ssl сертификата было проще и безопаснее, чем поиск способа не использовать его.
Эта ссылка может помочь: http://www.linuxquestions.org/questions/linux-enterprise-47/rhel-6-ldap-now-requires-tls-843917/
Вы можете попробовать использовать старый режим, и это может сработать, но я обнаружил, что он не полностью работает, и вы можете увидеть проблемы позже.
authconfig --enableldap --enableldapauth --forcelegacy=yes --ldapserver=myldapserver.com --ldapbasedn="dc=example,dc=com" --update
Для centos7 / RHEL7 измените свои значения:
authconfig --enableforcelegacy --enableshadow --enablemd5 --enableldap --enableldapauth --disableldaptls --ldapserver=127.0.0.1 --ldapbasedn="dc=**ldap,dc=***.uk" --enablemkhomedir --disablesssd --disablesssdauth --update