LDAP Server konfiguration - Fehler in Eingabemaske
-
Hallo liebe i-doit Gemeinde. Ich habe jetzt seit einigen Wochen i-doit als neues Dokumentationstool für unsere IT-Infrastruktur evaluiert. Erst mal großes Lob! ein klasse tool.
Nur mit der LDAP anbindung für die Nutzer Authentifizierung hab ich ein paar Probleme.
ich habe einen LDAP Server angelegt:
Aktiv -> JA
Directory ( -> Active Directory
LDAP-Version: -> 2
IP / Hostname ( -> our.server.company.com
Port ( -> 389
Admin Benutzername (DN) ( -> COMPANYDOMAIN\ldapuser
Passwort ( ****
Passwort Wiederholung ( ****
Timelimit: 15LDAP Parameter für i-doit Login
Nach Benutzern suchen in (OU) (*): OU=intern,OU=administration,OU=bereiche,DC=our,DC=company,DC=name,DC=com
Filter: (&(objectClass=user)(objectClass=sAMAccountName)(objectClass=Password))Attribut: objectClass Wert: user
Attribut: objectClass Wert: sAMAccountName
Attribut: objectClass Wert: Password
naja wie Ihr unschwer erraten werdet: es funktioniert nicht.
Problem 1: ich kann die Eingabemasken nur bedingt bearbeiten. Die erste inputbox für "Attribut" und "Wert" ist ausgegraut? also kann ich schon mal "(objectClass=user)" (was meiner Meinung nach nicht hin haut) nicht löschen. Die anderen beiden inputboxen sind zwar editierbar, aber nicht löschbar.
Wenn ich versuche einen neuen LDAP server anzulegen (weil der alte ja nicht so recht editierbar ist), dann bekomme ich ein formular mit einem neuen server, ohne daten. wenn ich den "edit" button betätige, dann lande ich wieder in der übersicht für die eingerichteten LDAP Server.
ich benutze Firefox 3.6.17 oder opera 11.11 (bitte fragt mich nicht, ob es mit dem IE geht… da müsste ich meine Windows VM erst abstauben)
Problem 2:
so richtig hab ich die Logik noch nicht verstanden.
"Nach Benutzern suchen in (OU) (*):" -> hier gebe ich doch die organisational unit einer domain an, in welcher nachgesehen werden soll ob der Benutzer existiert, welcher sich versucht anzumelden, richtig?"Filter:" -> und hier sage ich dann, welche kriterien er erfüllen muss
in meinem Fall will ich einem benutzer aus unserer domain, der in der OU "intern" und in der OU "administration" und in der OU "bereiche" erlauben sich am idoit anzumelden. Wenn ich den button "start test" betätige, dann bekomme ich auch bestätigt das die Verbindung OK ist und mehr als 50 Datensätze gefunden wurden. Wenn ich beim test wireshark auf dem i-doit server laufen lasse, dann sehe ich auch wie die AD abgefragt wird und mein Benutzerobjekt übertragen wird (also die OU kombi ist schon mal korrekt).
Wenn ich mich jetzt mit diesem Benutzernamen versuche am Frontend anzumelden, dann sehe ich im wireshark aber nur:
i-doit -> ldap = bindRequest
ldap -> i-doit = bindResponse(success)
i-doit -> ldap = unbindRequest()also der i-doit server scheint sich zum ldap zu verbinden, der Verbindugsaufbau klappt, dann baut er die Verbindung aber sofort wieder ab und am Frontend bekomme ich einen Anmeldefehler (flascher user/password)
Könnt Ihr mir da weiter helfen?
viele Grüße
-
Hast Du das LDAP Debugging eingeschaltet (in src/config.inc.php)?
die Ausgabe in temp/ldap_debug.txt wäre interessant.Hardcore geht immer
UPDATE isys_ldap SET isys_ldap__filter = '(objectClass=*)' WHERE isys_ldap__hostname = '<hostname ip="">'wird aber durch die Oberfläche wieder überschrieben</hostname>
-
Also ich hab bei uns das ldap logging aktiv und die konfiguration mal direkt in die SQL Datenbank gepresst (komischerweise kann ich jetzt die konfig im Frontend wieder bearbeiten). Im logfile sehe ich:
2011-10-26 17:04:00 ldap: LDAP Module launched for mandator: idoit_it
2011-10-26 17:04:00 ldap: Found 1 configured LDAP Servers.
2011-10-26 17:04:00 ldap: 1: our.server.company.com (OU=intern,OU=administration,OU=bereiche,DC=our,DC=company,DC=name,DC=com)
2011-10-26 17:04:00 ldap: –--------------------------------------------------------------------------------------------
2011-10-26 17:04:00 ldap: Creating new ldap-library connection to: our.server.company.com:389, user: DC\ldapu
2011-10-26 17:04:00 ldap: Connected to our.server.company.com
2011-10-26 17:04:00 ldap: Searching for username: PC00079
2011-10-26 17:04:00 ldap: Getting user(s) using filter: (&(&(objectClass=*)(cn=PC00079)) in search-path: OU=intern,OU=administration,OU=bereiche,DC=our,DC=company,DC=name,DC=com
2011-10-26 17:04:00 ldap: ** No user found.
2011-10-26 17:04:00 ldap: User not found. Check if PC00079 exist in your configured search-path: OU=intern,OU=administration,OU=bereiche,DC=our,DC=company,DC=name,DC=com
2011-10-26 17:04:00 ldap: ----------------------------------------------------------------------------------------------
2011-10-26 17:04:00 ldap: *** LDAP Auth failed. (false)im wireshark trace am server sehe ich aber nur:
i-doit -> ldap server : bindRequest
ldap server -> i-doit : bindResponse (success)
i-doit -> ldap server : unbindRequestalso direkt nach dem Verbindungsaufbau zum ldap server wir die Verbindung sofort wieder geschlossen, ohne eine Abfrage zu machen.
Funktioniert ldap mit MS AD unter version 0.9.9-7 überhaupt? kann das jemand bestätigen? habe ich einen Grundlegenden Denkfehler drin?
Wenn ich den test im config menü durchführe, dann sagt er wie schon erwähnt:
WEB Frontend:
Connection OK!
50 or more objects found in OU=intern,OU=administration,OU=bereiche,DC=our,DC=company,DC=name,DC=com.logfile:
2011-10-26 18:20:54 ldap: Testing connection to our.server.company.com:389 (DC\ldapu)
2011-10-26 18:20:55 ldap: Connected to our.server.company.com
2011-10-26 18:20:55 ldap: Connection successfull.
2011-10-26 18:20:55 ldap: 50 or more objects found in OU=intern,OU=administration,OU=bereiche,DC=our,DC=company,DC=name,DC=comwireshark:
i-doit -> ldap server : bindRequest
ldap server -> i-doit : bindResponse (success).
.
.eine Abfrage mit jeder Menge Daten (u.a dem Benutzer, den ich versuche anzumelden)
.i-doit -> ldap server : unbindRequest
-
dummerweise spuckt er beim test den verwendeten filter im logfile nicht aus. er meint nur, dass es eben gehen müsste. Beim eigentlichen Verbinden printet er ja den verwendeten filter aus: (&(&(objectClass=*)(cn=PC00079))
und das sieht schon komisch aus, wo hat er denn das erste & her? steht jedenfalls nicht in der Datenbank.
-
(&(objectClass=user)(objectClass=sAMAccountName)(objectClass=Password))
Das ist so denke ich nicht richtig, da sAMAcoountName ein Attribut und nicht keine objectClass ist. Was für einen Filter wolltest du denn genau erstellen? -
jo, der war falsch. Ich hab mitlerweile nur noch "objectClass=*"
Aber es tut leider nicht, beim test findet er zwar mehr als 50 Objekte (laut wireshark ist dort auch mein user dabei) wenn ich mich aber mit meinem user anmelden will, dann funktioniert es nicht (laut wireshark macht er auch keine Abfrage).
Ich weiß halt leider nicht ob es ein Bug ist, oder ich mich einfach nur zu blöd anstelle (zweiteres ist durchaus im Rahmen des möglichen gg)
-
Heheh kann es sein das dein User im i-doit bereits existiert? Denn die Abfrage findet nur unter folgenden drei Bedingungen statt:
- User existiert nicht (User wird gesucht und angelegt)
- User existiert aber Passwort des internen i-doit Users wurde falsch eingegeben (User wird im LDAP gesucht und das LDAP Passwort wird ebenfalls probiert)
- User existiert und wurde über die LDAP Kopplung angelegt (User wird im LDAP gesucht und Passwort wird geprüft)
-
Also ich habe jetzt mal die ersten beiden deiner Bedingungen getestet. Das Ergebnis bleibt in beiden Fällen wie beschrieben:
i-doit login screen sagt: "Invalid username or password!"
/var/www/temp/ldap_debug.txt:2011-11-03 15:22:34 ldap: LDAP Module launched for mandator: idoit_it
2011-11-03 15:22:34 ldap: Found 1 configured LDAP Servers.
2011-11-03 15:22:34 ldap: 1: our.server.company.com (OU=intern,OU=administration,OU=bereiche,DC=our,DC=company,DC=name,DC=com)
2011-11-03 15:22:34 ldap: –--------------------------------------------------------------------------------------------
2011-11-03 15:22:34 ldap: Creating new ldap-library connection to: our.server.company.com:389, user: DOMAIN\ldapr
2011-11-03 15:22:34 ldap: Connected to our.server.company.com
2011-11-03 15:22:34 ldap: Searching for username: prendela
2011-11-03 15:22:34 ldap: Getting user(s) using filter: (&(objectClass=*)(cn=prendela)) in search-path: OU=intern,OU=administration,OU=bereiche,DC=our,DC=company,DC=name,DC=com
2011-11-03 15:22:34 ldap: ** No user found.
2011-11-03 15:22:34 ldap: User not found. Check if prendela exist in your configured search-path: OU=intern,OU=administration,OU=bereiche,DC=our,DC=company,DC=name,DC=comwireshark:
ldap verbindung wird aufgebaut (bindrequest) und sofort wieder geschlossen (unbindrequest) ohne irgend eine Art von kommunikation dazwischen
irgend eine idee?
in der Datenbank steht bei mir noch unter "isys_ldap__filter_array "
a:5:{s:10:"attributes";a:1:{i:0;s:11:"objectClass";}s:6:"values";N;s:10:"field_type";a:1:{i:0;s:1:"3";}s:15:"field_link_type";a:1:{i:0;s:1:"&";}s:14:"field_operator";a:1:{i:0;s:1:"=";}}kann dort ein fehler drin liegen?
-
Ich glaube es liegt am cn=prendela. Setzt du active directory ein? Wenn ja geh mal in die LDAP Mappings unter LDAP -> Directories -> Active Directory und stell die Mappings so ein wie in dem angehangenen Screenshot
-
COOL! COOL! COOL!
es funktioniert! allerherzlichsten Dank!
jetzt hab ich nur noch eine konzeptionelle Frage:
ich hab mich jetzt mit einem user anmelden wollen, der im AD existiert, im i-doit aber nicht angelegt ist:
"You need at least reading rights for logging in to an i-doit mandator.
Contact your system administrator for adding your user into a corresponsing right-group."
das bedeutet also, ich muss die user , welche im i-doit arbeiten sollen im i-doit anlegen? ich hatte das so verstanden, dass die user einfach nur im AD existent sein müssen (über den entsprechenden Filter) und dann zugang haben?
-
Die User müssen nur im LDAP existent sein, nicht im i-doit. Nach erstmaligem Login wird der User im i-doit automatisch angelegt. Wenn du die User automatisch einer Rechtegruppe zuweisen möchtest, machst du dir im AD z.B. eine i-doit-admins Gruppe, dann gehst du auf Kontakte -> Personengruppen -> Admin -> Personengruppen und setz das Feld "LDAP-Gruppe (Mapping):" auf deine AD Gruppe i-doit-admins. Dann sind die neu angelegten LDAP User aus der AD Gruppe automatisch i-doit Admins. Das Gleiche gilt natürlich auch für alle anderen Gruppen.
-
Super, so langsam verstehe ich.
Und wenn der user im AD sein passwort ändert?
funktioniert das?
also dass der user sich anmeldet, das passwort im i-doit falsch ist (weil er es nur im AD, nicht aber im i-doit geändert hat), i-doit am AD nachfragt und das i-doit PW durch das aus der AD überschreibt?
-
hier meine attributes und die db config…
sieht doch alles wie bei dir aus ? oder?