OpenLDAP: Strong(er) authentication required

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
xenilio
Beiträge: 14
Registriert: 13.04.2009 10:17:49

OpenLDAP: Strong(er) authentication required

Beitrag von xenilio » 25.04.2010 00:51:34

Hallo zusammen,

ich schreibe mir gerade ein kleines Tool in PHP, das Änderungen an Einträgen im Ldap vornehmen muss. Dazu benutze ich die die Funktion ldap_modify. Allerdings erhalte ich dabei folgenden Fehler:
Warning: ldap_modify() [function.ldap-modify]: Modify: Strong(er) authentication required in /var/www/htdocs/classes/LDAPUser.class.php on line 34
Wenn ich mit dem gleichen User mit phpLDAPadmin Änderungen an dem Eintrag vornehme, funktioniert das wunderbar.

Ich habe nach ein bisschen googlen herausgefunden, dass ich TLS/SSL Unterstützung nutzen soll, damit die Authentifizierung "stark genug" ist. Allerdings finde ich das etwas unsinnig, da der Server sowieso nur lokal im Einsatz ist.

Hat jemand irgendeine Idee, wie man das anders lösen kann?

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: OpenLDAP: Strong(er) authentication required

Beitrag von ThorstenS » 25.04.2010 08:31:29

Ich kenne die Meldung nur, wenn ich auf der console einen ldap-Befehl absetze und das -x vergesse. Ohne versucht er eine SASL Verbindung, die ich nicht eingerichtet habe. Evtl. schaust du auch in die Richtung.
Ansonsten sollte es für die PHP Profis hier sehr hilfreich sein, wenn du den entspr. Codeausschnitt postest. Dann können andere viel einfacher testen.
Das erhöht deine Chance auf eine schnelle Hilfe i.A. sehr.

xenilio
Beiträge: 14
Registriert: 13.04.2009 10:17:49

Re: OpenLDAP: Strong(er) authentication required

Beitrag von xenilio » 25.04.2010 10:29:41

Stimmt.

Da das Ganze auf verschiedene Dateien verteilt ist, poste ich hier mal nur die relevanten Codefragmente.
Also zunächst wird die Verbindung aufgebaut und die Protokollversion festgelegt:

Code: Alles auswählen

$ldapconn = ldap_connect("ldap://localhost");
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
Nun wird im Zuge eines Loginsystems ein Objekt der Klasse LDAPUser erzeugt, welches unter Anderem das Attribut "dn" für den Distinguished Name des Usereintrags im Ldap enthält. Für einen beispielhaften User sei dies mal "uid=maxmustermann,ou=accounts,ou=community,dc=nodomain".

Nun soll beispielsweise die Mail Adresse des Users geändert werden. Dafür gibt es das Attribut "replace_attrs", welches die vorzunehmenden Änderungen festhält:

Code: Alles auswählen

$this->replace_attrs["mail"] = "max@example.com";
Schließlich gibt es die Methode "writeToLdap", die alle Änderungen ins Ldap schreibt. Diese wird dann aufgerufen und erzeugt die in meinem ersten Post genannte Fehlermeldung:

Code: Alles auswählen

public function writeToLdap() {
        global $ldapconn;

        if (count($this->replace_attrs) > 0) {
                ldap_bind($ldapconn, "cn=ucp,ou=community,dc=nodomain", "*********");
                ldap_modify($ldapconn, $this->getDn(), $this->replace_attrs);
        }
}
Der entsprechende Bind User hat die notwendigen Rechte auf das Verzeichnis, da das Ganze mit phpLDAPadmin fehlerfrei funktioniert.

Danke im Voraus!

Edit:
die Funktion ldap_bind sollte, wenn ich es richtig verstehe, einen simple bind ausführen, kein Sasl, denn dafür gibt es die Funktion ldap_sasl_bind.

mtheiss
Beiträge: 154
Registriert: 01.04.2005 22:07:26
Lizenz eigener Beiträge: MIT Lizenz

Re: OpenLDAP: Strong(er) authentication required

Beitrag von mtheiss » 25.04.2010 10:58:04

Hallo,

versuch mal bei ldap_bind das Ergebnis des Funktionsaufrufes auszugeben. Eventuell bekommt er den bind ja nicht mit den Credentials hin und macht daher einen anonymous bind.

Gruss
Martin

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: OpenLDAP: Strong(er) authentication required

Beitrag von ThorstenS » 25.04.2010 11:01:34

Erhöhe mal den loglevel in der slapd.conf und schau dann beim Zugriff in das logfile mittels tail -f /var/log/daemon.log

Code: Alles auswählen

#loglevel        none
loglevel        261

xenilio
Beiträge: 14
Registriert: 13.04.2009 10:17:49

Re: OpenLDAP: Strong(er) authentication required

Beitrag von xenilio » 25.04.2010 12:01:14

Danke für eure Tipps! Das Problem ist jetzt gelöst.

Es wurde tatsächlich ein anonymer Bind ausgeführt. Dies lag daran, dass die Zugangsdaten der Funktion ldap_bind nicht direkt als Strings übergeben wurden, sondern als Config Direktiven, die aber dummerweise nicht existierten bzw. anders hießen. Da demnach keine falschen, sondern leere Zugangsdaten übergeben wurden, lieferte ldap_bind natürlich true zurück, weshalb ich einen Fehler in den Zugangsdaten ausgeschlossen und das Problem woanders gesucht habe.

Antworten