# Hallo Admins, # bei mir hat es ziemlich lange gedauert bis ich eine LDAP Anbindung hinbekommen habe. # Es hat mich viele Stunden Recherche und bestimmt einige Jahre meines Lebens gekostet:-) # Das versuche ich euch hiermit zu ersparen. # eine LDAP für Dummies gabs schonmal aber diese hier ist ein bißchen aufgeräumter:-) # Das alles hab ich im OTRS- Forum (http://forums.otrs.org/) und er Mailing- Liste (http://www.otrs.org/lists/) gelernt und versuch es hier mal etwas zusammen zu raffen. # Im handbuch Version 3.1 ist es aber mittlerweile auch sehr gut beschrieben. Entweder war es inden vorangegangenen Versionen nicht so klar beschrieben oder ich verstehe es erst jetzt:-) # Um LDAP erstmal grundlegend zu verstehen hat mir diese Seiten hier sehr geholfen. # Lest euch das mal durch... das spart sehr viel Zeit und viele Fehlversuche. # http://www.selfadsi.de/ldap-path.htm#DNs # http://www.selfadsi.de/bind.htm # http://www.selfadsi.de/search.htm # ladet euch einem LDAP- Browser runter z.B. hier http://www.ldapadministrator.com/ # damit wird es wesentlich einfacher # und vielleicht einen anständigen Editor, ich hab Notepad++, hilft auch viele Tippfehler (vergessene ' usw.) zu vermeiden. # In diesem Sinne hier eine Beispielconfig die euch hoffentlich bei der LDAP Anbindung hilft. # Ich werd Sie mit Kommentaren vollmüllen damit die einzelnen Punkte klarer werden, zumindest hat es da bei mir gehakt... # Diese Config ist bestimmt nicht perfekt und kann sicherlich noch verbessert werden, aber sie funtioniert:-) # Hier steht überall 1 hinter (AuthModule1, Host1, ...) # habe ich drin gelassen weil ich mehrere ADs abfrage und auch mehrere Firmen im OTRS habe # wenn ihr nur eine habt kann die 1 überall weg. Ansonsten müsst ihr den ganzen Block halt pro Firma anlegen und einfach durchnummerieren # Aber hier steht ein wichtiger Beitrag von jojo # http://forums.otrs.org/viewtopic.php?f=17&t=7423 # da bin ich auch drauf reingefallen bezüglich der Nummerierung, muss man halt erst mal wissen:-) # ich hab in dieser Versionmal eine zweite Abfrage drin gelassen, damit man sieht wie es sich aufbaut. #$Self->{'AuthModule::LDAP::Host1'} = 'dc.Firma1.local'; #... #... #... #$Self->{'AuthModule::LDAP::Host2'} = 'dc.Firma2.local'; #... #... #... #Bei uns sind es aktuell fünf aber es wiederholt sich immer nur, also: #$Self->{'AuthModule::LDAP::Host4'} = 'dc.Firma1.local'; #... #... #... #$Self->{'AuthModule::LDAP::Host4'} = 'dc.Firma2.local'; #... #... #... # usw. #-------------------------------------------------------------------------------------------- # Firma1 # #-------------------------------------------------------------------------------------------- #-------------------------------------------------------------------------------------------- # Agenten Authentifizeirung # #-------------------------------------------------------------------------------------------- $Self->{'AuthModule1'} = 'Kernel::System::Auth::LDAP'; $Self->{'AuthModule::LDAP::Host1'} = 'dc.Firma1.local'; #hier kann auch die IP des DCs stehen. aber sinvollerweise hat man ja mehr als einen:-) $Self->{'AuthModule::LDAP::BaseDN1'} = 'dc=Firma1,dc=local';# lest euch die Seiten die ich oben verlinkt habe durch, # dann wird DN,OU, DC usw. alles klar:-) $Self->{'AuthModule::LDAP::UID1'} = 'sAMAccountName'; #$Self->{'AuthModule::LDAP::GroupDN1'} = 'CN=otrsagents,OU=Gruppen,DC=Firma,DC=local'; # nur Mitlieder dieser Gruppe dürfen sich einloggen, ich habs auskommentiert weil ich es bei uns nicht filtere. #$Self->{'AuthModule::LDAP::AccessAttr1'} = 'member'; # bei 2008er Domänen ist es 'member' bei 2003er ist es 'memberUID'* $Self->{'AuthModule::LDAP::SearchUserDN1'} = 'binduser1@Firma1.local'; # hier geht es auch mit dem user Principal Name, # oder eben die DN des Bindusers, war bei mir ne böse Falle weil ich es nicht wörtlich genug genommen habe. Die SearchUserDN ist nicht die DN # in der der User liegt sondern die eindeutige des Users, das gleiche gilt für die GroupDNs # der Search User muss Mitglied in "Domänen-Benutzer" und in "Windows-Authentifizierungszugriffgruppe" sein # sähe dann ungefähr so aus #$Self->{'AuthModule::LDAP::SearchUserDN1'} = 'CN=otrsldap,CN=Users,DC=Firma1,DC=local'; $Self->{'AuthModule::LDAP::SearchUserPw1'} = 'Password'; #-------------------------------------------------------------------------------------------- # Kunden Authentifizeirung # #-------------------------------------------------------------------------------------------- $Self->{'Customer::AuthModule1'} = 'Kernel::System::CustomerAuth::LDAP'; $Self->{'Customer::AuthModule::LDAP::Host1'} = 'dc.Firma1.local'; $Self->{'Customer::AuthModule::LDAP::BaseDN1'} = 'DC=Firma1, DC=local'; $Self->{'Customer::AuthModule::LDAP::UID1'} = 'sAMAccountName'; #$Self->{'Customer::AuthModule::LDAP::GroupDN1'} = 'CN=otrscustomer,CN=Users,DC=Firma,DC=local'; # das gleiche wie bei den Agents nur wer in der Gruppe 'otrscustomer' ist darf sich einloggen, bei uns ist es nicht so, deswegen auskommantiert:-) $Self->{'Customer::AuthModule::LDAP::SearchUserDN1'} = 'binduser1@Firma1.local'; $Self->{'Customer::AuthModule::LDAP::SearchUserPw1'} = 'Password'; #-------------------------------------------------------------------------------------------- # Kundendaten # #-------------------------------------------------------------------------------------------- $Self->{CustomerUser1} = { Module => 'Kernel::System::CustomerUser::LDAP', Params => { Host => 'dc.Firma1.local', BaseDN => 'DC=Firma1, DC=local',# hier die DN in der eure User liegen, kommt halt drauf an wie eurer AD strukturiert ist SSCOPE => 'sub', UserDN => 'binduser1@Firma1.local', UserPw => 'Passwort123', AlwaysFilter => '(&(objectclass=user)(mail=*.*@Firma1.de))', # falls ihr was ausschliessen wollt geht das mit (!(ausgeschlossenes Attribut)): # AlwaysFilter => '(&(objectclass=user)(mail=*.*@Firma.de)(!((was auch immer)))', }, CustomerKey => 'sAMAccountName', CustomerID => 'mail', CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'], CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'], CustomerUserPostMasterSearchFields => ['mail'], CustomerUserNameFields => ['givenname', 'sn'], Map => [ # hier könnt ihr euch LDAP Atribute Mappen. Firma2 (unten) hat ein Besipiel drin. # da wird die FAX-Nummer ins Kommentarfeld gemappt # note: Login, Email and CustomerID needed! # var, frontend, storage, shown, required, storage-type # [ 'UserSalutation', 'Title', 'title', 1, 0, 'var' ], [ 'UserFirstname', 'Firstname', 'givenname', 1, 1, 'var' ], [ 'UserLastname', 'Lastname', 'sn', 1, 1, 'var' ], [ 'UserLogin', 'Login', 'sAMAccountName', 1, 1, 'var' ], [ 'UserEmail', 'Email', 'mail', 1, 1, 'var' ], [ 'UserCustomerID', 'CustomerID', 'mail', 0, 1, 'var' ], [ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var' ], # [ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var' ], # [ 'UserComment', 'Comment', 'description', 1, 0, 'var' ], ], }; #-------------------------------------------------------------------------------------------- # Firma1 Ende # #-------------------------------------------------------------------------------------------- # Das wars:-) # Ich hoffe es hilft euch ein bißchen. # Konstruktive Kritik und Feedback sind natürlich immer willkommen! # Hier noch die zweite "Abfrage" mal ohne Kommnetare (machst direkt übersichtlicher:-)). #-------------------------------------------------------------------------------------------- # Firma2 # #-------------------------------------------------------------------------------------------- #-------------------------------------------------------------------------------------------- # Agenten Authentifizeirung # #-------------------------------------------------------------------------------------------- $Self->{'AuthModule2'} = 'Kernel::System::Auth::LDAP'; $Self->{'AuthModule::LDAP::Host2'} = 'dc.Firma2.local'; $Self->{'AuthModule::LDAP::BaseDN2'} = 'dc=Firma2,dc=local'; $Self->{'AuthModule::LDAP::UID2'} = 'sAMAccountName'; $Self->{'AuthModule::LDAP::SearchUserDN2'} = 'binduser2@Firma2.local'; $Self->{'AuthModule::LDAP::SearchUserPw2'} = 'Password2'; #-------------------------------------------------------------------------------------------- # Kunden Authentifizeirung # #-------------------------------------------------------------------------------------------- $Self->{'Customer::AuthModule2'} = 'Kernel::System::CustomerAuth::LDAP'; $Self->{'Customer::AuthModule::LDAP::Host2'} = 'dc.Firma2.local'; $Self->{'Customer::AuthModule::LDAP::BaseDN2'} = 'DC=Firma2, DC=local'; $Self->{'Customer::AuthModule::LDAP::UID2'} = 'sAMAccountName'; $Self->{'Customer::AuthModule::LDAP::SearchUserDN2'} = 'binduser2@Firma2.local'; $Self->{'Customer::AuthModule::LDAP::SearchUserPw2'} = 'Password2'; #-------------------------------------------------------------------------------------------- # Kundendaten # #-------------------------------------------------------------------------------------------- $Self->{CustomerUser2} = { Module => 'Kernel::System::CustomerUser::LDAP', Params => { Host => 'dc.Firma2.local', BaseDN => 'DC=Firma2, DC=local', SSCOPE => 'sub', UserDN => 'binduser2@Firma2.local', UserPw => 'Password2', AlwaysFilter => '(&(objectclass=user)(mail=*.*@Firma2.de))', }, CustomerKey => 'sAMAccountName', CustomerID => 'mail', CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'], CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'], CustomerUserPostMasterSearchFields => ['mail'], CustomerUserNameFields => ['givenname', 'sn'], Map => [ # note: Login, Email and CustomerID needed! # var, frontend, storage, shown, required, storage-type # [ 'UserSalutation', 'Title', 'title', 1, 0, 'var' ], [ 'UserFirstname', 'Firstname', 'givenname', 1, 1, 'var' ], [ 'UserLastname', 'Lastname', 'sn', 1, 1, 'var' ], [ 'UserLogin', 'Login', 'sAMAccountName', 1, 1, 'var' ], [ 'UserEmail', 'Email', 'mail', 1, 1, 'var' ], [ 'UserCustomerID', 'CustomerID', 'mail', 0, 1, 'var' ], [ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var' ], [ 'UserComment', 'Comment', 'facsimileTelephoneNumber', 1, 1, 'var' ], # [ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var' ], # [ 'UserComment', 'Comment', 'description', 1, 0, 'var' ], ], }; #-------------------------------------------------------------------------------------------- #-------------------------------------------------------------------------------------------- # Firma2 Ende # #--------------------------------------------------------------------------------------------