
Wir haben eine PHP-Anwendung auf einem RHEL6-Rechner installiert, die für ihre Funktion auf einige LDAP-Aufrufe angewiesen ist. Insbesondere werden ldap_connect und ldap_bind verwendet, um Benutzer zu verifizieren und ihre Details abzurufen.
Dieser Mechanismus funktioniert auf unserem Entwicklungsserver, der auf einem Ubuntu-Server läuft, einwandfrei. Auf unserer Produktionsmaschine, die auf RHEL6 läuft, schlägt der Vorgang fehl. In beiden Fällen stellen wir mit denselben Anmeldeinformationen eine Verbindung zum selben LDAP-Server her, also stimmt offensichtlich etwas mit dem RHEL6-Server nicht. Wir verwenden grundlegendes LDAP, kein SSL-Zeug.
Ich kann bestätigen, dass auf dem neuen Server kein Firewall- oder Netzwerkproblem vorliegt. Das Pingen an den LDAP-Server funktioniert einwandfrei. Auch ein ldap_connect-Aufruf ist erfolgreich.
Um das Problem von unserer Anwendung zu isolieren, habe ich das folgende einfache PHP-Testskript verwendet:
<?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
?>
Ich führe das obige Skript auf beiden Servern aus. Auf unserem Entwicklungsserver ist alles in Ordnung. Auf unserem RHEL6-Server funktioniert die Verbindung, aber das Binden schlägt nach einer Verzögerung von über einer Minute fehl:
OpenLdap-Fehlermeldung: LDAP-Server kann nicht kontaktiert werden
Ich bin überhaupt kein Systemadministrator, daher verstehe ich die meisten Diskussionen zu diesem Fehler im Internet nicht ganz. Ich hoffe, dass mir hier jemand dabei helfen kann. Vielen Dank im Voraus.
Antwort1
Im Gegensatz zu RHEL5, RHEL6erfordertSSL-Zertifikate (genauer TLS) zur Verbindung mit OpenLDAP. Ich habe lange nach einer Problemumgehung gesucht und mich schließlich damit abgefunden, dass die Verwendung eines SSL-Zertifikats einfacher und sicherer ist, als einen Weg zu finden, es nicht zu verwenden.
Dieser Link könnte helfen: http://www.linuxquestions.org/questions/linux-enterprise-47/rhel-6-ldap-now-requires-tls-843917/
Sie können versuchen, den Legacy-Modus zu erzwingen. Möglicherweise funktioniert das auch. Ich habe jedoch festgestellt, dass dies nicht vollständig funktioniert und später möglicherweise Probleme auftreten.
authconfig --enableldap --enableldapauth --forcelegacy=yes --ldapserver=myldapserver.com --ldapbasedn="dc=example,dc=com" --update
Antwort2
Ändern Sie für centos7/RHEL7 Ihre Werte:
authconfig --enableforcelegacy --enableshadow --enablemd5 --enableldap --enableldapauth --disableldaptls --ldapserver=127.0.0.1 --ldapbasedn="dc=**ldap,dc=***.uk" --enablemkhomedir --disablesssd --disablesssdauth --update